赫洛斯,
在 WinXP 上,我的应用程序已成功使用全局鼠标钩来检索鼠标位置和点击,即使它没有焦点。钩子在一个单独的 .dll 中,并且正在像这样初始化(在 delphi 中):
SetWindowsHookEx(WH_MOUSE, @MouseHookCB, HInstance , 0);
现在在 Win7 上,这基本上也可以在运行时工作,但我不能再很好地调试我的应用程序(我可以在 XP 下)。一旦我遇到断点,Win7 就会完全冻结。我无法切换到另一个进程(即使任务管理器无法打开)。如果我很幸运,我可以在 IDE 中停止我的进程。大多数时候,虽然我必须重新启动/注销才能重新获得访问权限。
我知道问题与鼠标钩有关,因为如果我不使用鼠标钩,它就不存在。即使我的钩子程序只执行以下操作,这也是如此:
CallNextHookEx(MouseHook, Code, wParam, lParam);
IE。只是钩子的存在引起了麻烦。
让 globalhooks.dll 向 EventLog 中写入一些内容,我发现它仍然处于活动状态,即使我在断点上也是如此。
我尝试通过 WH_MOUSE_LL 使用低级鼠标钩子,它基本上可以工作,但在安装钩子时给我奇怪的鼠标移动延迟,有时在调整窗口大小时。遇到断点时也会冻结几秒钟,但至少系统会在大约 5 秒后恢复……因此,这个选项更糟糕,因为它也会影响运行时。
知道为什么 WH_MOUSE 钩子首先会在调试期间冻结我的应用程序吗?