diff --git a/CapSpace.ahk b/CapSpace.ahk index e18230b..67bd4bc 100644 --- a/CapSpace.ahk +++ b/CapSpace.ahk @@ -1,16 +1,17 @@ #Requires AutoHotkey v2.0 #SingleInstance Force +InstallKeybdHook ; 强制安装键盘钩子,提高对物理按键状态感知的准确性 -; 解决 Win 键残留的核心设置:防止 AHK 自动发送 Ctrl 掩码 +; 关键优化:将掩码键设为 vkE8。 +; 这样 AHK 在屏蔽 Win/Alt 的菜单功能时,不会发送干扰 Typeless 的 Ctrl 信号。 A_MenuMaskKey := "vkE8" -; 确保 RAlt 穿透 -~RAlt::return +; 1. 优化 RAlt 穿透逻辑 +; 使用 ~ 确保信号能传给 Typeless,同时用 $ 防止热键自我触发 +~$RAlt::return ; ------------------------------------------------------------------------- -; 逻辑说明: -; 使用 SendInput 提高可靠性。 -; 执行完后强制发送 {LWin up} 以解除“卡死”状态。 +; 2. 虚拟桌面切换逻辑 (使用之前优化的防残留方案) ; ------------------------------------------------------------------------- *^Left:: { @@ -23,23 +24,21 @@ A_MenuMaskKey := "vkE8" SafeRelease() } -; 跳转到第一个桌面 (通常 10 次足够) *^Up:: { SendInput("#^{Left 10}") SafeRelease() } -; 跳转到最后一个桌面 *^Down:: { SendInput("#^{Right 10}") SafeRelease() } -; 辅助函数:强制释放 Win 键,确保系统状态归零 +; 辅助函数:彻底清除 Win 键残留,并给系统一点微小的缓冲时间 SafeRelease() { - ; 等待物理 Ctrl 键松开(可选,若想极致连发可注释掉下行) - ; KeyWait "Control" - - ; 强制发送 Win 弹起指令,消除“残留” + ; 强制释放 Win 键 SendInput("{LWin up}{RWin up}") + + ; 如果切换后 RAlt 依然失灵,取消下面这行的注释(加 50ms 缓冲) + ; Sleep 50 } \ No newline at end of file