使用了 AutoHotKey,
并使用文章https://blog.csdn.net/qq_42742845/article/details/146658345中描述的方法,同时增加了vim 的Esc能够直接改成英文.
cpp
; vim ESC转换英文
~*Esc::
{
Send "{Shift}"
}
#Requires AutoHotkey v2.0
; 禁用原生CapsLock功能
*CapsLock::return
; 初始化状态跟踪
isCapsActive := false ; 大写锁定状态
inputMethodState := 0 ; 输入法状态跟踪器
$CapsLock::
{
global isCapsActive, inputMethodState
startTime := A_TickCount
threshold := 300 ; 长按判定阈值
hasLongPressed := false
; 实时检测长按状态
Loop {
Sleep 10
; 达到阈值立即触发大写锁定
if (A_TickCount - startTime >= threshold) && !hasLongPressed {
if !isCapsActive {
SetCapsLockState True
isCapsActive := true
} else {
SetCapsLockState False
isCapsActive := false
}
hasLongPressed := true
}
; 检测是否提前松手
if !GetKeyState("CapsLock", "P") {
break
}
}
; 短按处理
if (!hasLongPressed) {
if isCapsActive {
; 大写状态下短按:关闭大写
SetCapsLockState False
isCapsActive := false
} else {
; 普通状态下短按:切换输入法
Send "{LCtrl down}{Space}{LCtrl up}"
; 同步输入法状态
inputMethodState := !inputMethodState
}
}
; 确保大写状态同步
if (hasLongPressed) {
KeyWait "CapsLock" ; 等待物理按键释放
}
}
; 状态重置热键 (Ctrl+Alt+R)
^!r:: {
global isCapsActive := GetKeyState("CapsLock", "T")
TrayTip "状态已重置", "当前大写状态:" (isCapsActive ? "ON" : "OFF"), 1
}
保存上述文档为autohotkey.ahk到C:\Users\ashcn\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup文件夹中自启动或者命令行输入shell:startup进入该文件夹
设置 > 时间和语言 > 语言 > 输入法选项 > 高级键盘设置
注意:我使用的是微软自带输入法并设置shift 和 Ctrl + Space切换中英文