多键鼠标的编程问题

temp_acc 2009-09-09 12:03:04
各位dx,
小生手上有一个5键的鼠标,厂商提供了定义按键的软件,我通过spy++观看这个软件的进程消息,
可以看到msg:0x466 和lParam,wParam的数值的消息,
值得注意的是,在该软件以外的进程中捕捉不到任何消息。

现在我想自己写一个软件来定义各个按键的功能,觉得应该用钩子实现,可是问题来了:
因为鼠标钩子里面没有定义非标准的按键,用WH_CBT等钩子又捕捉不到该鼠标按键被按下的消息,实在想不通该用什么方法实现。
奇怪的是,追查鼠标自带的软件,可以看到他注册了一个WH_CBT的钩子,为什么我却捕捉不到任何按键事件呢。。。

还请各位出手相助,深表感谢!
...全文
193 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
temp_acc 2009-09-11
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 qq539929779 的回复:]
从驱动层去想吧?不可能用HOOK达到目标的!

从驱动层去想吧?不可能用HOOK达到目标的!

从驱动层去想吧?不可能用HOOK达到目标的!

从驱动层去想吧?不可能用HOOK达到目标的!

从驱动层去想吧?不可能用HOOK达到目标的!

从驱动层去想吧?不可能用HOOK达到目标的!

从驱动层去想吧?不可能用HOOK达到目标的!

从驱动层去想吧?不可能用HOOK达到目标的!


[/Quote]
谢谢,这款鼠标自带的软件只有几个dll,好像没有安装驱动。。。
不置可否指点一二?
qq539929779 2009-09-11
  • 打赏
  • 举报
回复
从驱动层去想吧?不可能用HOOK达到目标的!

从驱动层去想吧?不可能用HOOK达到目标的!

从驱动层去想吧?不可能用HOOK达到目标的!

从驱动层去想吧?不可能用HOOK达到目标的!

从驱动层去想吧?不可能用HOOK达到目标的!

从驱动层去想吧?不可能用HOOK达到目标的!

从驱动层去想吧?不可能用HOOK达到目标的!

从驱动层去想吧?不可能用HOOK达到目标的!

aopha 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 thy38 的回复:]
按一下鼠标,看看它的键值是什么不就可以了。
我手头的联想品牌机的键盘,驱动没用,我就自己捕获了四个多媒体键的值,然后写了个钩子,现在这几个键用来增大音量什么的。

查看键值我用的是《MFC程序设计》里面的一个小例子来看的,《Windows程序设计》里面也有相应的程序。
[/Quote]

g15896894 2009-09-10
  • 打赏
  • 举报
回复
找软件商问问吧,windows消息处理中假如没有这类消息,处理起来会很麻烦的,windows本来就是基于消息的.
temp_acc 2009-09-10
  • 打赏
  • 举报
回复
更新:
上面说的方法只是访问HID设备的方法,有些HID设备,比如鼠标和键盘,windows限制对其的访问,所以得到的CreateFile的句柄总是无效。
我现在面临的设备不是HID设备,而是HID设备上层的一个复合设备,用usb hound可以看到设备路径的开头不同,HID的话是 \hid\...., usb控制器是 \usb\...,
不知哪位高人知道获取普通USB设备路径的方法?
temp_acc 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 thy38 的回复:]
按一下鼠标,看看它的键值是什么不就可以了。
我手头的联想品牌机的键盘,驱动没用,我就自己捕获了四个多媒体键的值,然后写了个钩子,现在这几个键用来增大音量什么的。

查看键值我用的是《MFC程序设计》里面的一个小例子来看的,《Windows程序设计》里面也有相应的程序。
[/Quote]
请问怎么看键值?我用鼠标钩子,左右键,中键滚轮可以捕捉到,非标准键捕捉不到任何信息啊?
谢谢
mikespook 2009-09-09
  • 打赏
  • 举报
回复
这个鼠标需要安装特殊的鼠标驱动么?
whg01 2009-09-09
  • 打赏
  • 举报
回复
把厂商的钩子先卸掉试试。
razjjys 2009-09-09
  • 打赏
  • 举报
回复
其实我不了解,我只是一个帮顶的
zhongchengli 2009-09-09
  • 打赏
  • 举报
回复
bang ding
thy38 2009-09-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 rinami 的回复:]
引用 7 楼 thy38 的回复:
按一下鼠标,看看它的键值是什么不就可以了。
我手头的联想品牌机的键盘,驱动没用,我就自己捕获了四个多媒体键的值,然后写了个钩子,现在这几个键用来增大音量什么的。

查看键值我用的是《MFC程序设计》里面的一个小例子来看的,《Windows程序设计》里面也有相应的程序。

关键是windows不把他当做鼠标, 用鼠标钩子和其他的钩子都捕捉不到任何消息。
个人认为还是要通过一个监听线程读取HID设备,根据其返回的数值来做出反应。
用USB hound可以捕捉到该设备的信息。
问题是我用ReadFile读取hid的路径,什么都读不到。。。
还需要研究下。
[/Quote]

这种设备没有手册怎么做,前阵子一个人叫我做个地磅管理软件,没有地磅监视器的驱动说明可咋整。
whg01 2009-09-09
  • 打赏
  • 举报
回复
非标准设备果然千奇百怪。没有手册吗?
temp_acc 2009-09-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 thy38 的回复:]
按一下鼠标,看看它的键值是什么不就可以了。
我手头的联想品牌机的键盘,驱动没用,我就自己捕获了四个多媒体键的值,然后写了个钩子,现在这几个键用来增大音量什么的。

查看键值我用的是《MFC程序设计》里面的一个小例子来看的,《Windows程序设计》里面也有相应的程序。
[/Quote]
关键是windows不把他当做鼠标, 用鼠标钩子和其他的钩子都捕捉不到任何消息。
个人认为还是要通过一个监听线程读取HID设备,根据其返回的数值来做出反应。
用USB hound可以捕捉到该设备的信息。
问题是我用ReadFile读取hid的路径,什么都读不到。。。
还需要研究下。
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wesleyluo 的回复:]
这个不错,我也来顶下,下次自己写个,把我笔记本的几个键用起来。
[/Quote]
wesleyluo 2009-09-09
  • 打赏
  • 举报
回复
这个不错,我也来顶下,下次自己写个,把我笔记本的几个键用起来。
superbtl 2009-09-09
  • 打赏
  • 举报
回复
这个要是不能找到鼠标触发的消息就做不了相应处理。
用过的很多控件是能响应的。
thy38 2009-09-09
  • 打赏
  • 举报
回复
按一下鼠标,看看它的键值是什么不就可以了。
我手头的联想品牌机的键盘,驱动没用,我就自己捕获了四个多媒体键的值,然后写了个钩子,现在这几个键用来增大音量什么的。

查看键值我用的是《MFC程序设计》里面的一个小例子来看的,《Windows程序设计》里面也有相应的程序。
qqiuzaihui 2009-09-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 razjjys 的回复:]
其实我不了解,我只是一个帮顶的
[/Quote]
.
temp_acc 2009-09-09
  • 打赏
  • 举报
回复
多谢各位的回复,看来需要用HID读取鼠标按键发出的数据,并据此注册消息。。。
哪位如果有例子麻烦共享一下,谢谢!

64,439

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧