Я буду использовать следующий код для объяснения моего вопроса:
#include <Windows.h>
#include <iostream>
int main()
{
bool toggle = 0;
while (1)
{
if (GetAsyncKeyState('C') & 0x8000)
{
toggle = !toggle;
if (toggle) std::cout << "Pressed\n";
else std::cout << "Not pressed\n";
}
}
}
Тестируя, я вижу, что
(GetAsyncKeyState('C') & 0x8000) // 0x8000 to see if the most significant bit is 1
ведет себя так же, как
(GetAsyncKeyState('C'))
Однако, чтобы добиться нужного мне поведения, - так работает любой ввод текста (он ждет около 1 секунды, а если вы все еще нажимаете кнопку, он начинает рассылать спам с определенной скоростью), мне нужно написать
(GetAsyncKeyState('C') & 1)
Документация говорит
Поведение младшего значащего бита возвращаемого значения сохраняется строго для совместимости с 16-битными приложениями Windows (которыене являются приоритетными) и на них нельзя полагаться.
Может кто-нибудь уточнить это, пожалуйста?