![使用 autohotkey 禁用有故障的右箭头键](https://linux22.com/image/1474913/%E4%BD%BF%E7%94%A8%20autohotkey%20%E7%A6%81%E7%94%A8%E6%9C%89%E6%95%85%E9%9A%9C%E7%9A%84%E5%8F%B3%E7%AE%AD%E5%A4%B4%E9%94%AE.png)
我的键盘被水弄脏了,现在有时不用按右箭头键就会激活(例如 PDF 会向前跳一页,YouTube 会跳过 5 秒等)。我使用了在线键盘记录器(http://unixpapa.com/js/testkey.html) 来验证它是否是具有快速 keydown 和 keyup 信号的右箭头键 (keyCode=39)。因此,我尝试使用 Autohotkey 禁用它,如下所示:
Right::return
(下列的此解决方案) 但无济于事。理想情况下,我希望只有当按下时间超过 0.5 秒时,右箭头才会被注册,但在最坏的情况下,我接受完全关闭它(然后我可以重新映射Shift+Left::Right
)
任何帮助深表感谢!
编辑:目前,我的脚本如下所示:
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
SC063::Pause
+BS::Del
^BS::run, taskmgr
Right::return
答案1
我同意使用吹风机的建议(小心一点)。你也可以尝试将其放入一大袋米中过夜,以除去水分。
回报按钮是{Enter}
,如下所示。否则,Return 将被解释为从子程序返回,而不是 Enter 键。
Right::{Enter}
Right::Send {Enter}
Right::SendInput {Enter}
Send
语句不是必需的,但如果您需要进行特殊组合,它会派上用场。
为了检查时间,您可以监控按键的上下移动以确定时间差,然后仅当时间大于设定值(500 毫秒 = 半秒)时才发送。
Right::
timedown := A_TickCount
; no tilde on hotkey definition and no SendInput {Right} here
; means the keystroke down will get discarded
return
Right Up::
timeUp := A_TickCount
; interval between down and up has to be half second or more, otherwise ignore
if ((timeUp - timeDown) >= 500)
SendInput {Right}
return
显然,您可以简化上述内容并摆脱 timeUp,只是为了清楚起见列出......
Right Up::
if ((A_TickCount - timeDown) >= 500)
SendInput {Right}
return
要完全重新分配:
Right::return ; ignores all right button presses by doing nothing and returning
+Left::Right ; send right if Shift+Left is detected
或者...
Right::return ; ignores all right button presses by doing nothing and returning
+Right::Right ; send right if Shift+Right is detected
此外,如果您仍然遇到问题,您还可以使用 AutoHotkey 作为键盘记录器,它会告诉您所有击键,包括它可能忽略的击键以及它们的处理顺序。从托盘图标打开正在运行的程序,然后选择查看 > 键盘历史记录。