AutoHotkey V1中AltGr组合键持续执行撤销/重做及弹窗问题求助
AutoHotkey V1.1.37.01 需求实现方案
需求梳理
- 按住AltGr(
<^>!)+ SC033(;键):持续执行Ctrl+Z撤销操作,直到松开SC033 - 按住AltGr + p键:持续执行
Ctrl+Y重做操作,直到松开p键 - 仅按下并松开AltGr:弹出提示框
Only AltGr has been pressed down and released.
问题根源
之前的代码要么混淆了组合键与单独AltGr的触发逻辑,要么未正确实现按键按住状态的循环检测,导致功能失效。
正确实现代码
; 禁用AltGr默认系统行为,避免逻辑冲突 <^>!::return ; 单独按下并松开AltGr时触发提示 ~LCtrl & RAlt Up:: ; 确认无其他按键按住,且之前未触发组合键 if (!GetKeyState("LCtrl", "P") && !GetKeyState("RAlt", "P") && A_PriorKey not in SC033,p) { MsgBox, Only AltGr has been pressed down and released. } return ; AltGr + SC033 持续执行撤销 <^>!SC033:: ; 循环检测按键按住状态 while (GetKeyState("SC033", "P") && GetKeyState("LCtrl", "P") && GetKeyState("RAlt", "P")) { Send, ^z Sleep, 50 ; 调整此值控制操作频率,数值越小执行越快 } return ; AltGr + p 持续执行重做 <^>!p:: while (GetKeyState("p", "P") && GetKeyState("LCtrl", "P") && GetKeyState("RAlt", "P")) { Send, ^y Sleep, 50 } return
关键逻辑说明
<^>!::return:阻止AltGr的默认系统行为,防止组合键逻辑被系统自带功能干扰。~LCtrl & RAlt Up:监听AltGr松开事件,通过GetKeyState确认无其他按键按住,同时用A_PriorKey排除组合键触发后的情况,避免误弹提示框。While循环:持续检测AltGr和目标按键的按住状态,只有当两者都处于按住状态时,才重复发送撤销/重做指令,Sleep用于控制执行间隔,防止操作过于频繁导致程序卡顿。
内容的提问来源于stack exchange,提问作者yfjuu 6
相关产品推荐
相关产品推荐

