From c7a52a682c7f86227a80be52eacece9b4bd82ed3 Mon Sep 17 00:00:00 2001 From: MAO Dongyang Date: Thu, 12 Feb 2026 22:14:24 +0800 Subject: [PATCH] fix Win key stuck on virtual desktop switch --- CapSpace.ahk | 50 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/CapSpace.ahk b/CapSpace.ahk index 1601765..e18230b 100644 --- a/CapSpace.ahk +++ b/CapSpace.ahk @@ -1,21 +1,45 @@ #Requires AutoHotkey v2.0 #SingleInstance Force -; 确保 RAlt 的穿透性(如果 Typeless 仍有冲突,保留此行) +; 解决 Win 键残留的核心设置:防止 AHK 自动发送 Ctrl 掩码 +A_MenuMaskKey := "vkE8" + +; 确保 RAlt 穿透 ~RAlt::return -; 优化发送速度:SetKeyDelay 影响 SendEvent 的速度 -; 参数含义:延时 1ms,按键时长 1ms -SetKeyDelay 1, 1 +; ------------------------------------------------------------------------- +; 逻辑说明: +; 使用 SendInput 提高可靠性。 +; 执行完后强制发送 {LWin up} 以解除“卡死”状态。 +; ------------------------------------------------------------------------- -; 使用 Ctrl + 方向键 切换虚拟桌面 -; 加上 * 可以支持 Ctrl+Shift+Left 等组合,去掉 $ 如果你确定没有热键死循环 -*^Left::SendEvent("{Blind}#^{Left}") -*^Right::SendEvent("{Blind}#^{Right}") +*^Left:: { + SendInput("#^{Left}") + SafeRelease() +} -; 一键跳转到第一个桌面 (向上) -*^Up::SendEvent("{Blind}#^{Left 10}") +*^Right:: { + SendInput("#^{Right}") + SafeRelease() +} -; 一键跳转到最后一个桌面 (向下) -; 10 次通常足够覆盖大部分人的桌面数量 -*^Down::SendEvent("{Blind}#^{Right 10}") \ No newline at end of file +; 跳转到第一个桌面 (通常 10 次足够) +*^Up:: { + SendInput("#^{Left 10}") + SafeRelease() +} + +; 跳转到最后一个桌面 +*^Down:: { + SendInput("#^{Right 10}") + SafeRelease() +} + +; 辅助函数:强制释放 Win 键,确保系统状态归零 +SafeRelease() { + ; 等待物理 Ctrl 键松开(可选,若想极致连发可注释掉下行) + ; KeyWait "Control" + + ; 强制发送 Win 弹起指令,消除“残留” + SendInput("{LWin up}{RWin up}") +} \ No newline at end of file