DLL全局钩子改变指定程序的Edit文本(100)

  • 主题发起人 主题发起人 duanyq7
  • 开始时间 开始时间
D

duanyq7

Unregistered / Unconfirmed
GUEST, unregistred user!
[2009-04-01]DLL是一个全局钩子,挂接到指定进程监听键盘,一旦指定进程按下某键,则自动执行一些操作。即sendmessage是由dll中的回调函数来调用,而非外部程序调用。DLL中的回调函数如下:function KeyHookProc(iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; export;begin if iCode < 0 then Result := CallNextHookEx(hOldKeyHook, iCode, wParam, lParam) else begin if wParam = XXX then //指定键按下 begin //1.对按钮发送消息: SendMessage(hdButton, WM_LBUTTONDOWN, 0, 0); SendMessage(hdButton, WM_LBUTTONUP, 0, 0); //2.对输入框发送消息: SendMessage(hdEdit, WM_SETFOCUS, 0, 0); SendMessage(hdEdit, WM_SETTEXT, 0, Integer(PChar('580013'))); SendMessage(hdEdit, EM_SETSEL, 4, 4); end; end;end;即先触发一个按钮的点击,再对一个输入框发送文本。我测试如果只做其中一个操作,一切正常。但二者合在一起,第二项始终无法触发。类似的,如果连续对两个不同的按钮发送SendMessage,后面一项也无法触发。但单独操作则正常。试过sleep,PostMessage都不行。请高手帮忙,谢谢!!!
 
你得准确的找到目标控件的句柄,比如有A、B两个按钮,如果根据你的方法if wParam = XXX then ...则只能找到A或B的句柄,你可以测试一下,所以你总是后面的动作无法触发。我没有测试过,如果真是这样,你要用别的条件来判断这是A按钮,那是B按钮,然后就可以分别得到它们的句柄进行操作了。
 
我测试如果只做其中一个操作,一切正常。但二者合在一起,第二项始终无法触发。类似的,如果连续对两个不同的按钮发送SendMessage,后面一项也无法触发。但单独操作则正常。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
826
DelphiTeacher的专栏
D
后退
顶部