2011-06-20 67 views
1

我想創建一個沒有DLL的全局WH_GETMESSAGE鉤子,但是我無法成功。 我的操作系統是Win7的32位,這是我的一些代碼:如何創建一個沒有DLL的全局WH_GETMESSAGE鉤子

SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,GetModuleHandle(NULL),0); 

請幫助我,如果你有任何的時間。 :)

回答

2

As documented

HMOD [IN]

類型:HINSTANCE

句柄含掛鉤過程的DLL由lpfn參數指向。如果dwThreadId參數指定由當前進程創建的線程,並且鉤子過程位於與當前進程關聯的代碼中,則hMod參數必須設置爲NULL。

hMod必須是一個句柄DLL。不是EXE。這是因爲DLL將被加載到所有正在運行的進程中,並且其代碼將直接從這些進程中運行。

+0

謝謝您的回答的調用線程的消息循環,但對我來說好像沒用。 – italkboy

+0

我想有其他辦法可以做。謝謝〜。 – italkboy

+0

@italkboy,你應該寫出你的替代方法作爲答案,以便其他人也可以得到同樣的幫助... – bdonlan

0

很明顯,最後一個參數不應該是'0',它應該是您要調用該函數的線程的線程ID。您不能在null中傳遞最後一個和倒數第二個參數。使用GetThreadId()來獲取當前線程的ID,這很可能是你想要做的。

上一張海報的答案對您非常有用,如果您已經閱讀過,您會親眼看到上述內容。

+0

非常感謝,我找到了一個妥協方案,我會再試一次。:) – italkboy

1

您需要調用SetWindowsHookEx

while(GetMessage(&msg, NULL, 0, 0)) 
{ 
    TranslateMessage(&msg); 
    DispatchMessage(&msg); 
}