2009-07-14 65 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