C++ 拦截windows鼠标单击

C++ 拦截windows鼠标单击,c++,winapi,hook,spy++,C++,Winapi,Hook,Spy++,有没有人能指导我找到一个WindowsAPI函数来拦截鼠标点击某个特定窗口上的某个按钮。我使用了spy++并了解到,当我将finder工具移动到按钮或窗口中的任何东西上时,我能够读取有关处理程序和其他东西的信息。所以,在执行某些操作之前,有没有一种方法可以拦截鼠标点击并注入我们的代码呢。非常感谢您分享有关这方面的任何想法 您需要调用API来设置windows挂钩。下面是一篇包含源代码的文章,演示了它的用法:我可以想出几种不同的方法来实现这一点: 您可以使用在目标窗口的线程中安装WH_CALLWN

有没有人能指导我找到一个WindowsAPI函数来拦截鼠标点击某个特定窗口上的某个按钮。我使用了spy++并了解到,当我将finder工具移动到按钮或窗口中的任何东西上时,我能够读取有关处理程序和其他东西的信息。所以,在执行某些操作之前,有没有一种方法可以拦截鼠标点击并注入我们的代码呢。非常感谢您分享有关这方面的任何想法

您需要调用API来设置windows挂钩。下面是一篇包含源代码的文章,演示了它的用法:

我可以想出几种不同的方法来实现这一点:

  • 您可以使用在目标窗口的线程中安装
    WH_CALLWNDPROC
    消息钩子,然后钩子回调可以在目标窗口本身上处理窗口消息,如
    WM|LBUTTON(DOWN | UP)
    ,或在目标窗口的父窗口上单击
    BN_
    。需要注意的是,回调需要在DLL中实现,以便可以将钩子注入目标进程。您可以使用获取目标窗口的线程ID

    另一种方法是让
    setwindowshookx()
    安装
    WH\u GETMESSAGE
    钩子,然后您可以使用将自定义窗口消息发布到目标窗口。然后,钩子回调可以直接使用或子类化目标窗口和/或其父窗口,以进行进一步的消息处理

  • 您可以使用监视
    事件\u对象\u调用的事件
    事件,例如按钮单击。如果使用
    WINEVENT\u OUTOFCONTEXT
    标志,则不需要DLL,但需要注意的是,安装线程需要活动的消息循环,以便跨进程边界处理事件


  • @雷米尔博我已经发布了一种方法。如果你的答案与我的不同,请分别发布你自己的答案。这是最好的答案,但需要代码示例