yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:12326回复:36

强烈建议,关于HID设备的读写

楼主#
更多 发布于:2003-12-12 21:43
刚才浏览了一些帖子,发现很多网友都询问怎么通过应用程序来读些USB设备,而且很多人借鉴了USBPort那个例子,那个例子思想不错,但是错误太多,我建议哪位高手要是调试通过,并且能都实现读写的,把代码贴出来,省得大家问来问去,把高手们都问烦了:)

[编辑 -  12/13/03 by  yux008007]

[编辑 -  12/13/03 by  yux008007]

最新喜欢:

crazyggcrazyg... chinaleichinal...
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-13 08:51
一来是人气没那么旺了,二来问得太多了。建议大家先搜索一下论坛,有非常多的贴子都是讨论同一件事,看完再发问。
yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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_USBHID.rar (31KB)  529
y5318
驱动中牛
驱动中牛
  • 注册日期2001-09-18
  • 最后登录2018-05-29
  • 粉丝1
  • 关注0
  • 积分14分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-12-13 14:33
多谢大哥~_~
simenmc
驱动牛犊
驱动牛犊
  • 注册日期2003-12-17
  • 最后登录2004-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-30 16:32
刚才浏览了一些帖子,发现很多网友都询问怎么通过应用程序来读些USB设备,而且很多人借鉴了USBPort那个例子,那个例子思想不错,但是错误太多,我建议哪位高手要是调试通过,并且能都实现读写的,把代码贴出来,省得大家问来问去,把高手们都问烦了:)


有道理,我也曾为这个走了不少弯路。下面是我调试通过的源码。
读写比较简单,就是调用WriteFile和ReadFile这两个API函数。
不同的用户要读写的要求都不一样,所以读写这段就省略了。
附件名称/大小 下载次数 最后更新
2003-12-30_USBPort.rar (49KB)  434
程序是冷的,人是热的
yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-30 16:54

读写比较简单,就是调用WriteFile和ReadFile这两个API函数。
不同的用户要读写的要求都不一样,所以读写这段就省略了。

我没有实现读写,你搞定了吗?
simenmc
驱动牛犊
驱动牛犊
  • 注册日期2003-12-17
  • 最后登录2004-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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]开始,将会是空白!!
程序是冷的,人是热的
dongda
驱动牛犊
驱动牛犊
  • 注册日期2003-12-30
  • 最后登录2004-02-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-12-30 17:27
谢谢!!
yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-12-30 17:38
发送报表:
假设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]开始,将会是空白!!
 

谢谢!!!
顺便问一下,你用的什么设备?我用鼠标不行
simenmc
驱动牛犊
驱动牛犊
  • 注册日期2003-12-17
  • 最后登录2004-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-12-30 17:51
首先你要确定的是,那只鼠标能接收报表吗?即使能,它会有反馈信息吗?
这些应该涉及到底层编程的问题。
现在讨论的HID读写是上层(即应用程序),至于发了报表后,鼠标的USB做什么动作,是由底层的程序决定的。
上层发了指令,底层对该指令进行相应的动作,返回信息,上层再接收。大致的流程应该是这样。
程序是冷的,人是热的
yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-12-30 17:54
首先你要确定的是,那只鼠标能接收报表吗?即使能,它会有反馈信息吗?
这些应该涉及到底层编程的问题。
现在讨论的HID读写是上层(即应用程序),至于发了报表后,鼠标的USB做什么动作,是由底层的程序决定的。
上层发了指令,底层对该指令进行相应的动作,返回信息,上层再接收。大致的流程应该是这样。

看来我欠缺很多知识,你说的报表是什么?
yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-12-30 17:55
我用这个程序来读出鼠标的数据,报表和数据是一样的吧?
simenmc
驱动牛犊
驱动牛犊
  • 注册日期2003-12-17
  • 最后登录2004-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-12-31 08:33
我不知道你要读的“数据”是指什么?
如果是厂商ID,产品ID和版本号的话,用我提供的源码就可以得到。
不需要用到读写。

报表,以我个人的理解,它就是字符串。
当然,这个字符串不是随便给的,它是对HID设备有意义的。
即设备收到这个字符串,会作出相关的反应。
举个例子:上层发出“S”,设备接收到,它就会关机。
我不知道对于鼠标,读写有什么意义。

上面纯属是个人的理解,各位DX指正。也希望自己不是在误导大家。
程序是冷的,人是热的
yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-12-31 08:43
 :)我要读的数据是设备和系统进行通讯的数据包,比如按下鼠标左键,鼠标应该向系统发出一个数据包表明按下了左键,可能我的思路有问题,再看看
lujunql
驱动小牛
驱动小牛
  • 注册日期2004-06-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-06-28 15:40
谢谢!很好的帖子!
chufuxuan
驱动牛犊
驱动牛犊
  • 注册日期2003-01-09
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-09-23 15:36
还有人在吗?
我访问的我的鼠标,在调用CreateFile(m_strPath,GENERIC_READ | GENERIC_WRITE,
0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
是失败,谁知道是怎么回事呢?
zxwitsme
驱动牛犊
驱动牛犊
  • 注册日期2004-08-23
  • 最后登录2006-04-20
  • 粉丝0
  • 关注0
  • 积分68分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-09-29 15:37
chufuxuan:
你好,我用你的USBHID程序不能找到我的U盘,用其他的程序也是一样,U盘肯定是HID设备吧,怎么会找不到呢,我用注册表里找到的连接名symbolicname中的guid可以找到我的设备,你知道这是怎么回事吗?
chufuxuan
驱动牛犊
驱动牛犊
  • 注册日期2003-01-09
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-09-29 15:42
U盘不是HID设备,键盘鼠标之类的才是HID设备
zxwitsme
驱动牛犊
驱动牛犊
  • 注册日期2004-08-23
  • 最后登录2006-04-20
  • 粉丝0
  • 关注0
  • 积分68分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-09-29 15:49
usbport这个程序也读不到我的U盘,不知道什么原因!
 
chufuxuan
驱动牛犊
驱动牛犊
  • 注册日期2003-01-09
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-09-29 15:55
你用USBview试试看
上一页
游客

返回顶部