gpt4 book ai didi

delphi - SetWindowsHookEx WH_MOUSE 在 Win7 中断点卡住

转载 作者:行者123 更新时间:2023-12-03 15:58:47 24 4
gpt4 key购买 nike

赫洛斯,

在 WinXP 上,我的应用程序已成功使用全局鼠标 Hook 来检索鼠标位置并单击,即使它没有焦点。该钩子(Hook)位于一个单独的 .dll 中,并且像这样初始化(在 delphi 中):

SetWindowsHookEx(WH_MOUSE, @MouseHookCB, HInstance , 0);

现在在 Win7 上,这基本上也可以在运行时运行,但我无法再很好地调试我的应用程序(在 XP 下可以)。一旦我遇到断点,Win7就完全卡住了。我无法切换到另一个进程(即使任务管理器无法打开)。如果幸运的话,我可以在 IDE 中停止我的进程。大多数时候,我必须重新启动/注销才能重新获得访问权限。

我知道问题与鼠标 Hook 有关,因为如果我不使用该 Hook ,它就不会出现。即使我的钩子(Hook)程序除了执行以下操作之外什么也不做,也是如此:

CallNextHookEx(MouseHook, Code, wParam, lParam);

即。只是钩子(Hook)的存在造成了麻烦。

让 globalhooks.dll 向 EventLog 写入一些内容,我发现即使我处于断点,它仍然处于事件状态。

我尝试通过 WH_MOUSE_LL 使用低级鼠标钩子(Hook),它基本上可以工作,但在安装钩子(Hook)时以及有时在调整窗口大小时给我带来了奇怪的鼠标移动延迟。当遇到断点时也会卡住几秒钟,但至少系统会在大约 5 秒后恢复......因此这个选项更糟糕,因为它也会影响运行时。

知道为什么 WH_MOUSE Hook 首先会在调试期间卡住我的应用程序吗?

最佳答案

如果您正在调试应用程序,则不应使用 HInstance。您将 .exe 本身注入(inject)全局进程,在调试时您将停止所有鼠标处理,这可以解释您的问题。

SetWindowsHookEx 文档规定,当 Hook 到自己的进程时传递 0,而当 Hook 到远程或全局进程时传递 DLL 的句柄。

还要确保 MouseHookCB() 返回 CallNextHookEx 的值。

关于delphi - SetWindowsHookEx WH_MOUSE 在 Win7 中断点卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3470468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com