You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

关键逻辑说明

  1. <^>!::return:阻止AltGr的默认系统行为,防止组合键逻辑被系统自带功能干扰。
  2. ~LCtrl & RAlt Up:监听AltGr松开事件,通过GetKeyState确认无其他按键按住,同时用A_PriorKey排除组合键触发后的情况,避免误弹提示框。
  3. While循环:持续检测AltGr和目标按键的按住状态,只有当两者都处于按住状态时,才重复发送撤销/重做指令,Sleep用于控制执行间隔,防止操作过于频繁导致程序卡顿。

内容的提问来源于stack exchange,提问作者yfjuu 6

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 05:33:15