【问题标题】:Capture key events from a Windows Service in C#从 C# 中的 Windows 服务捕获关键事件
【发布时间】:2011-05-14 03:43:45
【问题描述】:

我必须用 C# 编写一个应用程序来监听任何被按下的键。实际上,我有一个条形码扫描仪发送“按键”事件,我需要听它......它从那里做什么超出了我的问题范围。

我的安全要求是不允许以任何形式或形式登录机器,并且这必须作为 Windows 服务运行。用户将启动机器并离开(即没有桌面会话)。

我假设我将不得不为此不受管理。

考虑到安全要求,这是否可能?如果是这样,任何关于从哪里开始的指针都会很棒。

提前致谢, 周杰伦

【问题讨论】:

  • 这是一个非首发。服务桌面不是交互式桌面,并且挂钩是每个桌面的。您应该创建一个运行监听程序的自动登录帐户

标签: c# windows service keypress


【解决方案1】:

【讨论】:

    【解决方案2】:

    您必须在学习 pInvoke 的同时学习如何查找在较低级别的操作系统中产生的正确事件。通过使用 pInvoke 调用 user32.dll,您的托管代码可以通过挂钩过滤这些事件。

    http://pinvoke.net/default.aspx/user32.SetWindowsHookEx

    【讨论】:

      【解决方案3】:

      如果您需要查看所有应用程序的键盘按下情况,系统范围的 Hooks 将是正常使用的方法,但问题是 Vista 及更高版本中的安全性更改使 Hooks 的用处不大。一个进程无法以更高的完整性级别挂钩另一个进程,因此无法保证您会看到所有事件。

      但是,如果您只需要查看特定应用程序的事件(读取条形码的应用程序),那么只要您能够识别该进程,那么特定于线程的挂钩就足够了,并且不会出现完整性问题。

      【讨论】:

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