阅读:12326回复:36
强烈建议,关于HID设备的读写
刚才浏览了一些帖子,发现很多网友都询问怎么通过应用程序来读些USB设备,而且很多人借鉴了USBPort那个例子,那个例子思想不错,但是错误太多,我建议哪位高手要是调试通过,并且能都实现读写的,把代码贴出来,省得大家问来问去,把高手们都问烦了:)
[编辑 - 12/13/03 by yux008007] [编辑 - 12/13/03 by yux008007] |
|
沙发#
发布于:2003-12-13 08:51
一来是人气没那么旺了,二来问得太多了。建议大家先搜索一下论坛,有非常多的贴子都是讨论同一件事,看完再发问。
|
|
板凳#
发布于:2003-12-13 10:41
为了不让新人走弯路,我把我的心得写出来:
读写HID设备步骤如下: 1.得到设备句柄 2.对设备进行遍历 3.找出设备的符号链接 4.readfile/writefile进行读写 借助的工具:DDK里面的USBView,如果不知道怎么编译的,用Build -d命令,用USBView可以得到设备的PID,VID,利用这两个值搜索注册表,即可直接得到第三步的符号链接跳到第四步(:mad:我可是花了两个月的时间用代码得到的,呜呜呜呜) ,然后直接读写 不知道我说得对不对,因为没有实现读写,继续研究! 附有代码,如果哪位能实现读写的,请告诉我一声:yux008@hotmail.com |
|
|
地板#
发布于:2003-12-13 14:33
多谢大哥~_~
|
|
地下室#
发布于:2003-12-30 16:32
刚才浏览了一些帖子,发现很多网友都询问怎么通过应用程序来读些USB设备,而且很多人借鉴了USBPort那个例子,那个例子思想不错,但是错误太多,我建议哪位高手要是调试通过,并且能都实现读写的,把代码贴出来,省得大家问来问去,把高手们都问烦了:) 有道理,我也曾为这个走了不少弯路。下面是我调试通过的源码。 读写比较简单,就是调用WriteFile和ReadFile这两个API函数。 不同的用户要读写的要求都不一样,所以读写这段就省略了。 |
|
|
5楼#
发布于:2003-12-30 16:54
我没有实现读写,你搞定了吗? |
|
6楼#
发布于:2003-12-30 17:10
发送报表:
假设OutputReport的长度为outLength. CHAR OutputReport[outLength]; //The first byte is the report number. OutputReport[0]=0;//这句很重要 memcpy(OutputReport+1,“报表内容”,outLength-1); WriteFile (DeviceHandle, OutputReport, Capabilities.OutputReportByteLength, &BytesWritten, NULL); 读取报表: ReadFile (ReadHandle, InputReport, Capabilities.InputReportByteLength, &NumberOfBytesRead, NULL; 然后可以用for语句逐个提取InputReport里面的字符即可。 千万千万要注意的是,要从InputReport[1]开始提取。 如果从InputReport[0]开始,将会是空白!! |
|
|
7楼#
发布于:2003-12-30 17:27
谢谢!!
|
|
8楼#
发布于:2003-12-30 17:38
发送报表: 谢谢!!! 顺便问一下,你用的什么设备?我用鼠标不行 |
|
9楼#
发布于:2003-12-30 17:51
首先你要确定的是,那只鼠标能接收报表吗?即使能,它会有反馈信息吗?
这些应该涉及到底层编程的问题。 现在讨论的HID读写是上层(即应用程序),至于发了报表后,鼠标的USB做什么动作,是由底层的程序决定的。 上层发了指令,底层对该指令进行相应的动作,返回信息,上层再接收。大致的流程应该是这样。 |
|
|
10楼#
发布于:2003-12-30 17:54
首先你要确定的是,那只鼠标能接收报表吗?即使能,它会有反馈信息吗? 看来我欠缺很多知识,你说的报表是什么? |
|
11楼#
发布于:2003-12-30 17:55
我用这个程序来读出鼠标的数据,报表和数据是一样的吧?
|
|
12楼#
发布于:2003-12-31 08:33
我不知道你要读的“数据”是指什么?
如果是厂商ID,产品ID和版本号的话,用我提供的源码就可以得到。 不需要用到读写。 报表,以我个人的理解,它就是字符串。 当然,这个字符串不是随便给的,它是对HID设备有意义的。 即设备收到这个字符串,会作出相关的反应。 举个例子:上层发出“S”,设备接收到,它就会关机。 我不知道对于鼠标,读写有什么意义。 上面纯属是个人的理解,各位DX指正。也希望自己不是在误导大家。 |
|
|
13楼#
发布于:2003-12-31 08:43
:)我要读的数据是设备和系统进行通讯的数据包,比如按下鼠标左键,鼠标应该向系统发出一个数据包表明按下了左键,可能我的思路有问题,再看看
|
|
14楼#
发布于:2004-06-28 15:40
谢谢!很好的帖子!
|
|
15楼#
发布于:2004-09-23 15:36
还有人在吗?
我访问的我的鼠标,在调用CreateFile(m_strPath,GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 是失败,谁知道是怎么回事呢? |
|
16楼#
发布于:2004-09-29 15:37
chufuxuan:
你好,我用你的USBHID程序不能找到我的U盘,用其他的程序也是一样,U盘肯定是HID设备吧,怎么会找不到呢,我用注册表里找到的连接名symbolicname中的guid可以找到我的设备,你知道这是怎么回事吗? |
|
17楼#
发布于:2004-09-29 15:42
U盘不是HID设备,键盘鼠标之类的才是HID设备
|
|
18楼#
发布于:2004-09-29 15:49
usbport这个程序也读不到我的U盘,不知道什么原因!
|
|
19楼#
发布于:2004-09-29 15:55
你用USBview试试看
|
|
上一页
下一页