我是WindowHooks的新手,我的目標是「鉤鼠標,鍵盤,並從另一個進程中查找信息」,然後我想我會嘗試掛鉤它。我正在通過C#製作窗口應用程序(我不使用DLL)。SetWindowsHooks掛鉤另一個程序
if(hHook == 0)
{
MouseHookProcedure = new HookProc(mainForm.MouseHookProc);
hHook = SetWindowsHookEx(WH_MOUSE,MouseHookProcedure,(IntPtr)0,GetCurrentThreadID())
if(hHook == 0)
MessageBox.Show("SetWindowsHookEx Failed");
return;
與
MH_MOUSE = 7;
和MouseHookProc是Windows應用程序(我寫這裏面的Windows應用程序)一個公共靜態INT。 該鉤子的作品,但只在本身,但我需要它掛鉤在另一個進程。我試圖從GetCurrentThreadID()
更改爲GetWindowThreadProcessID(hWnd, NULL)
,但它失敗了,我不知道爲什麼。 代碼有問題嗎? P/S:我不知道很多有關窗口掛鉤,我學會了從MSDN,這裏是link
這種類型的鉤子需要一個DLL,它可以被注入到SetWindowsHookEx()的目標進程(第三個參數)中。這樣一個DLL不能用C#編寫,你必須學習像C或C++這樣的語言,或者谷歌許多現有的網頁。我們不需要另一個,謝謝你試圖貢獻。 –
謝謝,我的目標是「寫日誌關於鼠標和鍵盤」,也許我不需要使用本地鉤子,如果我嘗試從全局鉤子獲取鼠標位置並通過ThreadID或HandleID篩選它,這可能嗎? – Septimus
是的,您需要GetForegroundWindow()來知道哪個窗口將獲得鼠標/鍵盤消息。 GetWindowProcessThreadId()告訴你哪個進程擁有該窗口。無論您的用戶的反惡意軟件會喜歡這樣的鍵盤記錄是次要問題。 –