Perfect
This commit is contained in:
125
CapSpace.ahk
125
CapSpace.ahk
@@ -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}")
|
||||
Reference in New Issue
Block a user