以下是dll中的代碼,就是想屏蔽按鍵訊息,可是用自己寫的exe注入成功后卻無法實作hook,把SetWindowsHookEx最后一個引數改為0成為全域鉤子也不行,和沒注入一樣。讓dll中彈出messagebox都是可以的,唯獨不能掛鉤。想問下為什么,應該是原理的問題
LRESULT CALLBACK KeyBordProc(int nCode, WPARAM wParam, LPARAM lParam)
{
return 1;
}
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
SetWindowsHookEx(WH_KEYBOARD, KeyBordProc, hModule, GetCurrentProcessId());
}
return TRUE;
}
uj5u.com熱心網友回復:
SetWindowsHookEx的最后一個引數應該是Thread Id吧,另外檢查一下SetWindowsHookEx的回傳值確認掛鉤成功,再然后就是在KeyBordProc中下斷點除錯一下看看能不能斷下uj5u.com熱心網友回復:
看了下回傳值是setwindowsHook回傳null了,可是不知道為什么。。。別人也是這么寫的額我這里怎么就hook不到呢uj5u.com熱心網友回復:
看了下回傳值是setwindowsHook回傳null了,可是不知道為什么。。。別人也是這么寫的額我這里怎么就hook不到呢uj5u.com熱心網友回復:
我把SetWindowsHookEx最后一個引數改為0即全域鉤子回傳值就不是空了,但是沒有鉤子效果,打字沒有屏蔽。。。uj5u.com熱心網友回復:
GetLastError 看看回傳什么錯誤uj5u.com熱心網友回復:
還有可能是被殺毒軟體/防火墻之類的給阻止了吧uj5u.com熱心網友回復:
錯誤是87,往上查應該是引數有問題,你能看出啥問題嗎?我看都是這么寫的啊,難道是在dll中呼叫鉤子就會出問題?uj5u.com熱心網友回復:
GetCurrentProcessId()或得的是行程ID,SetWindowsHookEx的最后一個引數要求的是執行緒ID,所以報引數錯誤了。至于全域鉤子無效的問題,你可以在KeyBordProc寫個Messagebox()看看會不會彈出Messagebox,以證明掛鉤后KeyBordProc是否真的被呼叫了
uj5u.com熱心網友回復:
關于全域鉤子我想問一下,當我最后一個引數設為0時,函式回傳非空值,說明成功了吧。但是我的keyboardProc卻沒有執行,實在想不通。。。請問你還有什么看法嗎?uj5u.com熱心網友回復:
在http://www.codeproject.com搜“hook”uj5u.com熱心網友回復:
趙老師,看了您很多帖子都是回的這一句,我很感謝,對此我想對你說一句:我去年買了個登山包uj5u.com熱心網友回復:
不明覺厲
uj5u.com熱心網友回復:
我目前也遇到了這個問題 LZ解決了嗎uj5u.com熱心網友回復:
掛鉤最后一個引數用GetWindowThreadProcessIduj5u.com熱心網友回復:
如果是當前執行緒掛鉤第三個引數要為NULLuj5u.com熱心網友回復:
參考WinAPIOverride源代碼中相關片斷。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/129728.html
標籤:進程/線程/DLL
上一篇:還是加載OCX控制元件的問題
