如何检测键盘上特殊按键的下/上事件

本文关键字:事件 检测 键盘 何检测 | 更新日期: 2023-09-27 18:10:18

我的环境是Windows 10 64位的Visual Studio 2013。

在我的Windows商店应用程序(Windows 8.1)中,我像这样添加了键盘事件(这是一个c++/cx程序,因为我使用的是c++工具包):

auto amv = Windows::ApplicationModel::Core::CoreApplication::MainView;
if (amv){
    auto cw = amv->CoreWindow;
    if (cw){
        cw->KeyDown += ref new TypedEventHandler<CoreWindow ^, KeyEventArgs^>(srt, &WinRTApp::OnKeyDown);
        cw->KeyUp += ref new TypedEventHandler<CoreWindow^, KeyEventArgs^>(srt, &WinRTApp::OnKeyUp);
    }
}

当我在日语(109)键盘上按下"Hankaku"键时。系统触发KeyUp事件与未定义的VirtualKey代码(243)和KeyDown事件与代码244。当我释放那个键时,没有触发任何事件。

第二次按下触发KeyUp(244)和KeyDown(243),第二次释放没有触发。

我想准确地检测KeyUp事件。有什么好的方法吗?

如何检测键盘上特殊按键的下/上事件

我已经研究了你的问题,并找到了一种相当简单的方法来处理每次键向上事件,无论字符值如何。在onlaunching事件中,你可以在App.xaml.cpp中添加事件处理程序,也可以将其添加到特定的页面中。MainPage.xaml.cpp

Windows::ApplicationModel::Core::CoreApplication::MainView->CoreWindow->KeyUp += ref new Windows::Foundation::TypedEventHandler<Windows::UI::Core::CoreWindow ^, Windows::UI::Core::KeyEventArgs ^>(this, &KeyUpTest::App::OnKeyUp);

在事件处理程序中使用

void KeyUpTest::App::OnKeyUp(Windows::UI::Core::CoreWindow ^sender,       Windows::UI::Core::KeyEventArgs ^args)
{
}

每次出现非系统键时触发。您可以使用一个bool数组对多个键状态使用相同的过程。

更多信息可在这里找到:http://www.cplusplus.com/forum/windows/117293/

KeyUp和KeyDown命令有许多问题,它们返回按下的键的值,但不是所选字符的值,例如:

如果我按7,响应是55,如果我按shift 7,答案仍然是55,而不是&的值。您可能正在寻找的是CharacterReceived事件,它提供更多上下文并处理大小写和其他值。

要添加此事件,可以使用

Windows::ApplicationModel::Core::CoreApplication::MainView->CoreWindow->CharacterReceived += ref new Windows::Foundation::TypedEventHandler<Windows::UI::Core::CoreWindow ^, Windows::UI::Core::CharacterReceivedEventArgs ^>(this, &KeyUpTest::App::OnCharacterReceived);

处理程序看起来像:

void KeyUpTest::App::OnCharacterReceived(Windows::UI::Core::CoreWindow ^sender, Windows::UI::Core::CharacterReceivedEventArgs ^args)
{
    bool iskey = false;
    int keycode = args->KeyCode;
    if (keycode == 65) {
        iskey = true;
    }
}
我希望这是有帮助的。