2010-08-12 53 views
3

海洛斯,上断点和SetWindowsHookEx WH_MOUSE冻结在Win7

在WinXP

我的应用程序已经成功地利用全球mousehook检索mouseposition和点击,即使它不具有焦点。钩是在一个单独的.dll和正在初始化像这样(在Delphi):

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

现在Win7上这种运行期间也基本工作原理,但我不能再调试应用程序很好(我可以在XP下)。只要我遇到断点,Win7就会完全冻结。我无法切换到另一个进程(即使taskmanager无法打开)。如果我很幸运,我可以在IDE中停止我的过程。大多数时候,尽管我必须重新启动/注销才能重新获得访问权限。

我知道,因为如果我不使用挂钩,不存在这个问题是关系到鼠标钩子。 这是即使我hookprocedure什么也不做,但以下几点:

CallNextHookEx(MouseHook, Code, wParam, lParam); 

即。只是钩子的存在会导致麻烦。有

的globalhooks.dll写东西到事件日志我看到它,甚至当我在一个断点仍然有效。

我试图用通过WH_MOUSE_LL一个lowlevelmouse挂钩,基本上工作,但让我奇怪的鼠标移动的延迟在安装挂钩,有时在调整大小的窗口。当遇到断点时也会冻结几秒钟,但至少系统会在〜5秒后恢复......因此,此选项更糟糕,因为它也会影响运行时间。

为什么WH_MOUSE钩在首位调试期间冻结我的应用程序的任何想法?

回答

1

如果你正在调试APP,你不应该使用HInstance。 您正在将.exe本身注入到全局进程中,在调试时您将停止可以解释您的问题的所有鼠标处理。

SetWindowsHookEx函数文档状态到hoocking到自己的进程时,通过0和hoocking到远程或全球进程,当处理到一个DLL。

还要确保MouseHookCB()被resturning CallNextHookEx方法的价值。