'--------------------------------------------------------------
'以下模块中
'--------------------------------------------------------------
Option ExplicitPrivate Declare Function CallNextHookEx Lib "user32" _
(ByVal hHook As Long, _
ByVal ncode As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Private 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
Private Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Private Declare Function GetKeyState Lib "user32" _
(ByVal nVirtKey As Long) As Integer
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, _
Source As Any, _
ByVal Length As Long)Private Type PKBDLLHOOKSTRUCT
VKCode As Long
scanCode As Long
flags As Long
time As Long
dwExtraInfo As Long
End TypePrivate Const WH_KEYBOARD_LL = 13
Private Const HC_ACTION = 0
Private Const WM_KEYDOWN = &H100
Private Const VK_CONTROL = &H11
Private Const VK_SHIFT = &H10
Private Const VK_MULTIPLY = &H6A
Private Const VK_ADD = &H6B
Private Const VK_SEPARATOR = &H6C
Private Const VK_SUBTRACT = &H6D
Private Const VK_DECIMAL = &H6E
Private Const VK_DIVIDE = &H6F
Private Const VK_PRIOR = &H21
Private Const VK_NEXT = &H22
Private Const VK_END = &H23
Private Const VK_HOME = &H24
Private Const VK_LEFT = &H25
Private Const VK_UP = &H26
Private Const VK_DOWN = &H28
Private Const VK_RIGHT = &H27
Private Const VK_INSERT = &H2D
Private Const VK_DELETE = &H2E
Private Const VK_F1 = &H70
Private Const VK_F12 = &H7B
Private Const VK_NUMLOCK = &H90
Private Const VK_NUMPAD0 = &H60
Private Const VK_NUMPAD9 = &H69
Private Const VK_RETURN = &HD
Private Const VK_SPACE = &H20
Private Const VK_TAB = &H9
Private Const VK_ESCAPE = &H1B
Private Const VK_BACK = &H8Private PrevHook As LongPublic Function LowLevelKeyboardProc(ByVal ncode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Dim p As PKBDLLHOOKSTRUCT
Dim strKey As String
If ncode = HC_ACTION Then
Select Case wParam
Case WM_KEYDOWN
CopyMemory p, ByVal lParam, Len(p)
If p.VKCode > 0 And p.VKCode < &H92 Then
If (GetKeyState(VK_CONTROL) And &H8000) <> 0 Then
strKey = "{Ctrl}+"
End If
If (GetKeyState(VK_SHIFT) And &H8000) <> 0 Then
strKey = strKey & "{Shift}+"
End If
Select Case p.VKCode
Case VK_MULTIPLY
strKey = strKey & "{Multiply}"
Case VK_ADD
strKey = strKey & "{Add}"
Case VK_SEPARATOR
strKey = strKey & "{Separator}"
Case VK_SUBTRACT
strKey = strKey & "{Subtract}"
Case VK_DECIMAL
strKey = strKey & "{Decimal}"
Case VK_DIVIDE
strKey = strKey & "{Divide}"
Case VK_PRIOR
strKey = strKey & "{Prior}"
Case VK_NEXT
strKey = strKey & "{Nexe}"
Case VK_END
strKey = strKey & "{End}"
Case VK_HOME
strKey = strKey & "{Home}"
Case VK_LEFT
strKey = strKey & "{Left}"
Case VK_UP
strKey = strKey & "{Up}"
Case VK_DOWN
strKey = strKey & "{Down}"
Case VK_RIGHT
strKey = strKey & "{Right}"
Case VK_INSERT
strKey = strKey & "{Insert}"
Case VK_DELETE
strKey = strKey & "{Delete}"
Case VK_BACK
strKey = strKey & "{Back}"
Case VK_F1 To VK_F12
strKey = strKey & "F" & CStr(p.VKCode - &H70)
Case VK_NUMLOCK
strKey = strKey & "{NumLock}"
Case VK_NUMPAD0 To VK_NUMPAD9
strKey = strKey & CStr(p.VKCode - &H60)
Case VK_RETURN
strKey = strKey & "{Return}"
Case VK_SPACE
strKey = strKey & "{Space}"
Case VK_TAB
strKey = strKey & "{Tab}"
Case VK_ESCAPE
strKey = strKey & "{Escape}"
Case &H30 To &H39, &H41 To &H5A
strKey = strKey & Chr(p.VKCode)
Case Else
'do nothing
End Select
Form1.Text1.Text = Form1.Text1.Text & " " & strKey
End If
Case Else
'do nothing
End Select
End If
CallNextHookEx WH_KEYBOARD_LL, ncode, wParam, lParam
End FunctionPublic Sub Hook()
PrevHook = SetWindowsHookEx(WH_KEYBOARD_LL, _
AddressOf LowLevelKeyboardProc, _
App.hInstance, _
0)
End SubPublic Sub ReleaseHook()
Call UnhookWindowsHookEx(PrevHook)
End Sub
'--------------------------------------------------------------
'以下在窗体中(窗体中放一个TextBox,MultiLine=True,ScrollBar=2)
'--------------------------------------------------------------
Private Sub Form_Load()
Call Hook
End SubPrivate Sub Form_Unload(Cancel As Integer)
Call ReleaseHook
End Sub
'以下模块中
'--------------------------------------------------------------
Option ExplicitPrivate Declare Function CallNextHookEx Lib "user32" _
(ByVal hHook As Long, _
ByVal ncode As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Private 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
Private Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Private Declare Function GetKeyState Lib "user32" _
(ByVal nVirtKey As Long) As Integer
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, _
Source As Any, _
ByVal Length As Long)Private Type PKBDLLHOOKSTRUCT
VKCode As Long
scanCode As Long
flags As Long
time As Long
dwExtraInfo As Long
End TypePrivate Const WH_KEYBOARD_LL = 13
Private Const HC_ACTION = 0
Private Const WM_KEYDOWN = &H100
Private Const VK_CONTROL = &H11
Private Const VK_SHIFT = &H10
Private Const VK_MULTIPLY = &H6A
Private Const VK_ADD = &H6B
Private Const VK_SEPARATOR = &H6C
Private Const VK_SUBTRACT = &H6D
Private Const VK_DECIMAL = &H6E
Private Const VK_DIVIDE = &H6F
Private Const VK_PRIOR = &H21
Private Const VK_NEXT = &H22
Private Const VK_END = &H23
Private Const VK_HOME = &H24
Private Const VK_LEFT = &H25
Private Const VK_UP = &H26
Private Const VK_DOWN = &H28
Private Const VK_RIGHT = &H27
Private Const VK_INSERT = &H2D
Private Const VK_DELETE = &H2E
Private Const VK_F1 = &H70
Private Const VK_F12 = &H7B
Private Const VK_NUMLOCK = &H90
Private Const VK_NUMPAD0 = &H60
Private Const VK_NUMPAD9 = &H69
Private Const VK_RETURN = &HD
Private Const VK_SPACE = &H20
Private Const VK_TAB = &H9
Private Const VK_ESCAPE = &H1B
Private Const VK_BACK = &H8Private PrevHook As LongPublic Function LowLevelKeyboardProc(ByVal ncode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Dim p As PKBDLLHOOKSTRUCT
Dim strKey As String
If ncode = HC_ACTION Then
Select Case wParam
Case WM_KEYDOWN
CopyMemory p, ByVal lParam, Len(p)
If p.VKCode > 0 And p.VKCode < &H92 Then
If (GetKeyState(VK_CONTROL) And &H8000) <> 0 Then
strKey = "{Ctrl}+"
End If
If (GetKeyState(VK_SHIFT) And &H8000) <> 0 Then
strKey = strKey & "{Shift}+"
End If
Select Case p.VKCode
Case VK_MULTIPLY
strKey = strKey & "{Multiply}"
Case VK_ADD
strKey = strKey & "{Add}"
Case VK_SEPARATOR
strKey = strKey & "{Separator}"
Case VK_SUBTRACT
strKey = strKey & "{Subtract}"
Case VK_DECIMAL
strKey = strKey & "{Decimal}"
Case VK_DIVIDE
strKey = strKey & "{Divide}"
Case VK_PRIOR
strKey = strKey & "{Prior}"
Case VK_NEXT
strKey = strKey & "{Nexe}"
Case VK_END
strKey = strKey & "{End}"
Case VK_HOME
strKey = strKey & "{Home}"
Case VK_LEFT
strKey = strKey & "{Left}"
Case VK_UP
strKey = strKey & "{Up}"
Case VK_DOWN
strKey = strKey & "{Down}"
Case VK_RIGHT
strKey = strKey & "{Right}"
Case VK_INSERT
strKey = strKey & "{Insert}"
Case VK_DELETE
strKey = strKey & "{Delete}"
Case VK_BACK
strKey = strKey & "{Back}"
Case VK_F1 To VK_F12
strKey = strKey & "F" & CStr(p.VKCode - &H70)
Case VK_NUMLOCK
strKey = strKey & "{NumLock}"
Case VK_NUMPAD0 To VK_NUMPAD9
strKey = strKey & CStr(p.VKCode - &H60)
Case VK_RETURN
strKey = strKey & "{Return}"
Case VK_SPACE
strKey = strKey & "{Space}"
Case VK_TAB
strKey = strKey & "{Tab}"
Case VK_ESCAPE
strKey = strKey & "{Escape}"
Case &H30 To &H39, &H41 To &H5A
strKey = strKey & Chr(p.VKCode)
Case Else
'do nothing
End Select
Form1.Text1.Text = Form1.Text1.Text & " " & strKey
End If
Case Else
'do nothing
End Select
End If
CallNextHookEx WH_KEYBOARD_LL, ncode, wParam, lParam
End FunctionPublic Sub Hook()
PrevHook = SetWindowsHookEx(WH_KEYBOARD_LL, _
AddressOf LowLevelKeyboardProc, _
App.hInstance, _
0)
End SubPublic Sub ReleaseHook()
Call UnhookWindowsHookEx(PrevHook)
End Sub
'--------------------------------------------------------------
'以下在窗体中(窗体中放一个TextBox,MultiLine=True,ScrollBar=2)
'--------------------------------------------------------------
Private Sub Form_Load()
Call Hook
End SubPrivate Sub Form_Unload(Cancel As Integer)
Call ReleaseHook
End Sub
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货