在通用Windows应用程序(IoT)中访问原始键盘输入

时间:2016-02-16 02:06:59

标签: win-universal-app keyboard-events hid windows-10-universal windows-10-iot-core

我正在尝试构建一个应用程序,该应用程序将接受来自模拟键盘的遥控器的键盘输入。我需要从遥控器捕获所有键,包括音量增大/减小(它模拟多媒体键盘,fwiw)。我无法弄清楚如何在西澳大利亚州做到这一点。 我尝试过Windows.UI.Input.KeyboardDeliveryInterceptor和Windows.UI.Core.CoreWindow.GetForCurrentThread()。KeyDown,它捕获一些输入但不是所有键(它不捕获特殊键)。

我不打算在App Store中包含此应用,因此我可以分配我需要的任何功能,包括限制。我试图直接访问HID设备,但事实证明键盘被阻止()。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

简短回答

关键部分是在后面的代码中启用拦截器:

deliveryInterceptor.IsInterceptionEnabledWhenInForeground = true; 

并声明" inputForegroundObservation"应用清单中的功能:

<rescap:Capability Name="inputForegroundObservation" />

答案很长

将此添加到Package.appxmanifest:

命名空间对受限功能的引用:

xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"

为Capabilities标记添加为子项:

<rescap:Capability Name="inputForegroundObservation" />

然后在你的代码中添加它(比如MainPage.xaml.cs):

    public MainPage()
    {
        this.InitializeComponent();
        var _deliveryInterceptor = KeyboardDeliveryInterceptor.GetForCurrentView();
        UpdateTextBox($"Hash interceptor: {_deliveryInterceptor.GetHashCode()} \n");
        _deliveryInterceptor.IsInterceptionEnabledWhenInForeground = true;
        _deliveryInterceptor.KeyUp += _deliveryInterceptor_KeyEventReceived;
        _deliveryInterceptor.KeyDown += _deliveryInterceptor_KeyEventReceived;
    }

    private void _deliveryInterceptor_KeyEventReceived(KeyboardDeliveryInterceptor sender, Windows.UI.Core.KeyEventArgs 
    {
               //Process KeyUp/KeyDown
    }