这个程序能检测到键盘插入
在测试几个按键后,拔插键盘或插入新键盘都会重新复位
大家研究一下
VB能不能实现这个功能找不到添加附件的地方只好放到网络硬盘了,地址:
http://u.xunzai.com/fileview_90433.html

解决方案 »

  1.   

    USB和PS2的都可以检测到
    只要拔插一下键盘
    或插入新的键盘
    前面按过的按键,都可以重新复位
      

  2.   

    估计USB的能实现,PS/2的怕是不行。
      

  3.   

    经测试,USB设备插入与拔出时,会向所有顶级窗体投放wm_devicechange消息.应该能从此消息中得到设备类型.至于PS2设备,不清楚是否支持PNP,因为我是本本,没有此接口,无法测试.测试很简单,大家硬件适合的也可以:就是打开一个SPY++(这个应该都有吧),然后拦截任意一个程序的顶级窗体的消息(我又是使用可怜的记事本..)
      

  4.   

    我用SPY++分几次拦载这个程序的窗口.以下是结果,请myjian帮忙分析一下
    每次清0再继续下一步第一次按任意键:
    <00001> 000B0438 S WM_WINDOWPOSCHANGING lpwp:0012FC90
    <00002> 000B0438 R WM_WINDOWPOSCHANGING
    <00003> 000B0438 S WM_WINDOWPOSCHANGING lpwp:0012FC90
    <00004> 000B0438 R WM_WINDOWPOSCHANGING
    <00005> 000B0438 S WM_WINDOWPOSCHANGING lpwp:0012FC90
    <00006> 000B0438 R WM_WINDOWPOSCHANGING
    <00007> 000B0438 S WM_WINDOWPOSCHANGING lpwp:0012FC90
    <00008> 000B0438 R WM_WINDOWPOSCHANGING第二次拔插PS2键盘:(注,拔的时候没有收到任何消息)
    <00001> 000B0438 S WM_WINDOWPOSCHANGING lpwp:0012FC5C
    <00002> 000B0438 R WM_WINDOWPOSCHANGING
    <00003> 000B0438 S WM_WINDOWPOSCHANGING lpwp:0012FC5C
    <00004> 000B0438 R WM_WINDOWPOSCHANGING
    ......
    <00047> 000B0438 S WM_WINDOWPOSCHANGING lpwp:0012FC5C
    <00048> 000B0438 R WM_WINDOWPOSCHANGING第三次拔插USB键盘:
    1.插入
    <00001> 000B0438 P WM_DEVICECHANGE Event:0007 dwData:00000000
    <00002> 000B0438 P WM_DEVICECHANGE Event:0007 dwData:00000000
    ......
    <00009> 000B0438 P WM_DEVICECHANGE Event:0007 dwData:00000000
    <00010> 000B0438 S WM_DEVICECHANGE Event:DBT_DEVICEARRIVAL dwData:0015A9F8
    <00011> 000B0438 S .WM_WINDOWPOSCHANGING lpwp:0012F8D0
    <00012> 000B0438 R .WM_WINDOWPOSCHANGING
    <00013> 000B0438 S .WM_WINDOWPOSCHANGING lpwp:0012F8D0
    <00014> 000B0438 R .WM_WINDOWPOSCHANGING
    ......
    <00057> 000B0438 S .WM_WINDOWPOSCHANGING lpwp:0012F8D0
    <00058> 000B0438 R .WM_WINDOWPOSCHANGING
    <00059> 000B0438 R WM_DEVICECHANGE fComplete:True
    <00060> 000B0438 P WM_DEVICECHANGE Event:0007 dwData:00000000
    <00061> 000B0438 S WM_DEVICECHANGE Event:DBT_DEVICEARRIVAL dwData:0014AA18
    <00062> 000B0438 R WM_DEVICECHANGE fComplete:True
    <00063> 000B0438 P WM_DEVICECHANGE Event:0007 dwData:00000000
    <00064> 000B0438 S WM_DEVICECHANGE Event:DBT_DEVICEARRIVAL dwData:0014AA18
    <00065> 000B0438 R WM_DEVICECHANGE fComplete:True
    <00066> 000B0438 P WM_DEVICECHANGE Event:0007 dwData:000000002拔出:
    <00067> 000B0438 P WM_DEVICECHANGE Event:0007 dwData:00000000
    <00068> 000B0438 S WM_DEVICECHANGE Event:DBT_DEVICEARRIVAL dwData:0014AA18
    <00069> 000B0438 R WM_DEVICECHANGE fComplete:True
    <00070> 000B0438 S WM_DEVICECHANGE Event:DBT_DEVICEARRIVAL dwData:0014AA18
    <00071> 000B0438 R WM_DEVICECHANGE fComplete:True
    <00072> 000B0438 P WM_DEVICECHANGE Event:0007 dwData:00000000
    <00073> 000B0438 S WM_DEVICECHANGE Event:DBT_DEVICEARRIVAL dwData:00167650
    <00074> 000B0438 R WM_DEVICECHANGE fComplete:True
    <00075> 000B0438 P WM_DEVICECHANGE Event:0007 dwData:00000000
    <00076> 000B0438 P WM_DEVICECHANGE Event:0007 dwData:00000000
    <00077> 000B0438 P WM_DEVICECHANGE Event:0007 dwData:00000000
    <00078> 000B0438 P WM_DEVICECHANGE Event:0007 dwData:00000000
      

  5.   

    你现在应该先关注"怎么样实现",再去想"能不能用VB实现".先搞清楚原理再说.如果这仅仅是SDK编程,都调用API的话,VB完不成的还不是很多.
      

  6.   

    既然你已经知道是用了钩子,那还问VB。VB不能做钩子。
    用VC吧。另外PS/2接口不支持热插拔。
    原理就是用钩子监测相应的中断。