我正在设置在单个页面上工作的全局键盘快捷键,例如Ctrl + someKey
用于执行某些操作,Ctrl + Alt + otherKey
用于激活其他一些操作,依此类推。我有或多或少的Ctrl + VirtualKey
工作代码(字母,数字等),但我还需要一些不在VirtualKey
中的键,例如点,逗号,加号,减号,..
这些是注册的事件:
public Planner()
{
this.InitializeComponent();
CoreWindow.GetForCurrentThread().KeyDown += CoreWindow_KeyDown;
CoreWindow.GetForCurrentThread().CharacterReceived += Planner_CharacterReceived;
Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated += Dispatcher_AcceleratorKeyActivated;
}
我将KeyDown
用于Ctrl + K
,Ctrl + Shift + A
就像快捷方式一样。
CharacterReceived
可以捕获逗号,点号,加号,减号等字符,但不能与Ctrl和Alt一起使用。
最后,Dispatcher_AcceleratorKey
检查是否按了Alt键。
答案 0 :(得分:0)
当前,UWP不支持注册全局热键,但您可以在应用程序内部响应Windows快捷方式,如下所示。
首先,注册用于按钮热键的加速键事件。
public MainPage()
{
this.InitializeComponent();
// Register for accelerator key events used for button hotkeys
Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated += Dispatcher_AcceleratorKeyActivated;
}
检测 Ctrl + V 或 Ctrl + n 。
private void Dispatcher_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.V:
ViewOrders_Tapped(this, null);
break;
case VirtualKey.N:
NewOrder_Tapped(this, null);
break;
}
}
}
}
对于三个键,例如 Ctrl + Shift + V
private void Dispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args)
{
if (args.EventType.ToString().Contains("Down"))
{
var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control);
var shift = Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift);
if (ctrl.HasFlag(CoreVirtualKeyStates.Down) && shift.HasFlag(CoreVirtualKeyStates.Down))
{
switch (args.VirtualKey)
{
case VirtualKey.V:
break;
case VirtualKey.N:
break;
}
}
}
}