我想創建一個沒有DLL的全局WH_GETMESSAGE鉤子,但是我無法成功。 我的操作系統是Win7的32位,這是我的一些代碼:如何創建一個沒有DLL的全局WH_GETMESSAGE鉤子
SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,GetModuleHandle(NULL),0);
請幫助我,如果你有任何的時間。 :)
我想創建一個沒有DLL的全局WH_GETMESSAGE鉤子,但是我無法成功。 我的操作系統是Win7的32位,這是我的一些代碼:如何創建一個沒有DLL的全局WH_GETMESSAGE鉤子
SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,GetModuleHandle(NULL),0);
請幫助我,如果你有任何的時間。 :)
HMOD [IN]
類型:HINSTANCE
句柄含掛鉤過程的DLL由lpfn參數指向。如果dwThreadId參數指定由當前進程創建的線程,並且鉤子過程位於與當前進程關聯的代碼中,則hMod參數必須設置爲NULL。
hMod
必須是一個句柄DLL。不是EXE。這是因爲DLL將被加載到所有正在運行的進程中,並且其代碼將直接從這些進程中運行。
很明顯,最後一個參數不應該是'0',它應該是您要調用該函數的線程的線程ID。您不能在null中傳遞最後一個和倒數第二個參數。使用GetThreadId()來獲取當前線程的ID,這很可能是你想要做的。
上一張海報的答案對您非常有用,如果您已經閱讀過,您會親眼看到上述內容。
非常感謝,我找到了一個妥協方案,我會再試一次。:) – italkboy
您需要調用SetWindowsHookEx
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
謝謝您的回答的調用線程的消息循環,但對我來說好像沒用。 – italkboy
我想有其他辦法可以做。謝謝〜。 – italkboy
@italkboy,你應該寫出你的替代方法作爲答案,以便其他人也可以得到同樣的幫助... – bdonlan