保存到文件部份自己写吧,不能太懒了哦 以下是FORM部份代码:在Form上放Label1、Label2、Label3、List1 所有键盘按键的ASCII码放在List1中了 Option ExplicitPrivate Sub Form_Load() Dim kbdState As KeyboardBytes
Call GetKeyboardState(kbdState)
With Label1 .Caption = "Numlock亮" .Alignment = vbRightJustify End With
With Label2 .Caption = "Caps lock亮" .Alignment = vbRightJustify End With
With Label3 .Caption = "Scroll lock亮" .Alignment = vbRightJustify End With
End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) If m_hDllKbdHook <> 0 Then Call UnhookWindowsHookEx(m_hDllKbdHook)
End Sub '以下代码放在标准模块中 Option ExplicitPublic m_hDllKbdHook As Long Public Const WH_KEYBOARD_LL As Long = 13 Private Const HC_ACTION As Long = 0 Public Const VK_CAPITAL As Long = &H14 Public Const VK_NUMLOCK As Long = &H90 Public Const VK_SCROLL As Long = &H91 Private Const LLKHF_UP As Long = &H80&Public Type KeyboardBytes kbByte(0 To 255) As Byte End TypePrivate Type KBDLLHOOKSTRUCT vkCode As Long scanCode As Long flags As Long time As Long dwExtraInfo As Long End TypePublic 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 Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal cb As Long) Public Declare Function GetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer Public Function LowLevelKeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim kbdllhs As KBDLLHOOKSTRUCT
If nCode = HC_ACTION Then
Call CopyMemory(kbdllhs, ByVal lParam, Len(kbdllhs)) If (kbdllhs.flags And LLKHF_UP) Then
Select Case kbdllhs.vkCode
Case VK_NUMLOCK Form1.Label1.Visible = (GetKeyState(VK_NUMLOCK) = &HFF81)
Case VK_CAPITAL Form1.Label2.Visible = (GetKeyState(VK_CAPITAL) = &HFF81)
Case VK_SCROLL Form1.Label3.Visible = (GetKeyState(VK_SCROLL) = &HFF81)
Case Else Form1.List1.AddItem kbdllhs.vkCode End Select
以下是FORM部份代码:在Form上放Label1、Label2、Label3、List1
所有键盘按键的ASCII码放在List1中了
Option ExplicitPrivate Sub Form_Load() Dim kbdState As KeyboardBytes
Call GetKeyboardState(kbdState)
With Label1
.Caption = "Numlock亮"
.Alignment = vbRightJustify
End With
With Label2
.Caption = "Caps lock亮"
.Alignment = vbRightJustify
End With
With Label3
.Caption = "Scroll lock亮"
.Alignment = vbRightJustify
End With
Label1.Visible = kbdState.kbByte(VK_NUMLOCK) = 1
Label2.Visible = kbdState.kbByte(VK_CAPITAL) = 1
Label3.Visible = kbdState.kbByte(VK_SCROLL) = 1
m_hDllKbdHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0&)
If m_hDllKbdHook = 0 Then MsgBox "建立钩子失败"
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) If m_hDllKbdHook <> 0 Then Call UnhookWindowsHookEx(m_hDllKbdHook)
End Sub
'以下代码放在标准模块中
Option ExplicitPublic m_hDllKbdHook As Long
Public Const WH_KEYBOARD_LL As Long = 13
Private Const HC_ACTION As Long = 0
Public Const VK_CAPITAL As Long = &H14
Public Const VK_NUMLOCK As Long = &H90
Public Const VK_SCROLL As Long = &H91
Private Const LLKHF_UP As Long = &H80&Public Type KeyboardBytes
kbByte(0 To 255) As Byte
End TypePrivate Type KBDLLHOOKSTRUCT
vkCode As Long
scanCode As Long
flags As Long
time As Long
dwExtraInfo As Long
End TypePublic 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
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal cb As Long)
Public Declare Function GetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Public Function LowLevelKeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim kbdllhs As KBDLLHOOKSTRUCT
If nCode = HC_ACTION Then
Call CopyMemory(kbdllhs, ByVal lParam, Len(kbdllhs)) If (kbdllhs.flags And LLKHF_UP) Then
Select Case kbdllhs.vkCode
Case VK_NUMLOCK
Form1.Label1.Visible = (GetKeyState(VK_NUMLOCK) = &HFF81)
Case VK_CAPITAL
Form1.Label2.Visible = (GetKeyState(VK_CAPITAL) = &HFF81)
Case VK_SCROLL
Form1.Label3.Visible = (GetKeyState(VK_SCROLL) = &HFF81)
Case Else
Form1.List1.AddItem kbdllhs.vkCode
End Select
End If
End If
LowLevelKeyboardProc = CallNextHookEx(m_hDllKbdHook, nCode, wParam, lParam)
End Function