GetKeyState
в настоящее время возвращает SHORT
тип данных, который typedef из short
.short
находится в пределах диапазона –32,768 to 32,767
.Один из подходов для определения максимального разрешенного бита (ключ не работает) - сделать его без знака и затем выполнить запрос к 0x8000
константному значению.
Другой подход - сохранить значение как подписанное и просто сравнить его с 0.
bool bIsKeyDown = GetKeyState(VK_SHIFT) < 0;
Как упоминалось здесь: https://stackoverflow.com/a/5789914/2338477
для всех отрицательных значений активирован старший бит, так как для всех положительных значений и нуля старший бит отключен.
Это примертаблица для символа, но то же самое применимо и к короткому типу данных, только таблица будет немного больше.
bits value
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 -8
1001 -7
1010 -6
1011 -5
1100 -4
1101 -3
1110 -2
1111 -1
А переключение клавиш можно проверить с помощью обычной операции "и", как упомянуто в других ответах здесь:
bool bIsKeyToggled = GetKeyState(VK_SHIFT) & 1;