1

我在一个监视鼠标手势的 DLL 中有这个全局鼠标钩子设置。

一切正常,但为 WH_MOUSE_LL 设置了一个钩子,这是一个低级钩子,不​​需要在外部可注入 DLL 中。

一旦我切换到更合适的那个会说 - WH_MOUSE 鼠标钩,一切都崩溃了。一旦我在我的主应用程序(安装钩子的那个)之外单击,钩子就会损坏 - ::UnhookWindowsHookEx 将失败。

我只发现这个人在专家交流中说

“没办法,至少在Windows XP + SVP2下WH_MOUSE不会全球化,你必须改用WH_MOUSE_LL。”

我正确设置了钩子:在使用共享数据部分的 DLL 中,从钩子过程中发布而不发送消息。

为什么这发生了变化?为什么没有记录?有人遇到过这个吗?谢谢!

顺便说一句:我对流行的StrokeIt应用程序进行了一些逆向工程,它使用了 WH_GETMESSAGE 和 WH_MOUSE 钩子的组合,并且仍然可以在 XP/Vista 上运行......

4

2 回答 2

0

不确定这是否会更好作为评论,但这里有:我相信根据 MSDN WH_MOUSE 在线程级别或全局受支持。

正如您自己指出的那样,有很多应用程序在使用它。

所以我的猜测是你对全局 WH_MOUSE 的具体实现有一个需要调试和修复的问题。当您说“钩子已损坏”时,究竟会发生什么?上钩的应用程序会崩溃吗?您能否将调试器附加到您期望鼠标事件来自的应用程序并检查您的钩子中真正崩溃的原因?

于 2009-11-28T19:32:15.377 回答
0

对我来说,不再支持全局 WH_MOUSE 钩子对我来说是个新闻,因为我有一些使用它的应用程序,它们继续在 XP、Vista 和 Windows 7 上运行。

你是如何设置钩子的?你应该可以做 SetWindowsHookEx(WH_MOUSE, my_mouse_callback, g_hinstance, NULL)。

我唯一能想到的是回调函数花费的时间太长,在这种情况下,Windows 可能会删除钩子,或者它没有正确调用 CallNextHookEx。

于 2009-07-10T03:13:59.093 回答