我正在尝试使用全局shell钩子来侦听窗口创build和销毁事件,但好像我的程序只注册本地线程的销毁事件。 根本没有创作活动,绝对不是我认为应该是的全球事件。
我已经花了最后一天search谷歌和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函数只是设置为在Windows上创build和销毁消息的简单variables增量,只是为了让一个断点处于打开状态,但是程序只会触发本地窗口的destroy消息。 再次,任何帮助将是太棒了,非常感谢你提前。
造成这种情况的一个原因是,你已经编译了一个32位的DLL,并且你试图在一个64位的操作系统上运行它。 一般来说,你想通过安装这个钩子来完成什么? 钩子很难得到正确的使用,如果你在处理者中花费太长时间,钩子将被取消注册。
您可以尝试使用一个窗口作为shell挂钩(如果您的应用程序中有某个HWND句柄): RegisterShellHookWindow 。 通过这种方式,您将通过窗口的消息泵接收有关创建和销毁的窗口的全局shell通知。