1

Моей средой является Visual Studio 2013 на Windows 10 64bit.Как определить событие включения/выключения специальных клавиш на клавиатуре

В моем Windows Store App (для ОС Windows 8.1), я добавил событие клавиатуры, как это (это программа с ++/ой, потому что я использую C++ Toolkit):

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); 
    } 
} 

Когда я нажимаюсь Hankaku на моей японской (109) клавиатуре. Система запускает событие KeyUp с неопределенным кодом VirtualKey (243) и событием KeyDown с кодом 244. И когда я выпустил этот ключ, событие не запускалось.

Второе нажатие клавиш KeyUp (244) и KeyDown (243), а второй выпуск не имеет триггера.

Я хочу точно определить событие KeyUp. Есть ли хорошие способы?

ответ

-1

Я рассмотрел ваш вопрос и нашел довольно простой способ обработки события key up каждый раз, независимо от значения символа. Внутри события 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, и если я нажму сдвиг 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

Смежные вопросы