2013-06-27 44 views
0

當我設置非全局WH_KEYBOARD鉤子時,它工作正常,並且所有的鍵都被捕獲。但是,如果我按下Alt + Tab然後返回窗口,掛鉤將無故停止工作。 這是我試圖阻止對proccess所有鍵盤消息使用id =根我的鉤PROC:帶Alt + Tab的WH_KEYBOARD停止工作

private static IntPtr HookCallback (int nCode, IntPtr wParam, IntPtr lParam) 
{  
var proc = 0u; 
GetWindowThreadProcessId(GetForegroundWindow(), out proc); 
if (proc != root) return CallNextHookEx(hooks[0], nCode, wParam, lParam); 
    return new IntPtr(1); 
} 

對於開發我使用32位Windows在VirtualBox中。

UPDATE: 它也並不依賴於阻塞或參數傳遞給下一個鉤子:代碼變種,什麼都不做,然後調用一個鉤子的Alt + Tab後停止工作了。如果沒有使用Alt + Tab鍵,那麼失去焦點並激活窗口不會停止掛鉤。

回答

1

在尋找一些樣本並分析我的代碼後,我發現如何解決這個「bug」。我應該設置在SetWindowsHookEx函數最後兩個參數以這樣一種方式:

SetWindowsHookEx(HookType.WH_KEYBOARD, HookCallback, 
       IntPtr.Zero, GetCurrentThreadId()); 

,但不喜歡這樣的:

SetWindowsHookEx(HookType.WH_KEYBOARD, HookCallback, 
       GetModuleHandle(curModule.ModuleName), 0); 
+0

嗯,你在你的問題說,你要設置一個非全局鉤子,但你在這個答案中顯示的代碼(「之前」版本)創建一個全局鉤子。這可能就是爲什麼沒有人可以幫助你。您在問題中提供了不正確的信息。 –