我必须通过向它发送击键来控制另一个应用程序,例如CTRLSorCTRLSHIFTC或CTRLF。
我已经尝试了很多东西,但我无法让它工作。所以我试图在一个更简单的情况下做到这一点。
这成功发送Hey
到记事本:
procedure TForm1.Button1Click(Sender: TObject);
var notepad, edit: HWND;
begin
notepad := FindWindow('notepad', nil);
edit := FindWindowEx(notepad, FindWindow('Edit', nil), nil, nil);
SendMessage(edit, WM_CHAR, dword('H'), 0);
SendMessage(edit, WM_CHAR, dword('e'), 0);
SendMessage(edit, WM_CHAR, dword('y'), 0);
end;
这成功地将F5密钥发送到记事本,并且还可以F3弹出“查找”对话框。
notepad := FindWindow('notepad', nil);
PostMessage(notepad, WM_KEYDOWN, VK_F5, 0);
PostMessage(notepad, WM_KEYUP, VK_F5, 0);
但我不知道为什么 usingSendMessage
在上面的例子中不起作用。
我能想到的最好的事情就是这样,它什么也没做。
notepad := FindWindow('notepad', nil);
PostMessage(notepad, WM_KEYDOWN, VK_CONTROL, 0);
PostMessage(notepad, WM_KEYDOWN, VkKeyScan('F'), 0);
PostMessage(notepad, WM_KEYUP, VkKeyScan('F'), 0);
PostMessage(notepad, WM_KEYUP, VK_CONTROL, 0);
我在这里的某个地方找到了一个库,它有点模拟 VBScript 发送键功能,但只是查看代码,它似乎只是将键广播到当前应用程序或所有应用程序,因为没有 Handle 参数。