在我的旧 UWP 应用程序中,我可以在处理程序中检查键盘按键的状态,如下所示:
void MyControl::UserControl_KeyDown(winrt::IInspectable const& /*sender*/, winrt::KeyRoutedEventArgs const& e)
{
if (e.Key() == winrt::VirtualKey::F6)
{
const auto isShiftPressed = winrt::CoreWindow::GetForCurrentThread().GetKeyState(winrt::VirtualKey::Shift) & winrt::CoreVirtualKeyStates::Down;
// ...
}
}
winrt::CoreWindow::GetForCurrentThread()
在 WinUI 3中返回
null
。如何在代码中获取键盘状态?
官方文档(桌面应用程序不支持 Windows 运行时 API)推荐使用
InputKeyboardSource.GetKeyStateForCurrentThread
:
[...]使用 WinUI 3 提供的 InputKeyboardSource.GetKeyStateForCurrentThread 方法来代替 GetKeyState 方法。
void MyControl::UserControl_KeyDown(winrt::IInspectable const& /*sender*/, winrt::KeyRoutedEventArgs const& e)
{
if (e.Key() == winrt::VirtualKey::F6)
{
const auto isShiftPressed = winrt::InputKeyboardSource::GetKeyStateForCurrentThread(winrt::VirtualKey::Shift) & winrt::CoreVirtualKeyStates::Down;
// ...
}
}