Две функции состояния ключа в WIndows API, GetKeyState()
и GetAsyncKeyState()
, обе определяют состояние ключа на основе сообщений о повышении / понижении ключа, а не о физическом состоянии ключа.
Я работаю над программой, которая управляет вводом, используя SendInput()
, для отпускания клавиш-модификаторов (alt, ctrl и т. Д.), Отправки ввода и повторного нажатия клавиш-модификаторов.
Проблема в том, что я не знаю, все ли нажаты клавиши-модификаторы после отправки ввода, потому что я отправил событие key-up, и обе вышеупомянутые функции возвращают, что клавиша работает независимо от состояния физического ключа. Так что, если я предполагаю, что они все еще не работают, у пользователя остается свисающий ctrl-down, вызывающий проблемы, пока пользователь не нажмет и не отпустит cntl снова (или любую клавишу-модификатор). В противном случае клавиша может быть оставлена вверх, даже если физическая клавиша все еще не нажата.
Итак, есть ли способ (желательно без какого-либо слишком низкого уровня) обнаружить физическое состояние ключа. Методы только для Windows в порядке. Мониторинг ключей (прослушивание событий key up) действительно невозможен (или, по крайней мере, действительно, действительно не предпочтителен).