有人可以指导我找出一个Windows API函数来拦截鼠标点击特定窗口上的某个按钮。我已经使用了spy ++并且了解到当我将finder工具移动到按钮或窗口中的任何东西时,我能够读取有关处理程序和其他东西的信息。那么有没有办法拦截鼠标点击并在执行某些操作之前注入我们的代码。非常感谢您分享任何有关此事的想法。
答案 0 :(得分:2)
我可以想到几种不同的方法来解决这个问题:
您可以使用SetWindowsHookEx()
在目标窗口的线程中安装WH_CALLWNDPROC
消息钩子,然后钩子回调可以在目标窗口本身处理WM_LBUTTON(DOWN|UP)
之类的窗口消息,或目标窗口父级的BN_CLICKED
。需要注意的是,需要在DLL中实现回调,以便可以将钩子注入到目标进程中。您可以使用GetWindowThreadProcessId()
获取目标窗口的线程ID。
这样做的一个变体是让SetWindowsHookEx()
安装WH_GETMESSAGE
挂钩,然后您可以使用PostMessage()
将自定义窗口消息发布到目标窗口。然后,钩子回调可以使用SetWindowLongPtr()
或SetWindowSubclass()
直接对目标窗口和/或其父窗口进行子类化,以进行进一步的消息处理。
您可以使用SetWinEventHook()
来监控EVENT_OBJECT_INVOKED
个事件,例如按钮点击。如果使用WINEVENT_OUTOFCONTEXT
标志,则不需要DLL,但需要注意的是安装线程需要一个活动的消息循环,以便跨进程边界处理事件。
答案 1 :(得分:1)
您需要调用SetWindowsHookEx API来设置Windows挂钩。这是一篇包含源代码的文章,演示了它的用法:Hooks and DLLs