#c #windows #winapi #input #keyboard
Вопрос:
Есть ли способ определить, освобождается ли ключ с помощью GetKeyState()
? Я читал об этом, и у него всего 2 состояния, переключил 0x8000 и нажал 0x01.
Я хочу что-то вроде этого:
short Input(int Key, int Mode)
{
if (Mode == KEY_RELEASE)
if (GetKeyState(Key) amp; KEY_PRESS)
//Wait for the key to be released
else
return GetKeyState(Key) amp; KEY_PRESS;
}
Комментарии:
1. Нет. Единственный способ обнаружить ключ
release
с помощью этой функции-кэшировать значение ключа. Если клавиша была нажата в прошлый раз, когда вы проверяли, а сейчас ее нет, она была отпущена. Подумайте о том, чтобы изучить другие способы обработки входных данных.2. Какую проблему вы пытаетесь решить?
3. @IInspectable Я пытаюсь обнаружить выпуски ключей с помощью функции GetKeyState, но у нее нет состояния выпуска.
4. Он имел в виду в целом, зачем вам нужно знать, когда был выпущен ключ? Вас волнует только ваше собственное окно или все процессы в системе и т. Д.
5. @Anders Я хочу знать, освобождается ли ключ, потому что я создаю систему ввода для фреймворка, над которым работаю, меня волнует только мое окно.
Ответ №1:
GetKeyState
возвращает информацию о состоянии ключа текущей входной очереди (вашего потока и подключенных потоков). Вы можете получить аналогичную информацию для всех ключей с GetKeyboardState
помощью .
Эти две функции следует использовать только в ответ на какое-то событие, вы не должны опрашивать снова и снова, чтобы обнаружить изменения.
Лучший способ обнаружить изменения клавиатуры в Windows, которыми вы управляете, — это обрабатывать сообщения WM_KEYDOWN/UP и WM_CHAR.
В худшем случае используйте SetWindowsHookEx
для перехвата событий клавиатуры или сообщений окна.