在WPF应用程序中捕获NULL键

时间:2013-12-03 11:37:08

标签: c# wpf

我正在使用条形码扫描仪,我们正在寻找一种方法来确定输入是来自键盘还是扫描仪。输入将用于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();
        }
    }

然而,这似乎没有获得第一个NULL字符,而是移动到下一个char,即数据的长度。

我还使用控制台应用程序进行了测试,并且刚刚完成了Console.ReadKey()。这首先返回null char,因为我知道扫描器肯定会发送正确的数据。

WPF中是否有任何方法可以获取所有读取的数据?

修改

我尝试使用TextCompositionEventHandler,但无济于事,我仍然只能看到可打印的字符。

2 个答案:

答案 0 :(得分:2)

KeyEventArgs.Key 不是一个字符,它是一个enum,表示按下了哪个键。没有NULL键盘键,因此没有必要尝试检查ASCII NULL(0x00)字符。此外,大多数不可打印的字符没有等效键,并且要求用户使用键的组合来键入它们。

如果您想使用前缀检测扫描仪代码,请尝试取消UIElement.TextInput TextBoxBase.TextChanged事件。

更好的想法可能是使用扫描仪的SDK(如果可用)将数据直接发送到您的应用程序。更昂贵的型号通常有一个SDK直接与应用程序通信,而不是模拟键盘。

答案 1 :(得分:0)

我可能错了,但我不认为NULL和\ 0在这个上下文中是相同的。看看这篇文章。他们建议使用TextInput而不是KeyUp。

How to get KeyChar in WPF application