Python如何在窗口未聚焦时获取全局键盘按键输入?
keyboard模块是实现全局键盘监听的合理选型,它底层基于系统全局钩子实现,不需要程序窗口聚焦就可以捕获全系统的键盘输入,完全匹配你的开发需求。
核心使用方法
1. 事件回调模式(音游场景优先推荐)
该模式下按键事件触发时会主动调用你绑定的处理函数,响应延迟在毫秒级,适合需要实时更新按键叠加层的场景。
示例代码:
import keyboard # 按键按下触发的回调函数 def handle_press(event): # event.name为按键名称,event.scan_code为硬件扫描码 print(f"按键按下:{event.name}") # 此处填入你的叠加层状态更新逻辑 # 按键弹起触发的回调函数 def handle_release(event): print(f"按键弹起:{event.name}") # 绑定全局所有按键的按下/弹起事件 keyboard.on_press(handle_press) keyboard.on_release(handle_release) # 若仅需监听特定按键,可使用如下写法(比如音游常用的z、x键) # keyboard.on_press_key("z", lambda _: print("z键按下")) # keyboard.on_release_key("x", lambda _: print("x键弹起")) # 阻塞程序防止退出,若你自己有GUI主循环可删除该行 keyboard.wait()
2. 状态轮询模式
如果你习惯在自己的主逻辑循环中主动查询按键状态,可以使用is_pressed方法:
import keyboard import time while True: if keyboard.is_pressed("space"): print("空格键处于按下状态") # 监听组合键 if keyboard.is_pressed("ctrl+c"): break # 调整轮询间隔平衡CPU占用和响应速度 time.sleep(0.005)
注意事项
- 权限要求:全局键盘钩子需要系统高级权限,Windows下需要以管理员身份运行脚本,Linux下需要root权限,macOS需要在系统设置中给脚本开启辅助功能权限。
- 按键名查询:如果不知道目标按键的名称写法,可以临时运行
keyboard.hook(lambda e: print(e.name)),按下对应按键即可在控制台打印出它的名称,常见特殊按键如方向左为left、左shift为left shift。 - 事件拦截:如果需要拦截按键事件不传递给其他应用,在回调函数末尾返回
False即可,普通的按键叠加层场景不需要该操作。
内容的提问来源于stack exchange,提问作者Nate0523
相关产品推荐
相关产品推荐

