2016-04-03 27 views
0

我是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

+0

這種類型的鉤子需要一個DLL,它可以被注入到SetWindowsHookEx()的目標進程(第三個參數)中。這樣一個DLL不能用C#編寫,你必須學習像C或C++這樣的語言,或者谷歌許多現有的網頁。我們不需要另一個,謝謝你試圖貢獻。 –

+0

謝謝,我的目標是「寫日誌關於鼠標和鍵盤」,也許我不需要使用本地鉤子,如果我嘗試從全局鉤子獲取鼠標位置並通過ThreadID或HandleID篩選它,這可能嗎? – Septimus

+0

是的,您需要GetForegroundWindow()來知道哪個窗口將獲得鼠標/鍵盤消息。 GetWindowProcessThreadId()告訴你哪個進程擁有該窗口。無論您的用戶的反惡意軟件會喜歡這樣的鍵盤記錄是次要問題。 –

回答

0

嗯,我不知道這是不是你要找的...

答案

但是,在你的代碼中,而不是setWindowsHookEx(),你寫了swtWindowsHookEx()。

也許如果你糾正它,你會得到你想要的。

歡呼聲和快樂編程!

+0

謝謝,這是我的錯誤:D – Septimus

0

感謝Hans Passant,我使用Global hooks來獲取所有信息,然後GetForegroundWindow()檢查我是否有過列表句柄。這樣,我不需要使用DLL,但我仍然可以獲取鼠標/鍵盤消息來編寫密鑰日誌。