cindy1999
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2005-06-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1537回复:4

USB键盘?

楼主#
更多 发布于:2003-09-28 19:26
我想将USB键盘多媒体键的功能修改,学着用DriverStudio写了个filter程序。但我搞不懂应该这么把需要的键分析出来然后替换掉。
I.ReadSize()和I.BufferedReadDest()读出来的好象并不是按下的按键数和键盘送过来的键值呀,究竟这么回事?请指教。

最新喜欢:

ddk2003ddk200...
cindy1999
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2005-06-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-09-30 17:40
我用http://www.sysinternals.com上面的Ctrl2cap Keyboard Filter试过,Ctrl2Cap确实能抓到按标准键,但我不知道它是否能抓到多媒体按键?

在Ctrl2Cap中,Irp->AssociatedIrp.SystemBuffer 返回了键盘缓冲区的地址,而Irp->IoStatus.Information 返回了整个缓冲区的大小。把Ctrl键替换成Caps Lock键,确实没问题。

但DriverStudio中的I.ReadSize()返回值为9,看起来是象USB传过来的数据数量,总共9个BYTE,第1个BYTE是ID,后面8个BYTE是USD HID键值。按理I.ReadSize()应该返回值跟Irp->IoStatus.Information是一样的,但程序走起来并不是那么回事。而I.BufferedReadDest()的返回值为0,根本没有指到相应的9个数据的缓冲区。

请帮忙分析一下?
pottern
驱动牛犊
驱动牛犊
  • 注册日期2003-10-01
  • 最后登录2004-03-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-01 23:55
一般USB键盘的多媒体键盘的键值的发送端点是ENDPOINT2,而通用标准键发送是通过ENDPOINT1发送的。其实你可以用HID法去读ENDPOINT2的数据,再作处理的。这样就不会读到标准键 盘。
cindy1999
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2005-06-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-10-03 15:44
这个问题与ENDPOINT无关。 对应不同ENDPOINT的驱动在INF文件中可指定。

请高手多多关注,多多帮忙。
cindy1999
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2005-06-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-10-08 16:58
up
游客

返回顶部