我有一个使用CreateFile()API读取/写入USB设备的库.该设备恰好实现了HID设备配置文件,因此它与Microsoft的HID类驱动程序兼容.
系统上安装的其他一些应用程序是以读/写模式打开设备,没有共享模式.这会阻止我的库(以及消耗它的任何东西)使用该设备.我认为这是与HID兼容的设备 - 其他驱动程序软件(鼠标,控制器,PHIDGETS等)可能不合作.
无论如何,设备文件路径的形式如下:
1: "\\?\hid#hpqremhiddevice&col01#5&21ff20e7&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}".
2: "\\?\hid#vid_045e&pid_0023#7&34aa9ece&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}".
3: "\?\hid#vid_056a&pid_00b0&col01#6&5b05f29&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}".
我正在尝试使用代码打开它,例如:
// First, open it with minimum permissions, this device may not be ours.
// we'll re-open it later in read/write
hid_device_ref = CreateFile(
device_path, GENERIC_READ,
0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
Run Code Online (Sandbox Code Playgroud)
我已经考虑过像SysInternals这样的工具,如FileMon或Process Monitor.但我似乎无法报告上面列出的设备文件句柄的使用情况.
我正在尝试为Mac OS 创建一个虚拟蓝牙键盘客户端.这意味着我的Mac将作为BT KB.我在OS X中看到了蓝牙API(在ObjC中),我还发现了一个用于Mac的HID API(在C中)
为了完成这项工作,我理解我需要声明一个应该在SDP查询上广播的hid-keyboard-service.
谢谢...!
我想在第二个键盘上过滤键盘输入,并防止第二个键盘的键事件到达操作系统(自己处理).如何才能做到这一点?
我正在尝试连接到USB数字刻度,代码确实连接到刻度scale.IsConnected,但是挂起scale.Read(250)250应该是超时(以毫秒为单位)但它永远不会从Read返回
我正在使用此线程中的代码,除了由于新版本的Mike O Brien的HID库而导致的一个更改
public HidDevice[] GetDevices ()
{
HidDevice[] hidDeviceList;
// Metler Toledo
hidDeviceList = HidDevices.Enumerate(0x0eb8).ToArray();
if (hidDeviceList.Length > 0)
return hidDeviceList;
return hidDeviceList;
}
Run Code Online (Sandbox Code Playgroud)
我设法规模的工作,看看小李的答案在这里
我正在将游戏从PC移植到osx,而我却陷入了输入事件的困境.主游戏窗口是一个与C++后端接口的可可应用程序.pc代码使用DirectInput和Windows消息来生成游戏理解的键盘和鼠标事件.
当我第一次启动端口时,我用碳事件处理替换了Windows消息,但是因为发现Cocoa应用程序不会触发碳事件.我做了一些阅读并发现了HIDManager似乎做了我想要的,可以从c ++访问.使用此处帖子中的信息使用IOHIDManager获取修改键事件我设法使键盘输入工作,但到目前为止还无法扩展示例代码以生成鼠标事件.代码如下:
void myHIDCallback(void* context, IOReturn result, void* sender, IOHIDValueRef value)
{
IOHIDElementRef elem = IOHIDValueGetElement(value);
if (IOHIDElementGetUsagePage(elem) == 0x07)
{
// Keyboard events
card32 scancode = IOHIDElementGetUsage(elem);
if (scancode >= 4 && scancode <= 231)
{
long pressed = IOHIDValueGetIntegerValue(value);
KEY_EVENT_DETAILS details = { KEY_EVENT_NONE, NUM_KEYS };
for (card32 n=0; n<NUM_KEYS; ++n)
{
if (n_direct_input_mappings[n].direct_input_key == scancode)
{
details.key_type = n_direct_input_mappings[n].key;
break;
}
}
switch (pressed)
{
case 0:
details.event_type = KEY_EVENT_KEY_DOWN;
break;
case 1:
details.event_type …Run Code Online (Sandbox Code Playgroud) 我试图创建一个实现HID服务的简单"Hello World"应用程序(即我的应用程序充当简单的HID按钮).
但是,在尝试此操作时,我The specified UUID is not allowed for this operation将服务添加到我的CBPeripheralManager实例后收到错误.添加任何"通用"(随机UUID)服务,以及心率监视器等其他内置工作正常,但我特别对HID服务感到好奇.
我找到了这个线程,表明对HID的支持已经改变了(但这似乎是在中心方面,这更有意义,因为iOS7本身支持HID).
该文件没有提到任何服务应该是不支持的.可能是Apple在iOS7中删除了HID外设支持吗?如果是这样,这是在某处记录的吗?
我想知道是否有任何方法可以让应用程序访问并在较新的耳机上收听Apple Earbud的Clicker控件,就像应用程序可以收听IR Receiver的自定义Apple Remote功能一样.我知道iTunes具有这种能力(更确切地说是iTunes Helper),因为当我双击播放/暂停点击器时iTunes会打开.我已经考虑过尝试从HID/IOServices访问点击器,但目前无法找到答案,如果有人能够阐明这个主题,我将不胜感激.
有多种方法可以检索HID设备的Windows"设备名称",GetRawInputDeviceInfo使用RIDI_DEVICENAME作为一种方法.
给出示例名称:
\?\ HID#VID_FEEDPID_DEAD 6 3559c8ea&0 {378de44c-56ef-11D1-bc8c-00a0c91405dd}
我想知道这个字符串中的内容是否有任何文档?
\?\ HID#VID_AAAAPID_BBBB C&DDDDDD&EFFFF {GUID}
所以显而易见的是A(VID),B(PID)和最后的GUID.我想知道的是C,D,E和F究竟是什么?
看起来C和D是独一无二的,即使你插入了两个完全相同的HID设备,这对我的问题很有帮助,但如果我能确切地知道在每个操作系统的基础上如何确定它,我会感觉更舒服,或者至少它遵循一些已知的格式.
我一直在谷歌搜索疯狂试图解决这个问题,我错过了一些明显的东西吗?
提前致谢
我正在设计一个具有特殊功能的USB键盘.这样的HID设备可以从主机接收哪些信息?
我可以通过USB:
谢谢!
我编写了一个python脚本,用于轮询evdev以获取HID条形码扫描器(模拟键盘):该脚本在Linux平台(Ubuntu)上运行良好.是否存在与evdev等效的OS X Python,它允许对现有python脚本进行轻微移植?
如果您具有Python经验并已针对HID设备输入进行了配置,请在响应中指明.