求助HOOK键盘ISSUE
下面的程序纪录按键时为什么把同样的按键纪录两次?例如:我按a键,Key.txt中纪录的内容为
65,"1E0001",#2006-11-24#,#1899-12-30 09:42:18#
65,"1E0001",#2006-11-24#,#1899-12-30 09:42:18#
怎样改动才能只记录一次??
谢谢大家
Public Function MyKBHook(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If nCode >= 0 Then
If (lParam And &HC0000000) = 0 Then '只接收KEYDOWN发送的消息
Open "C:\Key.txt" For Append As #1 '将键盘的操作记录在文件之中
'记录所操作的键、操作时间、日期操作时的按键状态,用16进制记录
Write #1, wParam, Hex(lParam), Date, Time
Close #1
End If
'i = i + 1
'屏蔽ALT+F4组合键
If wParam = 115 And (lParam And &H20000000) <> 0 Then
MyKBHook = 1 '钩子吃掉这个消息
Else
MyKBHook = 0 '表示要处理这个消息
End If
End If
Call CallNextHookEx(hHook, nCode, wParam, lParam) '将消息传给下一个钩子
End Function
Ps:
lParam与WM_KEYDOWN同,占四个字节,其包括的内容较多,其二进制结构如下:
0 | 1 | …… | 15 | 16 | ……… | 23 | 24 | 25 | …… | 28 | 29 | 30 | 31 |
0-15位(Key repeat count),键码重复次数。16-23位(Scan code),按键的扫描码。24位(Extended_Key flag),扩展键(功能键、数字小键盘上的键)标志,为1则是扩展键,否则为0。25-28位被保留。29位(Context Code),状态描述码,ALT键被按下则为1,否则为0。30位(Previouskey_stateflag)指定先前的键状态,如果消息被发出之前键处于按下状态,则为1;键处于释放状态则为0。31位(Transiton_stateflag)状态转换标志,如果键是被按下值为1,如果键被放开值为0。