This commit is contained in:
2026-02-08 15:25:16 +08:00
parent e85eb494d5
commit 13a081fc52
5 changed files with 17 additions and 175 deletions

View File

@@ -1,118 +1,21 @@
#Requires AutoHotkey v2.0
#SingleInstance Force
/**
* CapSpace v2.0
* 描述: 将 CapsLock 变为 Smart Ctrl/Esc并增强虚拟桌面切换
*/
; 确保 RAlt 的穿透性(如果 Typeless 仍有冲突,保留此行)
~RAlt::return
; --- 全局变量初始化 ---
g_LastCtrlKeyDownTime := 0
g_AbortSendEsc := false
; 优化发送速度SetKeyDelay 影响 SendEvent 的速度
; 参数含义:延时 1ms按键时长 1ms
SetKeyDelay 1, 1
; --- 1. 虚拟桌面切换逻辑 (修正版) ---
; 使用 Ctrl + 方向键 切换虚拟桌面
; 加上 * 可以支持 Ctrl+Shift+Left 等组合,去掉 $ 如果你确定没有热键死循环
*^Left::SendEvent("{Blind}#^{Left}")
*^Right::SendEvent("{Blind}#^{Right}")
$^Left::SendEvent("{Blind}^#{Left}")
$^Right::SendEvent("{Blind}^#{Right}")
; 一键跳转到第一个桌面 (向上)
*^Up::SendEvent("{Blind}#^{Left 10}")
$^Up:: {
Loop 8 {
SendEvent("{Blind}^#{Left}")
Sleep(1)
}
; 关键:强制释放 Win 和 Ctrl防止粘滞
Send("{LWin Up}{Control Up}")
}
$^Down:: {
Loop 8 {
SendEvent("{Blind}^#{Right}")
Sleep(1)
}
; 关键:强制释放 Win 和 Ctrl
Send("{LWin Up}{Control Up}")
}
; --- 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
}
; 一键跳转到最后一个桌面 (向下)
; 10 次通常足够覆盖大部分人的桌面数量
*^Down::SendEvent("{Blind}#^{Right 10}")