先说下项目需求:
    一个普通键盘,再集成一个键盘板,用单片机+FPGA仿照键盘协议发按键码,与计算机为USB接口或PS/2接口。计算机需要识别这些自定义键被按下,执行相应操作,并将执行结果通知键盘板的单片机。这部分硬件已实现,如果模拟基本按键码,如'A'、'B'、'c'等,都可以收到。遇到的问题有两点:(1)我目前是用键盘钩子来截获按键的,如果自定义的按键码为基本码,才能截获。若编码为多媒体按键码,如计算器、浏览器、搜索等,用USB连接则不能截获到,用PS/2接口则可以。想问下操作系统对这两种键盘的处理是否有所不同?是否用更底层的键盘驱动过滤程序可以截获?
(2)反向通信问题。根据我查的资料,无论是windows级的钩子技术,还是驱动级键盘过滤技术,都只能识别按键被按下。有没有方法能向键盘设备传递消息。操作系统肯定是可以的,PS/2协议里面,操作系统启动时有两次检测键盘过程,需要与键盘通信。问题是应用程序如何与之通信?写了这么多,不知道讲清楚没有?恳请各位大虾不吝赐教!

解决方案 »

  1.   


    1. 使用键盘过滤驱动是可以截获到按键的。
    另外不用驱动应该也能截取到,WH_KEYBOARD_LL的钩子是可以截获到多媒体按键码的。不过USB的没试过,应该也没什么问题?2.向键盘设备传递额外的数据消息,只能使用驱动了。
    Win NT内核下,要对键盘所在的端口,或者数据通道写入数据只能使用驱动。
    可以用应用程序通知驱动写入的方式。
      

  2.   

    to wangk(1)我用的是WH_KEYBOARD,马上用WH_KEYBOARD_LL试试
    (2)键盘驱动,有没有源码,或资料可以共享?
      

  3.   


    以前的公司做过一个工业USB键盘的项目(是键盘,不是键盘过滤驱动),很遗憾只能提供一点思路。
      

  4.   

    我也是用钩子,也是USB键盘,一部分多媒体可以捕获。有几个捕获不到:快进/快退/TV/录制/音乐符号的那个还有就是一个大S图标的那个键。不知楼主的问题解决没有?可否告诉我你的解决方法?   谢谢 
      

  5.   

    我也是用全局钩子,也是USB键盘,一部分多媒体可以捕获。有几个捕获不到:快进/快退/TV/录制/音乐符号的那个还有就是一个大S图标的那个键。不知楼主的问题解决没有?可否告诉我你的解决方法? 谢谢