delphi – 使用WinAPI将键击发送到另一个应用程序

delphi – 使用WinAPI将键击发送到另一个应用程序,第1张

概述我必须通过向CTRLS或CTRLSHIFTC或CTRLF发送击键来控制另一个应用程序. 我尝试了很多东西,但是我无法让它发挥作用.所以我试图在一个更简单的案例中做到这一点. 这成功地将Hey发送到记事本: procedure TForm1.Button1Click(Sender: TObject); var notepad, edit: HWND;begin notepad := Fin 我必须通过向CTRLS或CTRLSHIFTC或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,DWord('e'),DWord('y'),0);end;

这成功地将F5键发送到记事本,并且还可以使用F3d出“查找”对话框.

notepad := FinDWindow('notepad',nil);PostMessage(notepad,WM_KEYDOWN,VK_F5,0);PostMessage(notepad,WM_KEYUP,0);

但我不知道为什么使用SendMessage不适用于上面的例子.

我能提出的最好的事情就是这样,什么都不做.

notepad := FinDWindow('notepad',VK_CONTRol,VkKeyScan('F'),0);

我在这里发现了一个库,它有点模仿VBScript发送键功能,但只是查看代码,它似乎只是向当前应用程序或所有应用程序广播键,因为没有Handle参数.

解决方法 警告:此方法取决于实现细节,如果您需要保证程序的正确性,则不应使用此方法. (另一方面,你已经在那条路上.例如,IIRC,在windows 95中甚至没有Go to对话框.)

我在我最喜欢的资源编辑器中打开了notepad.exe,并调查了菜单栏.我注意到Save菜单项的ID是3.因此,以下代码在记事本中执行Save菜单命令:

var  notepad: HWND;begin  notepad := FinDWindow('notepad',nil);  SendMessage(notepad,WM_COMMAND,3,0);

同样,在我的notepad.exe版本中查找是21.去是24.

根据评论更新:如果需要发送Ctrl键,可以使用sendinput:

var  notepad: HWND;  inputArray: array[0..3] of Tinput;begin  notepad := FinDWindow('notepad',nil);  // Todo: Either exit if notepad isn't focused,or set focus to notepad  FillChar(inputArray,length(inputArray) * sizeof(Tinput),0);  inputArray[0].Itype := input_KEYBOARD;  inputArray[0].ki.wVk := VK_LCONTRol;  inputArray[1].Itype := input_KEYBOARD;  inputArray[1].ki.wVk := VkKeyScan('S');  inputArray[2].Itype := input_KEYBOARD;  inputArray[2].ki.wVk := VkKeyScan('S');  inputArray[2].ki.DWFlags := KEYEVENTF_KEYUP;  inputArray[3].Itype := input_KEYBOARD;  inputArray[3].ki.wVk := VK_LCONTRol;  inputArray[3].ki.DWFlags := KEYEVENTF_KEYUP;  sendinput(length(inputArray),inputArray[0],sizeof(Tinput));
总结

以上是内存溢出为你收集整理的delphi – 使用WinAPI将键击发送到另一个应用程序全部内容,希望文章能够帮你解决delphi – 使用WinAPI将键击发送到另一个应用程序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1266753.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存