如何在UWP中使用代码注入多个键的键盘输入

时间:2019-06-18 14:10:00

标签: c# xaml uwp

尝试模拟Tab键和Shift + Tab键(具有反向代码)的功能,这些键具有背后的代码功能,因此可以与“按钮”或本例中的键盘上的其他键一起使用。

在模拟制表键工作之后,我不确定如何同时模拟两个按键的按下来模拟Shift + Tab

        private void Tab(string s)
        {
            InputInjector inputInjector = InputInjector.TryCreate();
            var info = new InjectedInputKeyboardInfo();
            if (s == "Right")
            {
                info.VirtualKey = (ushort)(VirtualKey.Tab);
            }
            else if (s == "Left")
            {
                //This doesn't actually exist, but How would I do this?
                info.VirtualKey = (ushort)(VirtualKey.ShiftTab);
            }

            inputInjector.InjectKeyboardInput(new[] { info });
        }

        private void Grid_KeyDown(object sender, KeyRoutedEventArgs e)
        {
            switch (e.Key)
            {
                case VirtualKey.Number1:
                    Tab("Left");
                    break;
                case VirtualKey.Q:
                    Tab("Right");
                    break;
            }
        }

到目前为止,当按Q键时,Tab可以正常工作,我只需要了解在按Number1键时如何执行Shift + Tab。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

它们被称为Modifiers

VirtualKey + VirtualKeyModifiers

https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.input.keyboardaccelerator.Modifiers https://docs.microsoft.com/en-us/uwp/api/windows.system.virtualkeymodifiers

如果您想使用InputInjector,请查看ScanCode,因为它们代表了键盘上各个键的唯一标识-现在它们对于所有键盘可能都不相同,但是Shift键应该是相同。我附上了常见的ScanCodes列表-阅读ScanCode可以看到它为您提供了什么价值。 InputInjector接受一个数组,因此仅路径您要注入的两个代码或找到组合的ScanCode

https://docs.microsoft.com/en-us/uwp/api/windows.ui.input.preview.injection.injectedinputkeyboardinfo https://www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html

尝试将Shift-Tab的ScanCode设置为0F

答案 1 :(得分:0)

回答我自己的问题。在遇到类似问题的另一个用户的帮助后,模拟多按钮按下的最简单方法如下:

            InputInjector inputInjector = InputInjector.TryCreate();
            var shift = new InjectedInputKeyboardInfo();
            shift.VirtualKey = (ushort)(VirtualKey.Shift);
            shift.KeyOptions = InjectedInputKeyOptions.None;


            var tab = new InjectedInputKeyboardInfo();
            tab.VirtualKey = (ushort)(VirtualKey.Tab);
            tab.KeyOptions = InjectedInputKeyOptions.None;
            inputInjector.InjectKeyboardInput(new[] { shift, tab });

在此示例中,我使用SHIFT + Tab。