C# WPF应用程序中的陷阱空密钥
我正在使用条形码扫描仪,我们正在寻找一种方法来确定输入是来自键盘还是扫描仪。输入将在WPF POS应用程序中使用。我们认为我们已经想出了一个很好的方法,使用扫描器的能力,以自定义字符作为读取的前缀。理想情况下,第一个字符是不可打印的,因此我们选择NULL或“\0”。我们使用以下代码注册事件处理程序C# WPF应用程序中的陷阱空密钥,c#,wpf,C#,Wpf,我正在使用条形码扫描仪,我们正在寻找一种方法来确定输入是来自键盘还是扫描仪。输入将在WPF POS应用程序中使用。我们认为我们已经想出了一个很好的方法,使用扫描器的能力,以自定义字符作为读取的前缀。理想情况下,第一个字符是不可打印的,因此我们选择NULL或“\0”。我们使用以下代码注册事件处理程序 EventManager.RegisterClassHandler(typeof(System.Windows.Controls.Control), System.Windows.Controls.C
EventManager.RegisterClassHandler(typeof(System.Windows.Controls.Control), System.Windows.Controls.Control.KeyUpEvent, new RoutedEventHandler(KeyUpEvent));
internal static void KeyUpEvent (object sender, RoutedEventArgs e)
{
KeyEventArgs keyEvent = e as KeyEventArgs;
if (keyEvent != null)
{
keyEvent.Key.ToString();
}
}
然而,这似乎不会得到第一个空字符,而是移动到下一个字符,即数据的长度
我还测试了一个控制台应用程序,刚刚完成了一个console.ReadKey()。这将返回空字符作为第一个读取的内容,因此我知道扫描仪确实发送了正确的数据
那么,在WPF中是否有任何方法可以获取所有读取的数据
编辑:
我尝试使用TextCompositionEventHandler,但没有效果,我仍然只能获得可打印的字符。我可能错了,但我不认为NULL和\0在这个上下文中是相同的。看看这篇文章。他们建议使用文本输入而不是键盘输入 不是字符,而是指示按下了哪个键。没有
NULL
键盘键,因此没有必要尝试检查ASCII NULL(0x00)字符。此外,大多数不可打印字符没有等效键,需要用户使用组合键来键入它们
如果要使用前缀检测扫描程序代码,请尝试检查事件
更好的方法可能是使用扫描仪的SDK(如果可用)将数据直接发送到应用程序。更昂贵的型号通常有SDK直接与应用程序通信,而不是模拟键盘。不幸的是,扫描仪的选择并不取决于我,除手册外,支持非常有限,因此没有SDK:(第二个问题是UIElement.TextInput是否可以工作,无论哪个控件有焦点?