#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 }