如果它们中的一个或多个似乎已经“卡住了”,我想暂时禁用所有修饰键-基本上,我需要与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脚本流的明显信息,但是我不确定是什么。