在通用 Windows 应用程序中获取键盘状态
Get Keyboard state in Universal Windows Apps
我想检测 Windows 应用程序中的组合键(例如 Control-A
)。 KeyDown
事件处理程序有关于最后按下的键的信息。但是我如何才能知道是否也按下了 Control 键呢?
可以用CoreVirtualKeyStates.HasFlag(CoreVirtualKeyStates.Down)
判断是否按下了Ctrl键,像这样-
Window.Current.CoreWindow.KeyDown += (s, e) =>
{
var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control);
if (ctrl.HasFlag(CoreVirtualKeyStates.Down) && e.VirtualKey == VirtualKey.A)
{
// do your stuff
}
};
可以使用AcceleratorKeyActivated事件,无论焦点在什么地方,它都会一直捕获该事件。
public MyPage()
{
Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated += AcceleratorKeyActivated;
}
private void AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args)
{
if (args.EventType.ToString().Contains("Down"))
{
var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control);
if (ctrl.HasFlag(CoreVirtualKeyStates.Down))
{
switch (args.VirtualKey)
{
case VirtualKey.A:
Debug.WriteLine(args.VirtualKey);
Play_click(sender, new RoutedEventArgs());
break;
}
}
}
}
我想检测 Windows 应用程序中的组合键(例如 Control-A
)。 KeyDown
事件处理程序有关于最后按下的键的信息。但是我如何才能知道是否也按下了 Control 键呢?
可以用CoreVirtualKeyStates.HasFlag(CoreVirtualKeyStates.Down)
判断是否按下了Ctrl键,像这样-
Window.Current.CoreWindow.KeyDown += (s, e) =>
{
var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control);
if (ctrl.HasFlag(CoreVirtualKeyStates.Down) && e.VirtualKey == VirtualKey.A)
{
// do your stuff
}
};
可以使用AcceleratorKeyActivated事件,无论焦点在什么地方,它都会一直捕获该事件。
public MyPage()
{
Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated += AcceleratorKeyActivated;
}
private void AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args)
{
if (args.EventType.ToString().Contains("Down"))
{
var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control);
if (ctrl.HasFlag(CoreVirtualKeyStates.Down))
{
switch (args.VirtualKey)
{
case VirtualKey.A:
Debug.WriteLine(args.VirtualKey);
Play_click(sender, new RoutedEventArgs());
break;
}
}
}
}