From 1bbea2e3fa67e4d123197c6a9460962c66e35408 Mon Sep 17 00:00:00 2001 From: MAO Dongyang Date: Sun, 1 Feb 2026 15:18:12 +0800 Subject: [PATCH] init --- CapSpace.ahk | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 CapSpace.ahk diff --git a/CapSpace.ahk b/CapSpace.ahk new file mode 100644 index 0000000..e6bfdce --- /dev/null +++ b/CapSpace.ahk @@ -0,0 +1,117 @@ +#Requires AutoHotkey v2.0 +#SingleInstance Force + +/** + * CapSpace v2.0 + * 描述: 将 CapsLock 变为 Smart Ctrl/Esc,并增强虚拟桌面切换 + */ + +; --- 全局变量初始化 --- +g_LastCtrlKeyDownTime := 0 +g_AbortSendEsc := false + +; --- 1. 虚拟桌面切换逻辑 --- + +; Ctrl + Left/Right -> 切换到上/下一个桌面 +^Left::Send("^# {Left}") +^Right::Send("^# {Right}") + +; Ctrl + Up -> 回到第一个桌面 (循环发送) +^Up:: { + Loop 5 { + Send("^#{Left}") + Sleep(10) + } +} + +; Ctrl + Down -> 跳到最后一个桌面 +^Down:: { + Loop 5 { + Send("^#{Right}") + Sleep(10) + } +} + +; --- 2. Smart CapsLock 核心逻辑 --- + +*CapsLock:: { + global g_LastCtrlKeyDownTime, g_AbortSendEsc + + ; 如果 CapsLock 已经处于按下状态(长按触发的重复),直接返回 + if (GetKeyState("LControl")) { + return + } + + Send("{LControl Down}") + g_LastCtrlKeyDownTime := A_TickCount + g_AbortSendEsc := false +} + +*CapsLock Up:: { + global g_LastCtrlKeyDownTime, g_AbortSendEsc + + Send("{LControl Up}") + + ; 如果期间触发了其他组合键,则不发送 Esc + if (g_AbortSendEsc) { + return + } + + ; 判断按下时间,如果小于 250ms 则视为单击,发送 Esc + time_elapsed := A_TickCount - g_LastCtrlKeyDownTime + if (time_elapsed <= 250) { + Send("{Esc}") + } +} + +; --- 3. 拦截逻辑:只要按了 Ctrl 组合键,就放弃发送 Esc --- + +; 使用动态热键或通配符拦截所有常用按键 +; 在 v2.0 中,我们通过一个简单的循环或特定的通配符来处理 +~*^a:: +~*^b:: +~*^c:: +~*^d:: +~*^e:: +~*^f:: +~*^g:: +~*^h:: +~*^i:: +~*^j:: +~*^k:: +~*^l:: +~*^m:: +~*^n:: +~*^o:: +~*^p:: +~*^q:: +~*^r:: +~*^s:: +~*^t:: +~*^u:: +~*^v:: +~*^w:: +~*^x:: +~*^y:: +~*^z:: +~*^0:: +~*^1:: +~*^2:: +~*^3:: +~*^4:: +~*^5:: +~*^6:: +~*^7:: +~*^8:: +~*^9:: +~*^Space:: +~*^Backspace:: +~*^Delete:: +~*^Enter:: +~*^Tab:: +~*^Up:: +~*^Down:: +~*^Left:: +~*^Right:: { + global g_AbortSendEsc := true +} \ No newline at end of file