SetWindowsHookEx和SetWinHookEventEx的区别

7

SetWindowsHookEx和SetWinEventHook之间的主要区别(如何工作/依赖关系/目的/最低要求)是什么?

我对使用C#/.Net从Windows服务拦截与运行窗口应用程序相关的事件很感兴趣。


请下投票者解释一下。这是一个很好的问题。 - Tyler Liu
2个回答

9
SetWindowsHookEx设置低级别的钩子,可以拦截和重写多个系统范围内的事件和消息(例如捕获和重写键盘输入)。 SetWinEventHook允许您监听窗口事件而无需具有窗口。它更高级且不会对系统产生太多干扰。
这两者都不需要用于从服务中运行其他应用程序。请查看内置于.Net的System.Diagnostics.Process或NuGet上的RunProcess

3
如果我理解你的意思正确,你希望使用你创建的服务拦截操作系统和运行中的 Windows 应用程序之间流动的消息。如果是这样,你最好选择 SetWindowsHookEx,它将创建一个系统级钩子,你需要过滤并传递给其他应用程序。请注意,这还需要你构建 c++ .dll 文件,从中调用 SetWindowsHookEx 函数。在编码时要非常小心,因为错误可能会锁定整个系统,你需要重新启动才能使一切恢复正常。

1
另一个限制是自从Vista以来,无法像这里所提到的那样直接从Windows服务中设置全局钩子。解决方案是代替它生成一个子进程来完成。 - JohnTube

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接