Я хочу временно отключить все клавиши-модификаторы, если кажется, что одна или несколько из них «зависли» - в основном мне нужна противоположность Windows «StickyKeys».
Я работаю с WindowsПланшет (т.е. без физической клавиатуры) с неисправным устройством ввода, и иногда он просто блокирует связку клавиш-модификаторов без предсказуемого триггера.Пока у меня не будет времени на самом деле устранить ошибку (потенциально аппаратного), этот сценарий будет временным промежутком.
Мне просто нужно несколько секунд, чтобы поспать и отключить систему, поскольку это обычно приводит к тому, что ввод возвращается в порядок- к сожалению, застрявшие клавиши-модификаторы мешают нормальному поведению кнопки сна компьютера.
Сначала я пытаюсь поработать с клавишей ctrl, просто чтобы концепция заработала, а потом протестировать другие модификаторы.
TimerVar := 0
CtrlIsStuck := False
Loop {
CtrlKeyPhysicallyDown := GetKeyState("Ctrl", "P")
If CtrlKeyPhysicallyDown
TimerVar++
Else
TimerVar := 0
If TimerVar > 1 ; TODO: make sane before deploy
{
CtrlIsStuck := True
Break
}
Sleep, 500 ; TODO: make sane before deploy
}
#If CtrlIsStuck
ToolTip, Stuck keys detected; jamming for 15 seconds. Use Sleep button now.
SetTimer, DoReload, 15100
Hotkey, Ctrl, DoNothing
Send, {Ctrl Up}
Sleep 15000
DoReload:
Reload
DoNothing:
Return
Я ожидаю, что это проверит цикл, чтобы увидеть, удерживалась ли клавиша ctrl в течение определенного промежутка времени, и, если это так, связывает ctrl с чем-то, что ничего не делает, утверждая, что ctrl был физически освобожден., затем подождите немного.
Логика «проверьте, удержано ли» работает, но как только она проходит эту строку #If
, все начинает вести себя так, что после прочтения руководства некоторое времяЯ до сих пор не понимаю.В то время как он определенно выполняется, оператор Hotkey, кажется, не делает ничего полезного, и строка SetTimer эффективно ведет себя избыточно;Я подозреваю, что упускаю что-то очевидное из потока сценариев AutoHotKey, но я не уверен, что.