在mydll中我啟動一個鉤子,如下。
SetWindowsHookEx(WH_GETMESSAGE, MYHOOKPROC, hin, threadId);
然后再寫一個控制臺程式,去獲取要鉤的視窗行程threadid 傳入,鉤子能創建成功但是無法相應訊息。如果 threadid傳入為0 卻可以回應。
流程大概就這樣:主執行緒呼叫如下:
hwnd = FindWindow(TEXT("Progman"), NULL);
threadId = GetWindowThreadProcessId(hwnd, &pid);; // 我獲取這個行程的子執行緒或者子執行緒的子執行緒都不行
HINSTANCE hi = LoadLibrary(TEXT("../../HookDll/Debug/HookDll.dll"));
LOADHOOK lh = (LOADHOOK)GetProcAddress(hi, "LOADHOOK");
lh(threadId);;
在dll中的LOODHOOK方法直接 SetWindowsHookEx(WH_GETMESSAGE, MYHOOKPROC, hin, threadId);
LRESULT CALLBACK MYHOOKPROC(int code, WPARAM w, LPARAM l) {
MessageBox(........) //如果threadid傳入為0即可呼叫,但是傳入執行緒id就呼叫不了,新手求指點。
}
是這樣的,我希望攔截打開應用程式的訊息,然后給彈窗是否做選擇,我試過很多網上的辦法 但是現在都卡在這地方。真的不知道是哪里錯了。
uj5u.com熱心網友回復:
我除錯進去的話每個地方都可以正常獲取,鉤子也能開啟 SetWindowsHookEx 也有回傳,但就是傳入threadid 回呼方法完全不呼叫。uj5u.com熱心網友回復:
參考WinAPIOverride http://jacquelin.potier.free.fr/winapioverride32/
源代碼相關片斷。
uj5u.com熱心網友回復:
SetWindowsHookEx 是否成功?uj5u.com熱心網友回復:
成功的,斷點的時候看到是有值非空的,getlasterror 獲取的回傳值也是0.
uj5u.com熱心網友回復:
那可以試試 在 GetMsgProc 中比較視窗句柄, 不符合的直接Passuj5u.com熱心網友回復:
找到了兩個入口點
在下剛接觸win api 以前也沒用c系列的語言做過專案, 怕有漏掉的內容,所以把入口點下面所有 呼叫都查了個遍-、-。沒找到想要的部分,不過還是有識訓,看到了他 呼叫setwindowsex注冊了一個鍵盤監聽-、-和我注冊的方式是一的
uj5u.com熱心網友回復:
不清楚你所說的 打開應用程式的訊息指的是什么?轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/93948.html
標籤:硬件/系統
