我过去成功地使用了以下 CodeProject 文章中提供的代码,但它似乎只能在 Vista/7 上部分工作(我猜是因为 UAC)。它适用于当前线程,但不会获取系统范围的活动。我尝试在清单中添加 requireAdministrator 并对非托管和托管程序集进行签名,但这似乎没有帮助。
我的主要目标是使用 SetWindowsHookEx 捕获非托管程序集中的 HSHELL_WINDOWCREATED 和 HSHELL_WINDOWDESTROYED 消息,并通知 C# 应用程序以便它可以实时使用这些信息。它基本上只需要知道系统中何时创建或销毁窗口。
我还发现了一个纯 C/C++ 示例应用程序,它在 Vista/7 中运行良好,但我真的不想用 C/C++ 编写整个应用程序,因为我更喜欢 C#。
任何人都知道如何修复第一篇 CodeProject 文章中的代码,以便它也可以在 Vista/7 上运行?或者有任何其他方法可以做到这一点,而无需在 C# 中创建计时器和类似的技巧?
谢谢,马克