2009-11-22 32 views
2

我试图使用全局钩子壳监听创建和销毁活动窗口,但它好像我的程序只注册本地线程的破坏事件。根本没有创作活动,绝对不是我认为他们应该成为的全球事件。网壳钩只有注册当地的活动

我已经花了最后一天淘到谷歌和codeguru,codeproject和msdn,但它看起来像我这样做是正确的,但我显然不是。任何人都可以帮助我指出正确的方向吗?

#pragma data_seg(".SHARE") 
HWND hWndServer = NULL; 
HHOOK g_shell_hook = NULL; 
#pragma data_seg() 
#pragma comment(linker, "/section:.SHARE,RWS") 

TASKBAR_API int StartShellHook(HWND hWnd) 
{ 
    g_shell_hook = SetWindowsHookEx(WH_SHELL, ShellProc, g_dll_module_handle, 0); 
    if(g_shell_hook) 
     hWndServer = hWnd; 
    return (g_shell_hook != NULL); 
} 

这里是我的钩入壳,这一切似乎是正确的我的代码,但同样,它不给适当的输出。眼下ShellProc功能刚刚成立做琐碎的变量递增的窗口创建和销毁的消息,只是一条线,把一个破发点,但该程序只打本地窗口销毁消息的休息。再次,任何帮助将是太棒了,非常感谢你提前。

回答

0

的一个原因,这可能发生,是你已经编制了32位的DLL和你想在64位操作系统上运行。一般来说,你想通过安装这个钩子来完成什么?钩子很难得到正确的使用,如果你在处理者中花费太长时间,钩子可能会被取消注册。

+0

我编译一个32位的DLL,但我也是一个32位的操作系统,所以这不应该成为问题。我想写一个对的RocketDock,其作用类似于Windows任务栏,它显示了您运行的是什么程序添加,就算的RocketDock还没有它的快捷方式程序,即使程序未最小化。如果有更好的方法来实现这个目标,我就会全神贯注,但是在互联网上似乎没有什么关于这种东西的信息。 – etna 2009-11-22 18:45:38

0

您可以尝试使用一个窗口壳钩(如果你有一个HWND处理某处你的应用程序):RegisterShellHookWindow。这样您就可以通过窗口的消息泵接收关于创建和销毁窗口的全局shell通知。