在测试几个按键后,拔插键盘或插入新键盘都会重新复位
大家研究一下
VB能不能实现这个功能
找不到添加附件的地方只好放到网络硬盘了,地址:
http://u.xunzai.com/fileview_90433.html
13 个解决方案
#1
拔插键盘或插入新键盘----啥意思?
#2
LZ的键盘是USB的还是PS/2的?
#3
USB和PS2的都可以检测到
只要拔插一下键盘
或插入新的键盘
前面按过的按键,都可以重新复位
只要拔插一下键盘
或插入新的键盘
前面按过的按键,都可以重新复位
#4
高手快来指点一下呀
#5
大侠们快来看看
#6
估计USB的能实现,PS/2的怕是不行。
#7
经测试,USB设备插入与拔出时,会向所有*窗体投放wm_devicechange消息.
应该能从此消息中得到设备类型.
至于PS2设备,不清楚是否支持PNP,因为我是本本,没有此接口,无法测试.
测试很简单,大家硬件适合的也可以:
就是打开一个SPY++(这个应该都有吧),然后拦截任意一个程序的*窗体的消息(我又是使用可怜的记事本..)
应该能从此消息中得到设备类型.
至于PS2设备,不清楚是否支持PNP,因为我是本本,没有此接口,无法测试.
测试很简单,大家硬件适合的也可以:
就是打开一个SPY++(这个应该都有吧),然后拦截任意一个程序的*窗体的消息(我又是使用可怜的记事本..)
#8
我用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:00000000
2拔出:
<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
每次清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:00000000
2拔出:
<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
#9
大家可以试一下
别人已经实现了这一功能
问题是我们用VB能不能实现
别人已经实现了这一功能
问题是我们用VB能不能实现
#10
你现在应该先关注"怎么样实现",再去想"能不能用VB实现".
先搞清楚原理再说.
如果这仅仅是SDK编程,都调用API的话,VB完不成的还不是很多.
先搞清楚原理再说.
如果这仅仅是SDK编程,都调用API的话,VB完不成的还不是很多.
#11
别人已经实现了这个功能。
现在就是搞不清楚原理,所以我没办法实现这个功能。
再加上现在捕捉到的消息也不全
因为程序加入了钩子,已经把一些消息吃掉了。
没什么头绪了
现在就是搞不清楚原理,所以我没办法实现这个功能。
再加上现在捕捉到的消息也不全
因为程序加入了钩子,已经把一些消息吃掉了。
没什么头绪了
#12
顶一下
#13
既然你已经知道是用了钩子,那还问VB。VB不能做钩子。
用VC吧。另外PS/2接口不支持热插拔。
原理就是用钩子监测相应的中断。
用VC吧。另外PS/2接口不支持热插拔。
原理就是用钩子监测相应的中断。
#1
拔插键盘或插入新键盘----啥意思?
#2
LZ的键盘是USB的还是PS/2的?
#3
USB和PS2的都可以检测到
只要拔插一下键盘
或插入新的键盘
前面按过的按键,都可以重新复位
只要拔插一下键盘
或插入新的键盘
前面按过的按键,都可以重新复位
#4
高手快来指点一下呀
#5
大侠们快来看看
#6
估计USB的能实现,PS/2的怕是不行。
#7
经测试,USB设备插入与拔出时,会向所有*窗体投放wm_devicechange消息.
应该能从此消息中得到设备类型.
至于PS2设备,不清楚是否支持PNP,因为我是本本,没有此接口,无法测试.
测试很简单,大家硬件适合的也可以:
就是打开一个SPY++(这个应该都有吧),然后拦截任意一个程序的*窗体的消息(我又是使用可怜的记事本..)
应该能从此消息中得到设备类型.
至于PS2设备,不清楚是否支持PNP,因为我是本本,没有此接口,无法测试.
测试很简单,大家硬件适合的也可以:
就是打开一个SPY++(这个应该都有吧),然后拦截任意一个程序的*窗体的消息(我又是使用可怜的记事本..)
#8
我用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:00000000
2拔出:
<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
每次清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:00000000
2拔出:
<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
#9
大家可以试一下
别人已经实现了这一功能
问题是我们用VB能不能实现
别人已经实现了这一功能
问题是我们用VB能不能实现
#10
你现在应该先关注"怎么样实现",再去想"能不能用VB实现".
先搞清楚原理再说.
如果这仅仅是SDK编程,都调用API的话,VB完不成的还不是很多.
先搞清楚原理再说.
如果这仅仅是SDK编程,都调用API的话,VB完不成的还不是很多.
#11
别人已经实现了这个功能。
现在就是搞不清楚原理,所以我没办法实现这个功能。
再加上现在捕捉到的消息也不全
因为程序加入了钩子,已经把一些消息吃掉了。
没什么头绪了
现在就是搞不清楚原理,所以我没办法实现这个功能。
再加上现在捕捉到的消息也不全
因为程序加入了钩子,已经把一些消息吃掉了。
没什么头绪了
#12
顶一下
#13
既然你已经知道是用了钩子,那还问VB。VB不能做钩子。
用VC吧。另外PS/2接口不支持热插拔。
原理就是用钩子监测相应的中断。
用VC吧。另外PS/2接口不支持热插拔。
原理就是用钩子监测相应的中断。