注册 登录
编程论坛 VB6论坛

请问VB怎么判断物理按键的状态

hqb2015ok 发布于 2015-04-16 10:41, 707 次点击
请问VB怎么判断物理按键的状态 虚拟按键不判断
5 回复
#2
lianyicq2015-04-16 10:47
vb有keydown、keypress keyup事件。
也可以了解API
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
#3
hqb2015ok2015-04-17 14:02
这个API是判断虚拟码
#4
lianyicq2015-04-17 15:05
回复 3楼 hqb2015ok
你可以自己试试
GetAsyncKeyState 不响应虚拟键盘的按键
#5
hqb2015ok2015-04-17 16:34
这个虚拟 我是指用模拟按键软件按的键  比如按键精灵之类的  我试过了 用他模拟按下去一个键 GetAsyncKeyState  也会判断是按下的状态
#6
lianyicq2015-04-18 09:55
回复 5楼 hqb2015ok
我没用按键精灵,只用了XP自带的虚拟键盘测试GetAsyncKeyState,程序只对硬键盘响应。估计不乐观。

按键精灵利用keybd_event模拟键盘消息,如果扫描码是零。你可以检测
struct tagKBDLLHOOKSTRUCT {
  DWORD     vkCode;
  DWORD     scanCode;
  DWORD     flags;
  DWORD     time;
  ULONG_PTR dwExtraInfo;
} KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT, *LPKBDLLHOOKSTRUCT;
中的scancode来判断是否是按键精灵发出的消息。


Raw Input API绝对是根本解决方案,参见https://msdn.(v=vs.85).aspx
这个应该花时间琢磨琢磨。
周一有时间可以帮你试试。
...
用Raw Input试了按键精灵9,无效。这个按键精灵根本不是发WM_KEYDONW/UP来模拟按键。RAW INPUT的接收的WM_INPUT消息也无法屏蔽掉按键精灵。刚看到http://www. 模拟程序可以向更底层的向端口写数据。我这儿是无解了。要不针对商业应用开发出来的保护机制就不值价了。

[ 本帖最后由 lianyicq 于 2015-4-21 16:18 编辑 ]
1