Переключение клавиш / c ++ - PullRequest
       6

Переключение клавиш / c ++

0 голосов
/ 26 февраля 2012

Я пытаюсь зарегистрироваться, если ключ был включен или выключен следующим образом:

if (pKeyBuffer[VK_TAB] & 0xFF81)
{
   functionA();
}

if (pKeyBuffer[VK_TAB] & 1)
{
   functionB();
}

Но есть большая проблема в приведенном выше коде - состояние VK_TAB не известно при запуске и потому чтоиногда мне приходится нажимать клавишу Tab еще раз во время выполнения, чтобы установить его в состояние по умолчанию.

Я не могу использовать обычные '0xF0' или '0', потому что не могу позволить себе functionA() илиfunctionB() вызывается несколько раз.Мне нужно поведение, похожее на переключатель (т. Е. Если нажата клавиша Tab, даже если она удерживается, functionA() все еще выполняется только один раз).

Так есть ли способ получить информацию о состоянии клавиши, чтобы выполнить это первымнажатие клавиши?Или, может быть, вы можете предложить какой-то альтернативный подход?Спасибо!

Ответы [ 2 ]

2 голосов
/ 26 февраля 2012

В такой ситуации вы хотите использовать функцию GetKeyState, которая будет получать информацию о нажатии и переключении клавиш в тот момент, когда она вызывается для данной клавиши.

поэтому, если вы хотите проверить, удерживается ли вкладка, используйте GetKeyState(VK_TAB) & 0x8000, если вы хотите проверить, является ли ее переключение, используйте GetKeyState(VK_TAB) & 1.

1 голос
/ 26 февраля 2012

Вам нужно GetAsyncKeyState.Определите функцию:

bool IsKeyDown( int vk )
{
    return (GetAsyncKeyState(VK_TAB) & 0x8000) != 0;
}

И используйте так:

if( IsKeyDown(VK_TAB) )
{
    // The key is currently down
}
else
{
    // The key is currently up
}

Если вы хотите точно отследить изменения в ключевых состояниях, вам нужно использовать Windows Hooks .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...