2015-08-28 84 views
1

我的環境是Windows 10 64位上的Visual Studio 2013。如何檢測鍵盤上特殊鍵的向下/向上事件

在我的Windows Store應用(適用於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鍵。系統使用未定義的VirtualKey代碼(243)和代碼爲244的KeyDown事件觸發KeyUp事件。並且當我釋放該密鑰時,沒有事件觸發。

第二次按鍵觸發KeyUp(244)和KeyDown(243),第二次釋放沒有觸發。

我想精確檢測KeyUp事件。有什麼好方法嗎?

回答

-1

我查看了你的問題,發現了一個相當簡單的方法來處理每次不管字符值的關鍵事件。在Onlaunched事件中,您可以在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; 
    } 
} 

我希望這是有幫助的。

+0

字母鍵沒有問題。 Hankaku的關鍵不會通過該解決方案工作。 – Tank2005

相關問題