Я написал небольшой регистратор клавиш на C / C ++ с намерением фиксировать все нажатые клавиши. Однако я не могу захватить некоторые специальные ключи, такие как ; : [] \ /? "'.
Давайте рассмотрим, хочу ли я получить ключ ; или : . В настоящее время у меня есть следующий фрагмент кода в бесконечном l oop:
if (GetAsyncKeyState(0xBA) == -32767)
{
//the statements inside the if clause are not executed when the key is pressed
std::ofstream write("Record.txt", ios::app);
if (GetAsyncKeyState(0x10))
write << ":";
else
write << ";";
}
, где 0x10 - это код виртуального ключа «SHIFT» (VK_SHIFT), а VK_OEM_1 (0xBA) - это виртуальный ключ для ; , как описано в Документах Microsoft. : https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes.
Насколько я понимаю, функция GetAsyncKeyState
возвращает -32767 после только что отпущенной клавиши.
Приведенный выше код работает для других виртуальные клавиши или простые клавиши, как описано в таблице ASCII (например, GetAsyncKeyState(48)
работает для клавиши 0 , GetAsyncKeyState(VK_RETURN)
работает для клавиши ENTER и т. д.
Я уже пытался ввести следующие аргументы для функции GetAsyncKeyState
:
- Код ASCII для '; ', то есть 59
- Символ ';'
- VK_OEM_1 - виртуальный ключ
- 0xBA - значение ключа виртуала в шестнадцатеричном формате
- 186, как я нашел здесь: https://www.amibroker.com/guide/afl/getasynckeystate.html* 104 6 *.
Ни один из аргументов не заставляет функцию возвращать -32767 при нажатии клавиши '; '.
Есть ли у вас какие-либо представления о том, как я должен это делать? использовать эту функцию для захвата этого ключа и, следовательно, всех других ключей, которые не были захвачены моим подходом ( [] \ /? "'. )?
PS: Я использую стандартную раскладку клавиатуры Engli sh (US).
Заранее спасибо!