2011-04-06 161 views
2

我需要监听特定的键盘事件键盘设备&了解在(C#)WPF应用程序中按哪个键。理想情况下,这不应该依赖于窗口,只要应用程序具有焦点,就可以工作。键盘事件

不幸的是我不能想到/找到任何方式来做到这一点。

有什么想法?

DR

编辑:我一直在寻找进入OpenTK.Input库,它有一个漂亮的界面按键...有谁知道如何获得KeyboardDevice而无需创建一个GameWindow

信息:顺便说一下,这是一个模拟键盘的条码扫描器...谁的聪明想法是,呃?

+3

我不相信这是可能的。 Windows将接受并处理来自任何键盘的关键事件。 Windows在键盘缓冲区方面就像一个盲人,任何设备(例如游戏手柄)都可以将密钥放入缓冲区。 – 2011-04-06 11:54:15

+0

@Rhhound:我必须同意 - 不管写驱动程序过滤器还是其他什么东西。 – 2011-04-06 11:59:40

+0

看看我刚​​刚提出的键盘问题的答案。它可以帮助你找到一个适合你的要求的dll API http://stackoverflow.com/questions/172353/how-to-push-a-key-and-release-it-using-c – Larry 2011-04-06 12:00:05

回答

0

在msdn上管理找到这个tutorial。以及一个Sample Scanner对象,它与POS.Net SDK

我还没有真正有时间来分辨它的工作方式还没有给出一个适当的概述,但它似乎我应该能够编写一个自定义服务对象抽象适用于任何“键盘楔”HID设备。

0

看看下面的2篇文章。

Using global keyboard hook (WH_KEYBOARD_LL) in WPF/C#

https://gist.github.com/471698

都应该正是你想要的......

+0

你将如何去做这个键盘特定的,我已经尝试使它打印内部值,但无法找到任何设备特定的类。据我所知,所使用的WinAPI函数都不能限制为单个设备... – 2011-04-06 13:39:38

+0

@Dead。Rabit,这是我的坏,我没有专注于具体的部分(你会认为,因为它是粗体的,我会注意到它:-() – 2011-04-06 14:40:46

1

实际上我工作所做的正是这一个项目。检查出Kaptivate。它安装一个全局键盘钩子,并将原始输入api连接在一起(然后使用魔术),然后调用一个回调函数,以便你可以决定(1)这是我所使用的设备?(2)我应该允许其他应用程序来查看它,或者只保留我自己的按键。目前它只是C++,但最终的目标之一是拥有C#包装器。

对于键盘,每个生成的事件会告诉您vkey,扫描码和源设备。

+0

顺便说一下,我现在将它标记为pre-alpha。如果我是你可以继续前进,并了解它是如何工作的,也可以根据自己的需要来设置它。图书馆还有一段路要走。 – 2011-04-12 22:16:32

+0

它看起来像一个很好的项目,但我无法获取样本不幸的是,在我的机器上工作...当我玩弄Pos.Net自定义服务对象时,我会再看看一个样子[ – 2011-04-13 10:33:23

+0

]是的,样本非常有人气,其实我需要改变它。现在大多数情况下它的工作状态,但有时它并不是。秘密是有一个不同的焦点窗口(即控制台需要在后台)。再次,pre-alpha – 2011-04-13 14:02:04