Windows模仿Mac大小写切换, 中英文切换

时间:2025-03-30 06:58:06

CapsLock 功能优化脚本部署指南

部署步骤

第一步:安装 AutoHotkey v2

  1. 访问 AutoHotkey v2 官网
  2. 下载并安装最新版本
  3. 安装时勾选 "Add 'Compile Script' to context menus"

第二步:部署脚本

直接运行 (调试推荐)
  1. 新建文本文件,粘贴附录代码
  2. 重命名为 CapsLock_Optimizer.ahk
  3. 双击运行 → 托盘区出现绿色 H 图标即生效
编译为 EXE (无依赖方案)
  1. 右键脚本文件 → 选择 "Compile Script"
  2. 生成 CapsLock_Optimizer.exe
  3. 可安全删除原 .ahk 文件

第三步:开机自启动

  1. Win + R 输入 shell:startup
  2. .exe 文件拖入启动文件夹, 或者创建一个快捷方式, 把快捷方式放进去也行
  3. 重启系统验证效果

操作效果验证

操作场景 物理操作 系统响应 键盘灯状态
普通状态短按 快速点击 (<0.3s) 中英文输入法切换 保持熄灭
普通状态长按 按住 ≥0.3s 立即开启大写锁定 亮起
大写状态短按 快速点击 立即关闭大写锁定 熄灭
大写状态长按 按住 ≥0.3s 立即关闭大写锁定 熄灭

注意事项

输入法配置

‼️ 必须设置输入法切换快捷键为 Ctrl + Space
设置 > 时间和语言 > 语言 > 输入法选项 > 高级键盘设置

杀毒软件拦截

⚠️ 部分安全软件会拦截编译后的 EXE 文件,需手动添加信任:

  • Windows Defender病毒和威胁防护 > 管理设置 > 排除项
  • 第三方杀毒软件:参照具体软件说明

状态同步异常处理

  1. 热键重置:按下 Ctrl + Alt + R 强制同步状态
  2. 物理重置:短按物理 CapsLock
  3. 脚本重启:托盘图标右键选择 "Reload This Script"

常见问题

Q1:大写锁定开启时能否自动切换回英文?

A:​ 本设计特意保持状态隔离。如需关联行为,修改脚本第35行:

if isCapsActive {
    SetCapsLockState False
    isCapsActive := false
    Send "^ "  ; 新增此行实现关闭大写时切换输入法
}

Q2:长按中途能否取消操作?
A:​ 不能。一旦超过阈值即触发状态切换,持续按住不会逆转操作。

Q3:如何调整长按判定时间?
A:​ 修改脚本第9行:

threshold := 300  ; 改为所需毫秒数(如500=0.5秒)
Q4:游戏全屏模式下失效?
A:​ 右键 EXE 文件选择:
  1. 属性 > 兼容性 > 以管理员身份运行此程序
  2. 属性 > 兼容性 > 禁用全屏优化

附录:完整脚本代码

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

本方案已在 Windows 10/11 21H2 测试通过,推荐使用微软拼音/手心输入法。