从C#中的Windows服务捕获关键事件

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

我的安全要求是不允许任何forms的任何forms的login到机器, 这必须作为一个Windows服务运行 。 用户将启动机器并走开(即没有桌面会话)。

我假设我将不得不为此进行pipe理。

鉴于安全要求,这甚至有可能? 如果是这样的话,任何从哪里开始的指针都会很棒。

谢谢,杰伊

您将不得不学习如何查找在较低级别的操作系统上生成的正确事件的组合。 通过使用pInvoke调用user32.dll,您的托管代码可以通过钩子过滤这些事件。

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

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

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