2017-02-15 137 views
1

有人能指导我找出一个Windows API函数来使用,以拦截在特定窗口上的某个按钮上点击鼠标。我已经使用spy ++了解到,当我将查找工具移动到某个按钮或窗口中的任何东西时,我可以读取有关处理程序和其他信息的信息。那么有没有办法在执行某个动作之前拦截鼠标点击并注入我们的代码。非常感谢您分享任何关于此的想法。拦截窗口鼠标点击

回答

2

我能想到的几个不同的方式来处理这个:

  1. 您可以使用SetWindowsHookEx()安装在目标窗口中的一个WH_CALLWNDPROC消息钩子线程,然后钩子回调可以在目标窗口的父级上处理窗口消息,如WM_LBUTTON(DOWN|UP),或者在目标窗口的父级上处理BN_CLICKED。需要注意的是回调需要在DLL中实现,因此可以将钩子注入到目标进程中。您可以使用GetWindowThreadProcessId()获取目标窗口的线程ID。

    其中的一种变化是让SetWindowsHookEx()安装WH_GETMESSAGE钩子,然后您可以使用PostMessage()将自定义窗口消息发送到目标窗口。钩子回调然后可以使用SetWindowLongPtr()SetWindowSubclass()来直接对目标窗口和/或其父级进行子类化以用于进一步的消息处理。

  2. 您可以使用SetWinEventHook()来监视EVENT_OBJECT_INVOKED事件,例如按钮点击。如果使用WINEVENT_OUTOFCONTEXT标志,则不需要DLL,但需要注意的是安装线程需要一个活动的消息循环,以便跨越流程边界处理事件。

+0

这是最好的答案,但它需要代码示例 – FindOutIslamNow

1

您将需要调用SetWindowsHookEx API来设置窗口挂钩。下面是与源代码的文章,演示其用法:Hooks and DLLs

+0

@RemyLebeau我已经发布了一种方法。如果它与我的不同,请单独发布您自己的答案。 –