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

将自定义宏键盘用作应用控制器的技术实现问题

自定义HID宏键盘控制问题

设备与需求

  • 购入一款12键(含2个旋转拨杆)的可编程宏键盘
  • 核心需求:用该键盘控制各类应用,但不干扰普通键盘的正常功能(即不使用Windows或其他应用会响应的按键)
  • 实现思路:
    1. 在设备管理器中将键盘驱动替换为通用HID设备驱动
    2. 在应用内编写自定义键盘驱动
    3. 实现所需的控制功能

初步尝试与问题

使用pywinusb操作目标设备(VENDOR_ID = 0x1189,PRODUCT_ID = 0x8890),设置device.set_raw_data_handler(devicebbound_handler(device))后,效果未达预期:

  • 媒体键可触发事件,但同时会产生Windows系统响应,不符合需求
  • 设置为A、B、C或1、2、3等普通按键时,无法触发raw_data_handler事件

推测方向

目前推测需要执行以下操作之一:
A) 手动查询按键按下状态
B) 发送特定报告以让键盘开始发送中断信号

但HID相关文档匮乏,不清楚需要发送何种报告来实现目标(已确认设备使用usagePage为12的键盘设备,该设备已存在)

当前应用代码

from pywinusb import hid
from time import sleep
from typing import Any

VENDOR_ID = 0x1189
PRODUCT_ID = 0x8890

deviceList: Any = hid.HidDeviceFilter(vendor_id=VENDOR_ID,
                                      product_id=PRODUCT_ID,).get_devices()
devices: list["hid.HidDevice"] = deviceList

def devicebbound_handler(device: hid.HidDevice):
    def sample_handler(data):
        print(device.product_name+" "+str(device.product_id))
        print(data)
    return sample_handler

def isPLugged():
    pl = False
    for device in devices:
        pl = pl | device.is_plugged()
    return pl

for device in devices:
   device.open()
   device.set_raw_data_handler(devicebbound_handler(device))

while isPLugged():
   sleep(0.01)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:06:16