2010-08-12 70 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方法的價值。