在PreviewKeyDown将接收到的钥匙串(Convert received keys in P

2019-08-17 01:26发布

我使用的是窗口PreviewKeyDown事件接收来自条形码扫描仪所有的按键。 该KeyEventArgs是一个枚举,不会给我的实际字符串。 我不想使用的TextInput为一些键可以通过控制自身得到处理,不能泡到TextInput事件。

我正在寻找一种方式向我在PreviewKeyDown得到实际的字符串键转换。 我看着输入管理,等的TextCompositionManager但我没有找到一个方式,我给密钥列表,它回来了一个字符串。 的TextCompositionManager什么必须将这些要点一个字符串,它是什么,是在现有的TextInput。

Answer 1:

下面是我使用的事件。 该keydown得到键和PreviewTextInput得到的实际文本。 因此,介于两者之间的键越来越转换为文本。

 public Window1()
            {
                InitializeComponent();
                TextCompositionManager.AddPreviewTextInputStartHandler(this, new TextCompositionEventHandler(Window_PreviewTextInput));
                this.AddHandler(Window.KeyDownEvent, new System.Windows.Input.KeyEventHandler(Window_KeyDown), true);
            }

    private void Window_PreviewTextInput(object sender, TextCompositionEventArgs e)
            {
            }

    private void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
            {
            }


Answer 2:

键 - >文本转换为复杂得多比你想象的,其实是没有办法单次击键映射到单个字符,因为某些语言中,有些情况下,你需要多按键组成一个字符。

既然你有兴趣在输入从条形码扫描器(我认为只会产生什么样的窗口可以处理一小部分,可能只有ASCII甚至更少),您可以建立转换表自己和硬编码到你的程序 - 这是多少然后,比较容易处理的Windows文本处理确实(为了好玩,查找“死键”)的所有疯狂。



Answer 3:

好吧,从偷来的这个帖子 。

[DllImport("user32.dll")]
static extern short VkKeyScan(char ch);

static public Key ResolveKey(char charToResolve)
{    
    return KeyInterop.KeyFromVirtualKey(VkKeyScan(charToResolve));
}


文章来源: Convert received keys in PreviewKeyDown to a string