如何在Python中读取特定键盘设备的按键?寻求HID macros类应用实现方案
读取特定键盘设备按键输入的Python实现方案
Linux/macOS下直接访问设备
Linux
可以用evdev库直接读取/dev/input下的键盘设备,需要root权限才能访问设备文件。
先安装库:
pip install evdev
示例代码,先枚举设备找到目标键盘,再监听按键:
import evdev # 枚举所有输入设备,匹配目标键盘名称 devices = [evdev.InputDevice(path) for path in evdev.list_devices()] target_dev = next((dev for dev in devices if "你的键盘名称" in dev.name), None) if target_dev: print(f"正在监听设备: {target_dev.name}") for event in target_dev.read_loop(): if event.type == evdev.ecodes.EV_KEY: key_event = evdev.categorize(event) # 仅处理按键按下事件,可根据需求修改为key_up if key_event.keystate == key_event.key_down: print(f"触发按键: {key_event.keycode}") # 这里插入你的宏执行逻辑 else: print("未找到目标键盘设备")
macOS
用hidapi库直接和HID设备通信,需要先通过brew安装系统级依赖,再安装Python库:
brew install hidapi pip install hidapi
核心思路是通过设备的Vendor ID和Product ID定位目标键盘,然后读取HID报告并解析按键数据(不同键盘的报告格式不同,需要查阅设备的HID描述符):
import hid # 替换为你的键盘的Vendor ID和Product ID(可通过系统信息查看) VENDOR_ID = 0x1234 PRODUCT_ID = 0x5678 try: device = hid.device() device.open(VENDOR_ID, PRODUCT_ID) print(f"已连接设备: {device.get_product_string()}") while True: # 读取HID报告,参数为报告长度,需根据设备调整 report = device.read(64) if report: # 解析报告中的按键数据,逻辑需适配目标键盘 print(f"收到报告: {report}") # 执行宏逻辑 except Exception as e: print(f"设备连接失败: {str(e)}")
Windows平台方案
Windows下可以结合pywin32调用Raw Input API,实现特定设备的输入监听。
先安装库:
pip install pywin32
示例代码框架:
import win32api import win32con import win32gui import win32input def get_target_device(device_name): # 枚举所有Raw Input设备,匹配目标键盘名称 for dev in win32input.GetRawInputDeviceList(): dev_info = win32input.GetRawInputDeviceInfo(dev[0]) if device_name in dev_info[1]: return dev[0] return None def window_proc(hwnd, msg, wparam, lparam): if msg == win32con.WM_INPUT: # 获取Raw Input数据 raw_data = win32input.GetRawInputData(lparam, win32input.RID_INPUT) # 解析数据提取按键信息,需根据Raw Input结构适配 # 这里添加宏触发逻辑 print("收到目标键盘输入") return win32gui.DefWindowProc(hwnd, msg, wparam, lparam) # 创建隐藏窗口用于接收Raw Input消息 hwnd = win32gui.CreateWindowEx(0, "STATIC", "", 0, 0, 0, 0, 0, 0, 0, None) win32gui.SetWindowLong(hwnd, win32con.GWL_WNDPROC, window_proc) target_dev_id = get_target_device("你的键盘名称") if target_dev_id: # 注册目标设备的Raw Input监听 win32input.RegisterRawInputDevices([{ "usUsagePage": 1, "usUsage": 6, "dwFlags": win32input.RIDEV_INPUTSINK, "hwndTarget": hwnd }]) # 启动消息循环 while True: win32gui.PumpWaitingMessages() else: print("未找到目标键盘")
注意:需要以管理员权限运行脚本,否则可能无法访问设备。
替代方案(无权限限制/跨平台)
如果直接读取特定设备遇到权限或兼容问题,可选择以下方案:
全局按键监听(跨平台)
用pynput库监听所有键盘输入,通过特定按键组合或序列触发宏。优点是跨平台、无需特殊权限,缺点是无法区分输入来源:
pip install pynput
示例代码:
from pynput import keyboard def on_press(key): try: # 示例:按下F12触发宏 if key == keyboard.Key.f12: print("执行宏操作") # 插入宏逻辑 except AttributeError: # 处理特殊按键以外的输入 pass with keyboard.Listener(on_press=on_press) as listener: listener.join()
结合专用宏键盘硬件
使用支持宏编程的商用键盘(如罗技G系列、雷蛇),通过官方SDK或软件配置宏,Python可通过调用其API或模拟系统输入实现联动。
AutoHotkey联动(Windows)
编写AutoHotkey脚本处理特定键盘的宏逻辑,Python通过调用AHK脚本实现触发,适合Windows平台下快速实现功能。
内容的提问来源于stack exchange,提问作者Klesty Selimay
相关产品推荐
相关产品推荐

