查了一下win32键盘是从驱动程序到原始线程再到当前焦点线程,使用BlockInput确实能截断从驱动程序到原始线程的通路
而DirectInput也用BlockInput试了一下,发现不能截断,那么DirectInput应该是直接从驱动程序获得数据的了
现在的问题是keybd_event到底是怎么回事,它是向驱动程序发的呢,还是向原始线程发的呢,还是其它的什么?
我在98下试,发现DirectInput无法获得keybd_event的数据
但在XP下试,却发现DirectInput能收到keybd_event的数据
这是怎么回事,是我的98有问题,还是keybd_event在不同操作系统下确实有不同的表现
哪位系统也是98的能否也帮我试试,我用的DirectInput程序是DX8.1SDK中的例程

解决方案 »

  1.   

    真是令人头疼啊,没人回答呢
    真是的,大家好歹帮忙先看看是不是有这个问题嘛我的进展如下:
    用softice跟踪入keybd_event发现:呵呵,看不懂
    但跟踪入SendInput发现:最后殊途同归,都调用了KEYBD_EVENT(大写的)不过我做了个VXD程序,调用键盘的VXD服务VKD_Force_Keys,发现这样在我的98上能够使DirectInput获得数据
    那么至少能够判断出keybd_event在我的98上确实不是简单的向驱动程序发送键盘数据了,应该是更上一层了,比如模拟驱动程序向原始线程发数据,或者是有其它的限制发送吧