C ++ и GetAsyncKeyState () функция - PullRequest
1 голос
/ 16 ноября 2010

Поскольку он дает только заглавные буквы, есть идеи, как получить строчные буквы ??Если пользователь одновременно отписал SHIFT + K или CAPSLOCK и т. Д., Я хочу получить строчные буквы ... возможно ли это так или иначе ??

Спасибо,

Ответы [ 2 ]

3 голосов
/ 29 сентября 2015

Предположим, "c" - это переменная, которую вы помещаете в GetAsyncKeyState ().

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

string out = "";

bool isCapsLock() { // Check if CapsLock is toggled
    if ((GetKeyState(VK_CAPITAL) & 0x0001) != 0) // If the low-order bit is 1, the key is toggled
        return true;
    else
        return false;
}

bool isShift() {  // Check if shift is pressed
    if ((GetKeyState(VK_SHIFT) & 0x8000) != 0) // If the high-order bit is 1, the key is down; otherwise, it is up.
        return true;
    else
        return false;
}

if (c >= 65 && c <= 90) { // A-Z
    if (!(isShift() ^ isCapsLock())) { // Check if the letter should be lower case
        c += 32;  // in ascii table A=65, a=97. 97-65 = 32
}
out = c;
2 голосов
/ 16 ноября 2010

Как вы правильно заметили, он представляет собой ключ, а не верхний или нижний регистр.Поэтому, возможно, еще один вызов :: GetASyncKeyState (VK_SHIFT) поможет вам определить, нажата ли клавиша Shift, и тогда вы сможете соответствующим образом изменить результат вашего следующего вызова.

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