2015-05-21 2 views
0

Мне было интересно, как узнать, какая клавиша нажата с моей клавиатуры? Прочитайте пару веб-сайтов о GetAsyncKeyState(), но я до сих пор не понял, как работает эта функция. Любой, пожалуйста, объясните это на примере.Как узнать, какая клавиша нажата?

+2

вы задаете в целом (что могло бы объяснить, почему вы не смогли получить он работает), или конкретно о [функции Windows] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms646293%28v=vs.85%29.aspx)? – usr2564301

+0

Windows или Linux? – ANjaNA

+0

Я программирую в окнах. –

ответ

4

Для Windows, вы можете использовать это:

#include <stdio.h> 
#include <stdlib.h> 
#include <windows.h> 

int main() 
{ 
    while(1) 
    { 
     if (GetAsyncKeyState(VK_DELETE)) 
     { 
      printf("Delete has been pressed"); 
     } 
    } 
} 
+0

Итак, если мне нужно обнаружить несколько ключей, то я должен использовать эту функцию несколько раз? –

+1

@ nkd2195: Вы можете получить статус всех виртуальных ключей сразу с помощью 'GetKeyboardState'. Но учтите, что это требует от вас обработки сообщений клавиатуры, отправленных в очередь сообщений потока. Чтобы указать MSDN: _ «Статус изменяется как поток, удаляет сообщения клавиатуры из очереди сообщений. Статус не изменяется, поскольку сообщения клавиатуры отправляются в очередь сообщений потока и не изменяются, поскольку сообщения клавиатуры отправляются или извлекаются из сообщения очередями других потоков. "_. – Michael

1

Для получения дополнительной виртуального ключа кода посещения этого (https://msdn.microsoft.com/en-us/library/dd375731(v=vs.85).aspx)

#include <iostream> 
    #include <windows.h> 
    #include <winuser.h> 
    using namespace std; 
    int Stroke (int key_stroke); 

    int main() 
    { 
     char i; 
     while (1) 
     { 
      for(i = 8; i <= 190; i++) 
      { 
       if (GetAsyncKeyState(i) == -32767) 
       Stroke (i); 
      } 
     } 
     return 0; 
    } 

    int Stroke (int key_stroke) 
    { 
    if ((key_stroke == 1) || (key_stroke == 2)) 
    return 0; 
    if (key_stroke == 8) 
    printf("%s\n", "[BACKSPACE]"); 
    else if (key_stroke == 13) 
    printf("%s\n", "[ENTER]\n"); 
    else if (key_stroke == 32) 
    printf("%s\n", "[SPACE]"); 
    else if (key_stroke == VK_TAB) 
    printf("%s\n", "[TAB]"); 
    else if (key_stroke == VK_SHIFT) 
    printf("%s\n", "[SHIFT]"); 
    else if (key_stroke == VK_CONTROL) 
    printf("%s\n", "[CONTROL]"); 
    else if (key_stroke == VK_ESCAPE) 
    printf("%s\n", "[ESCAPE]"); 
    else if (key_stroke == VK_END) 
    printf("%s\n", "[END]"); 
    else if (key_stroke == VK_HOME) 
    printf("%s\n", "[HOME]"); 
    else if (key_stroke == VK_LEFT) 
    printf("%s\n", "[LEFT]"); 
    else if (key_stroke == VK_UP) 
    printf("%s\n", "[UP]"); 
    else if (key_stroke == VK_RIGHT) 
    printf("%s\n", "[RIGHT]"); 
    else if (key_stroke == VK_DOWN) 
    printf("%s\n", "[DOWN]"); 
    else if (key_stroke == VK_DELETE) 
    printf("%s\n", "[DEL]"); 
    else if (key_stroke == 190 || key_stroke == 110) 
    printf("%s\n", "."); 
    else 
    printf("%s\n", &key_stroke); 
    return 0; 
} 
Смежные вопросы