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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:26:05