2009-07-14 107 views
2

我想創建一個Windows鉤子,專門捕獲HSHELL_WINDOWCREATED消息。
但是,我的鉤子proc永遠不會被調用。問題與WH_SHELL

我的DLL具有安裝鉤子的函數:

hHook = SetWindowsHookEx(WH_SHELL, (HOOKPROC)CreateWindowHook, hinst, 0); 

HINST用的DllMain(填充),在DLL_PROCESS_ATTACH消息。
CreateWindowHook被定義爲:

LRESULT CALLBACK CreateWindowHook(int code, WPARAM wParam, LPARAM lParam) { 
    if (code == HSHELL_WINDOWCREATED) { 
     // snip 
    } 
    return CallNextHookEx(0, code, wParam, lParam); 
} 

我希望每當創建一個新的頂級窗口被稱爲PROC,但它永遠不會被調用。我錯過了什麼? 謝謝。

的更多信息:
根據這篇文章 - http://msdn.microsoft.com/en-us/library/ms644959(VS.85).aspx - 想要接收WH_SHELL消息應用程序必須通過SystemParametersInfo註冊本身():

MINIMIZEDMETRICS st; 
st.cbSize = sizeof(MINIMIZEDMETRICS); 
st.iArrange = ARW_HIDE; 
BOOL ret; 

ret = SystemParametersInfo(
    SPI_SETMINIMIZEDMETRICS, 
    sizeof(MINIMIZEDMETRICS), 
    &st, 
    0); 

那是在調用的dll做,或者加載包含掛鉤的dll的應用程序,或者它沒有關係?

回答

0

你在Vista上運行嗎?如果是這樣,你很可能會遇到UAC問題。通過指定0作爲您要求全局掛鉤的最後一個參數。這隻能做一個管理員。

嘗試以管理員身份重新運行,看看是否可以解決您的問題。

+0

感謝您的回覆。 WinXP,我的帳戶是一個管理員帳戶。 – Number8 2009-07-14 18:56:16

0

您的hhook是否已初始化並處於共享區域?詳情請參閱here