【问题标题】:logging keyboard activity from a background process从后台进程记录键盘活动
【发布时间】:2013-04-04 21:57:48
【问题描述】:

我有一个托盘应用程序(用 C# 编写),它控制(启动/停止)我在桌面上的活动的监控。监控的活动被记录到日志文件中。每当访问文件时,Atm 都会根据对当前文件长度的更改记录有关编辑的信息。我想使用一种更简洁的方法,基于在窗口处于焦点时是否记录了击键。 提前致谢。

【问题讨论】:

    标签: c# logging keyboard


    【解决方案1】:

    仅在 C# 中是不可能的,您需要一个非托管 dll 来安装 Windows 挂钩 (SetWindowsHookEx) 并将该 dll 注入目标进程。

    【讨论】:

    • 我发现了以下thread,它表示可以使用全局挂钩。这个article 也指全局挂钩,但是安装和卸载挂钩是通过表单执行的。就我而言,我没有表单,并且希望捕获每个聚焦窗口上的键盘活动。
    • 使用全局钩子绝对可以。这里唯一的问题是全局钩子的注入代码应该驻留在一个单独的非托管 dll 中(与本地钩子不同,它可能完全在托管代码中完成,但只会拦截发送到安装了钩子的应用程序的击键)。无论您使用可见形式还是不可见形式都无关紧要 - 基本的进程间通信所需的形式。
    【解决方案2】:

    我认为this article 中描述了您要查找的内容。当您的应用程序启动/结束时代码安装和卸载钩子,并在每次按下键时调用Console.WriteLine((Keys)vkCode)。您可以在代码中更改该点; vkCode 包含按下键的虚拟键代码。您可以将其转换为System.Windows.Forms.Keys,然后使用System.Windows.Forms.KeysConverter

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多