Работа с клавиатурой в Win Api

233
08 июля 2017, 10:21

Как через Win Api проверить состояние клавиши: зажата, нажата, отпущена? События использовать для этой цели не могу. Только функции. Проверку зажатой клавиши уже реализовал:

bool result;
result=false;
if(GetAsyncKeyState(MapVirtualKey(code,MAPVK_VSC_TO_VK))==-32767) result=true;
return result;

Как реализовать две оставшиеся проверки?

Answer 1

Используйте более простой вызов GetKeyState, чтобы получить состояние клавиши по ее virtual-key code:

  • старший бит возвращаемого SHORT равен 1, если клавиша нажата, иначе - отпущена
  • младший бит возвращаемого SHORT равен 1, если клавиша зажата (toggled), иначе - отжата (untoggled) [актуально для клавиш типа CAPS LOCK].

Пример:

if (GetKeyState(VK_LEFT) < 0) {
  //  VK_LEFT нажата
} else {
  //  VK_LEFT отпущена
}
if ((GetKeyState(VK_CAPITAL) % 2) == 1) {
  //  CAPS LOCK зажат
} else {
  //  CAPS LOCK отжат
}
READ ALSO
Как посмотреть исходный код программы?

Как посмотреть исходный код программы?

Я хочу подправить исходный код, ничего серьезного, только вывод нескольких строкПрограмма написана скорее всего на С++

936
Qt C++ Потоки и ProgressBar

Qt C++ Потоки и ProgressBar

Всем приветЕсть пулл потоков, к примеру их 10 штук

342