protected override void WndProc(ref Message m) { if (_GlobalHooks != null) _GlobalHooks.ProcessWindowMessage(ref m); base.WndProc (ref m); }
接下来,您需要创建一些事件处理程序为任何你想要的挂钩。例如,收到通知每一个顶层窗口创建时,创建一个事件处理程序的GlobalHooks.Shell.WindowCreated,如下:
_GlobalHooks.Shell.WindowCreated +=
new GlobalHooks.WindowEventHandler(Shell_WindowCreated);
开始挂钩的事件,你必须在适当的类调用启动功能。
_GlobalHooks.Shell.Start();
同样重要的是,当你想停止挂钩的事件,必须调用相应的停止功能。请确保您停止您的应用程序终止之前挂钩事件。
_GlobalHooks.Shell.Stop();
这是所有需要!最后的思考
尽管潜在的陷阱,这里描述的技术已为我工作得很好,当我需要挂钩的全球活动。不过,如果你要创建一个应用程序,只需要挂钩低级别的鼠标或键盘事件,迈克尔肯尼迪的代码可能更适合您。此外,CallWndProc和getmsg钩都相当低效的,因为他们基本上是重复的(创建副本发送到挂钩的应用程序)由Windows生成的每个消息。如果您的应用程序只需要勾一个或两个消息,您可以轻松地重写DLL只张贴通知消息钩子程序接收挂钩的应用程序时的一个或两个消息,你要找的。| ChrisP1118

我是一名编程爱好者,
谢谢orcode.com为我们提供一个学习和分享的平台。
喜克里斯,你的代码是非常有用的,因为它的感谢!我有两个问题,也许你知道答案:1。桌面窗口的属性存储在目标窗口处理的原因是什么?说实话,我试图elimitate这种技术与单一的HWND变量,但我不能够。{S2}2。为什么我不能捕捉内置在所有的窗口(计算器,回收站)的消息?正如我所看到的,以及其他问题,但没有答案。的问候,索博尔奇
Dinis克鲁兹在同时,我发现我的第一quetion的答案是:我们必须使用共享内存空间来存储HWND的变量。codeprelang="cs"spanclass="code-preprocessor"#pragma/spandata_seg(spanclass="code-string""/spanspanclass="code-string"SHARED"/span)HWNDdestination=NULL;spanclass="code-comment"///spanspanclass="code-comment"Theinitializationisamustinthesharedmemoryspace!/spanspanclass="code-preprocessor"#pragma/spandata_seg()spanclass="code-preprocessor"#pragma/spancomment(linker,spanclass="code-string""/spanspanclass="code-string"/section:SHARED,RWS"/span)/pre/code有了这项技术,我是能够消除使用的destop窗口,而且-用设计时初始化阵列-我能准备的处理程序的数组,可用于预定义的目的地号码。imgsrc=http://.orcode.com/upimg/2011_12_14_11_32_26_2.gif
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-29963-4.html
sorry
那就是死不足惜了