1
我面臨的問題是,我無法獲得由SetWindowsHookEx返回的有效的hookID,而且GetLastWin32Error()也返回0。我寫了下面的代碼:SetWindowsHookEx返回0,GetLastWin32Error()也返回0
_LowLevelhookID = SetWindowsHookEx((int)HookType.WH_KEYBOARD_LL, LowLevelKeyboardHookHandler, IntPtr.Zero, GetCurrentThreadId());
int errorCode = -1;
if(_LowLevelhookID == (IntPtr)0)
{
errorCode = Marshal.GetLastWin32Error();
}
其實我想創建一個低級別的鍵盤鉤子對我的應用程序只根據SetWindowsHookEx函數參數說明我應設置HMOD參數爲空,如果我想設置當前線程ID和僅捕獲我的應用程序的關鍵事件。
任何人都可以確認GetCurrentThreadId()是否需要運行我的應用程序的ThreadID的正確方法?
實際上,我確實設置了SetLastError,我在第一步中錯過了它,但後來糾正了它。好的,所以一般來說WH_KEYBOARD_LL不能用來覆蓋我的應用的關鍵信息嗎? – inva
那麼,你可以隨時在鉤子過程中手動過濾鍵盤事件,檢查你的應用程序是否處於活動狀態。另請參閱http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990%28v=vs.85%29.aspx的'Remarks'部分 - 它定義了鉤子作用域。 – max