Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF应用程序中的陷阱空密钥_C#_Wpf - Fatal编程技术网

C# WPF应用程序中的陷阱空密钥

C# WPF应用程序中的陷阱空密钥,c#,wpf,C#,Wpf,我正在使用条形码扫描仪,我们正在寻找一种方法来确定输入是来自键盘还是扫描仪。输入将在WPF POS应用程序中使用。我们认为我们已经想出了一个很好的方法,使用扫描器的能力,以自定义字符作为读取的前缀。理想情况下,第一个字符是不可打印的,因此我们选择NULL或“\0”。我们使用以下代码注册事件处理程序 EventManager.RegisterClassHandler(typeof(System.Windows.Controls.Control), System.Windows.Controls.C

我正在使用条形码扫描仪,我们正在寻找一种方法来确定输入是来自键盘还是扫描仪。输入将在WPF POS应用程序中使用。我们认为我们已经想出了一个很好的方法,使用扫描器的能力,以自定义字符作为读取的前缀。理想情况下,第一个字符是不可打印的,因此我们选择NULL或“\0”。我们使用以下代码注册事件处理程序

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是否可以工作,无论哪个控件有焦点?