我将条形码扫描仪连接到USB端口。我需要将模式从HID键盘更改为串行端口仿真(系统将读者称为常规HID设备,而不是HID系统键盘),以便将扫描仪中的数据直接导入我的应用程序。到目前为止,这一切都很有效。
问题是我需要知道VID和PID号才能找到我的设备。我知道这些值,但我希望按名称找到我的设备。
我找到了一个名为SimpleHIDWrite的程序:
当我启动程序时,我的设备有一个很好的描述“符号条形码扫描器”。
我试图通过我自己达到这个名字 - 我使用了结构:
HIDD_ATTRIBUTES HIDP_CAPS SP_DEVICE_INTERFACE_DATA SP_DEVICE_INTERFACE_DETAIL_DATA SP_DEVINFO_DATA
但是我找不到允许我访问此描述的结构字段。
不幸的是我找不到SimpleHIDWrite源代码来学习如何做到这一点。
你能帮助我吗?
答案 0 :(得分:2)
在该页面的同一部分中,有一个带源的HidTest程序。该程序显然使用通过名为“用于Delphi的HID控制器组件套件”的链接找到的HID控制器代码。也许那可以给你你想要的东西? (至少如果您可以从所有Delphi代码中选择相关部分。)
我最近一直在研究确切的事情,但我还没有时间去尝试其中任何一件事。所以下面的内容有点推测。
我相信您需要做的是打开与USB设备的连接。 HID级别的功能似乎没有给出您想要的描述。 Here是关于从USB设备获取VendorID和ProductID的另一个问题。我认为您可以使用非常类似的技术来阅读USB_DEVICE_DESCRIPTOR
,从而可以访问iProduct
字段,我认为该字段应该是您想要的描述。
我遇到了一个名为USBView的程序,显然是用USB设备进行这种通信(以及其他事情)。我找到了它的编译版本here。但是,该源应该包含在Windows驱动程序开发工具包中。这可能是C或C ++的来源,但我还没有时间从微软下载DDK并确认实际上是什么。
编辑:
我有时间深入挖掘这个问题。你发现的关于HidD_GetProductString
的内容也很有帮助。我还发现了英特尔的this page个例子。那里的“显示HID”程序显示了一种使用该功能的方法。
基于该功能的文档和该示例,我得到的印象是它从设备读取相同的iProduct
,显然是从HID级别而不是USB级别这样做。或类似的东西。我所知道的是,它到目前为止在我自己的测试程序中工作。
答案 1 :(得分:2)
我在lvr.com
论坛上找到了我的问题的答案:
答案 2 :(得分:0)
嗯...... iProduct的问题在于,首先我必须向设备发送此字符串描述设备的请求,然后重新接收数据。条形码扫描仪是只读的,因此我无法向设备发送数据(请求)。
我发现在SimpleHID中有一个我的扫描仪“符号条ocde扫描仪”的描述,它与控制面板(设备和打印机)的名称完全相同。所以我的问题是如何获得这个设备名称?