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