C#中windows钩子的替代品?
问题描述:
我想知道任何/所有程序何时被主动使用。C#中windows钩子的替代品?
要通过Windows钩子来做到这一点,我会使用一个非托管的C++ dll与C#交谈。有一篇文章解释了这个过程here。
我想知道,但如果有任何替代使用系统钩子虽然。
答
C++不需要设置全局窗口钩子,你只需要调用所需winapis。
假设您只对具有与进程关联的窗口的应用程序感兴趣,全局钩子将比轮询更高效且更可靠。例如,CMD提示可能不会生成GWH事件。
最终最可靠和最有效的机制是全系统注入,一个好的开始将是Microsoft Research的Detours库。 Jefffrey Richter的经典“高级Windows编程”一书详细介绍了这一点,它提供了3种注入机制(包括如何设置全系统挂钩)。同样,这不需要C++,并且当应用程序正在使用时,不一定会告诉你。最终,全球窗口挂钩将最有意义。
没有那么做,最终你将不得不与非托管代码交互的任何内置的.NET库。你可以做的最好的事情是使用隐藏这些细节的库。 – BobbyShaftoe 2009-10-19 17:56:39