系统范围挂钩从.NET使用非托pipeDLL

过去,我已经使用了以下CodeProject文章中提供的代码,但是它似乎只部分适用于Vista / 7(我猜是因为UAC)。 它适用于当前的线程,但它不会提取系统范围内的活动。 我已经尝试在清单中添加requireAdministrator并签署非托pipe和托pipe程序集,这似乎没有帮助。

使用窗口消息在C#中实现全局系统钩子

我的主要目标是使用SetWindowsHookEx捕获非托pipe程序集中的HSHELL_WINDOWCREATED和HSHELL_WINDOWDESTROYED消息,并通知C#应用程序,以便它可以实时使用这些信息。 基本上只需知道系统中何时创build或销毁窗口。

我还发现了一个纯C / C ++的示例应用程序,在Vista / 7中工作得很好,但是我真的不想用C / C ++编写整个应用程序。

系统宽钩示例工作

任何人都知道如何修复第一个CodeProject文章中的代码,以便它可以在Vista / 7上运行? 或者有没有其他的方法可以做到这一点,而不用在C#中创build定时器和类似的黑客?

谢谢,Marc

看看我的程序: http : //wpfklip.codeplex.com 。 我已经实现了系统范围的shell钩子,所以程序能够捕获窗口的创建,激活等等。 它是用C#编写的

这里有一个重点:

1)Lusid正在寻找壳钩。 这些在.NET中不起作用,因为Lusid链接到的第一篇文章中解释了“DLL注入”的原因。

2)欺骗者写了一个键盘钩子。 这些在C#中工作得很好(因为它们从窗口的某个部分挂钩,而不是特定的应用程序,它可以应付注入.NET)。

一个