0

我过去成功地使用了以下 CodeProject 文章中提供的代码,但它似乎只能在 Vista/7 上部分工作(我猜是因为 UAC)。它适用于当前线程,但不会获取系统范围的活动。我尝试在清单中添加 requireAdministrator 并对非托管和托管程序集进行签名,但这似乎没有帮助。

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

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

我还发现了一个纯 C/C++ 示例应用程序,它在 Vista/7 中运行良好,但我真的不想用 C/C++ 编写整个应用程序,因为我更喜欢 C#。

有效的系统范围挂钩示例

任何人都知道如何修复第一篇 CodeProject 文章中的代码,以便它也可以在 Vista/7 上运行?或者有任何其他方法可以做到这一点,而无需在 C# 中创建计时器和类似的技巧?

谢谢,马克

4

2 回答 2

1

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

于 2009-10-20T19:24:30.107 回答
-1

不过这里有一个关键点:

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

2) Trickster 写了一个键盘钩子。这些在 C# 中运行良好(因为它们是从窗口的某些部分而不是特定应用程序挂钩的,并且它可以处理注入 .NET)。

一种

于 2009-11-28T14:31:27.593 回答