如何避免AutoHotkey热键输出被其他热键连锁触发?
解决AutoHotkey中Alt+方向键映射Win+方向键的连锁触发问题
问题根源:当你用Alt+方向键发送Win+方向键时,脚本中定义的Win+方向键热键会被触发,进而执行后续的Ctrl+方向键、Home/End等映射,而非系统原生的窗口移动功能。
修改后的脚本
#Requires AutoHotkey v2.0 #SingleInstance Force /* Alt + Left --> 系统原生Win+Left(窗口左移) Alt + Right --> 系统原生Win+Right(窗口右移) Alt + Up --> 系统原生Win+Up(窗口最大化/还原) Alt + Down --> 系统原生Win+Down(窗口最小化/还原) */ $!Left:: { Hotkey "#Left", "Off" ; 临时禁用Win+Left的自定义映射 SendInput "{LWin down}{Left}{LWin up}" ; 发送原生Win+Left Hotkey "#Left", "On" ; 恢复Win+Left的自定义映射 } $!Right:: { Hotkey "#Right", "Off" SendInput "{LWin down}{Right}{LWin up}" Hotkey "#Right", "On" } $!Up:: { Hotkey "#Up", "Off" SendInput "{LWin down}{Up}{LWin up}" Hotkey "#Up", "On" } $!Down:: { Hotkey "#Down", "Off" SendInput "{LWin down}{Down}{LWin up}" Hotkey "#Down", "On" } /* Win + Left --> Ctrl+Left Win + Right --> Ctrl+Right Win + Up --> Up Win + Down --> Down */ $#Left::Send "^{Left}" $#Right::Send "^{Right}" $#Up::Send "{Up}" $#Down::Send "{Down}" /* Ctrl + Left --> Home Ctrl + Right --> End Ctrl + Up --> Page Up Ctrl + Down --> Page Down */ $^Left::Send "{Home}" $^Right::Send "{End}" $^Up::Send "{PgUp}" $^Down::Send "{PgDn}" ; Win + Shift + Left --> Ctrl + Shift + Left ; Win + Shift + Right --> Ctrl + Shift + Right $#+Left::Send "^+{Left}" $#+Right::Send "^+{Right}" ; Ctrl + Shift + Left --> Shift + Home ; Ctrl + Shift + Right --> Shift + End $^+Left::Send "+{Home}" $^+Right::Send "+{End}"
原理说明
通过Hotkey函数在发送原生Win+方向键前,临时关闭对应的Win+方向键自定义热键,让系统直接响应Win+方向键的窗口控制功能,发送完成后再恢复自定义热键,既保留了Win+方向键的原有映射,又实现了Alt+方向键控制窗口的需求。
内容的提问来源于stack exchange,提问作者Toemass
相关产品推荐
相关产品推荐

