禁用与UWP应用的键盘交互

时间:2019-02-09 17:14:49

标签: c# uwp windows-10 win-universal-app windows-10-universal

我正在构建UWP应用程序,并且希望禁用键盘与应用程序的交互。这意味着按下键盘上的任何键时,我的应用程序均不应以任何方式响应。

这可以实现吗?我可以选择性地禁用与某些键(例如Tab键等)的交互。

2 个答案:

答案 0 :(得分:2)

是的,您可以使用KeyboardDeliveryInterceptor类。需要注意的几件事:

  1. 您将需要在appxmanifest文件中声明受限功能“ inputForegroundObservation”:
<Capabilities>
  <Capability Name="internetClient" />
  <rescap:Capability xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" Name="inputForegroundObservation"/>
</Capabilities>
  1. 您无法选择性地拦截按键,但是您可以响应代码中特定的拦截按键并以所需的动作进行响应(例如,按下Tab键时移动焦点):
KeyboardDeliveryInterceptor interceptor = KeyboardDeliveryInterceptor.GetForCurrentView();
interceptor.IsInterceptionEnabledWhenInForeground = true;
interceptor.KeyUp += delegate(KeyboardDeliveryInterceptor sender, KeyEventArgs args)
{
    if (args.VirtualKey == Windows.System.VirtualKey.Tab)
    {
        // perform desired tab key action
    }
};

答案 1 :(得分:0)

<Capabilities>
     <Capability Name="internetClient" />
     <rescap:Capability xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" Name="inputForegroundObservation"/>
</Capabilities>

添加权限,如Stefan上文所述。添加权限后,添加以下代码。

Dispatcher.AcceleratorKeyActivated += Dispatcher_AcceleratorKeyActivated;

private void Dispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args)
    {
        if(args.key == Windows.System.VirtualKey.Tab)
        {
           args.Handled = true;
        }
    }

上面的代码阻止Tab键执行任何操作。因此,当用户按下Tab键时,将不会执行任何操作。