【问题标题】:SetWindowsHookEx vs. SetWinHookEventExSetWindowsHookEx 与 SetWinHookEventEx
【发布时间】:2014-02-25 20:35:26
【问题描述】:

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

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

【问题讨论】:

  • 反对者请解释。这是个好问题。

标签: c# .net windows api


【解决方案1】:

SetWindowsHookEx 设置低级挂钩,可以拦截和重写多个系统范围的事件和消息(如捕获和重写键盘输入)。

SetWinEventHook 允许您在没有窗口的情况下监听 Window 事件。它的级别更高,对系统的侵入性更小。

从服务中运行其他应用程序都不需要这些。在 NuGet 上查看 System.Diagnostics.Process(内置于 .Net)或 RunProcess

【讨论】:

    【解决方案2】:

    如果我对您的理解正确,您想使用您提供的服务 创建用于拦截在操作系统和操作系统之间流动的消息 运行 Windows 应用程序。

    如果是这种情况,您的最佳选择是SetWindowsHookEx,这将创建一个系统级挂钩,您必须将其过滤传递给其他应用程序。您应该注意,这还需要您构建 c++ .dll 文件,您将从该文件中调用 SetWindowsHookEx 函数。 编码时要非常小心,因为错误可能会锁定整个系统,您需要重新启动才能恢复正常。

    【讨论】:

    • 另一个限制是,从 Vista 开始,无法像 here 中提到的那样直接从 Windows 服务设置全局挂钩,解决方案是生成一个子进程来代替。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多