如何知道 WinUI 3/WinAppSDK 中是否按下了某个键(CoreWindow.GetKeyState 替代方案)?

问题描述 投票:0回答:1

在我的旧 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
。如何在代码中获取键盘状态?

c++ xaml winui-3
1个回答
0
投票

官方文档(桌面应用程序不支持 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;
        // ...
    }
}

请参阅我关于在 WinUI 3 中获取 UI 线程的类似问题

© www.soinside.com 2019 - 2024. All rights reserved.