将自定义宏键盘用作应用控制器的技术实现问题
自定义HID宏键盘控制问题
设备与需求
- 购入一款12键(含2个旋转拨杆)的可编程宏键盘
- 核心需求:用该键盘控制各类应用,但不干扰普通键盘的正常功能(即不使用Windows或其他应用会响应的按键)
- 实现思路:
- 在设备管理器中将键盘驱动替换为通用HID设备驱动
- 在应用内编写自定义键盘驱动
- 实现所需的控制功能
初步尝试与问题
使用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
相关产品推荐
相关产品推荐

