You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测Caps Lock键的开启/关闭状态?实现对应大小写输出

解决方案

原代码的问题在于没有直接检测Caps Lock的状态,而是通过轮询特定Shift组合键来模拟,既不灵活也不符合实际需求。正确的做法是直接监听Caps Lock的锁定状态,结合Shift按键来决定输出的大小写,以下是修正后的代码:

import keyboard

def on_key_press(event):
    # 仅处理单个字符的按键,跳过功能键、修饰键
    key = event.name
    if len(key) != 1:
        return
    
    # 获取Caps Lock的锁定状态
    caps_active = keyboard.is_locked('caps lock')
    # 检查Shift键是否被按下
    shift_down = keyboard.is_pressed('shift')
    
    # 按系统默认规则判断大小写:Caps和Shift状态相反时输出大写
    if caps_active ^ shift_down:
        print(key.upper(), end='', flush=True)
    else:
        print(key.lower(), end='', flush=True)

# 注册全局按键监听
keyboard.on_press(on_key_press)

# 维持程序运行以监听按键
keyboard.wait()

代码说明

  • 用keyboard.on_press()替代轮询,全局监听所有按键事件,效率更高且支持所有字符键
  • keyboard.is_locked('caps lock')直接获取Caps Lock的开启/关闭状态,这是实现需求的核心
  • 异或逻辑caps_active ^ shift_down完美复现系统默认的大小写切换规则:
    • Caps Lock开启 + Shift未按 → 输出大写
    • Caps Lock关闭 + Shift按下 → 输出大写
    • 其他情况输出小写
  • end=''和flush=True确保字符连续输出,避免每次打印自动换行

原代码的问题点

  1. 仅能检测d和shift+d两个按键,无法处理其他字符
  2. 没有真正检测Caps Lock状态,完全依赖Shift组合键来控制大小写,和需求不符
  3. 轮询方式会占用大量CPU资源,且响应不够及时

内容的提问来源于stack exchange,提问作者NotN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 01:12:59