阅读:2276回复:8
如何获得USB键盘的输入
那位高手指点以下:
我现在已经获得了USB键盘的所有描述符信息,具体如下: Host Controller \\.\HCD0 found. System name is {36FC9E60-C465-11CF-8056-444553540000}\0004 Port[2] = I/O device connected Device Descriptor bLength 12 bDescriptorType 01 bcdUSB 0110 bDeviceClass 00 bDeviceSubClass 00 bDeviceProtocol 00 bMaxEP0Size 08 wVendorID 413c wProductID 2003 wDeviceID 0301 iManufacturer 01 = Dell iProduct 02 = Dell USB Keyboard iSerialNumber 00 bNumConfigurations 01 Configuration Descriptor bLength 09 bDescriptorType 02 = Configuration Header wTotalLength 0022 bNumInterfaces 01 bConfigValue 01 iConfiguration 00 bmAttributes a0 bMaxPower 23 = 70 mA bLength 09 bDescriptorType 04 = Interface Descriptor bInterfaceNum 00 bAlternateSetting 00 bNumEndpoints 01 bInterfaceClass 03 = Human Interface bSubClass 01 bProtocol 01 iInterface 00 bLength 09 bDescriptorType 21 = HID Descriptor wHIDversion 0110 bCountryCode 00 bHIDDescriptorCount 01 bHIDReportType 22 wHIDReportLength 0041 bLength 07 bDescriptorType 05 = Endpoint Descriptor bEndpointAddress 81 bmAttributes 03 wMaxPacketSize 0008 bInterval 18 另外还知道 RootHubName : \\.\USB#ROOT_HUB#4&4fc3f26&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8} 现在我用 CreateFile 生成RootHubHandle: RootHubHandle = CreateFile(RootHubName, GENERIC_WRITE|GENERIC_READ, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); 但问题是:无法用 ReadFile( RootHubHandle , InputReport, nInputReportLen, &TxdBytes, NULL) 读取键盘输入。 |
|
沙发#
发布于:2007-09-27 16:24
引用第7楼AllenZh于2007-09-27 15:41发表的 : AllenZh能说得具体些吗?如何解决设备独占的问题. |
|
|
板凳#
发布于:2007-09-27 15:41
USB键盘当然可以打开并得到数据,当然写Filter也可以
|
|
|
地板#
发布于:2007-09-27 11:12
引用第2楼do1st于2007-09-24 15:47发表的 : 共勉哈 我原来做的是一个HID 鼠标,所以按照一般的CreateFile是不能获得它的句柄的,更不用说读写。 后来搞了一个USB的游戏手柄了,就可以得到它的句柄了。 反正我最终是要给我的设备送数据,我准备修改Firmware,改成Gamepad类型的设备好了。现在正在研究写应用程序。 我知道USBView的代码中是是从EnumerateHostController开始,然后EnumerateHub,最后EnumerateHubPort来得到设备句柄的,感觉这种方式比较好。现在要赶时间往下做,以后再来看这种方法。你给的代码比USBView的要清晰些,谢谢。 有空加我邮件allanzhou9527@126.com。共同学习哈。 |
|
地下室#
发布于:2007-09-26 23:48
不用谢, 能明白就好.
|
|
|
5楼#
发布于:2007-09-26 16:57
引用第3楼lejianz于2007-09-25 09:14发表的 : 谢谢,否则我可能在错误的道路上越走越远。 |
|
6楼#
发布于:2007-09-25 09:14
键盘是系统独占设备, 你是不能用ReadFile来读取数据.如果想得到键盘数据, 得想其它办法.如写过滤驱动.
|
|
|
7楼#
发布于:2007-09-24 15:47
To allanzhou9527 :
已经获得正确的句柄,这个已经没有问题了。 我先后获得了 HOST Controller,RootHub,Port(Port上就是连接我的USB键盘)。参考USBView,可见我已经获得了全部的信息。但我的问题是我不知道如何使用ReadFile获取键盘输入。 至于CreateFile的句柄问题你可以参考以下这个 http://download.intel.com/intelpress/usb/Examples/ZipFiles/DUSBVC.zip 共勉 |
|
8楼#
发布于:2007-09-24 14:36
先看看用CreateFile是否返回了正确的设备Handle,如果没有用GetLastError()看看错误代码是什么?
帮顶一下吧 我的问题是CreateFile返回的是无效Handle,唉。3天了,还是没有解决。 |
|