如何测试到键盘的多媒体键(如上网键、小弟我的电脑、音量+、音量-睡眠键、电源键等等

怎么测试到键盘的多媒体键(如上网键、我的电脑、音量+、音量-,睡眠键、电源键等等
小弟刚刚学习VB,现在公司需要做一款多媒体键盘的测试程序。但是小弟做了一款程序,只能测试107个普通按键啊,其他的多媒体按键测试不了。找到一款前辈写的程序,用的他自己做的 *.dll,但是有很多多媒体按键测试不出来,而且按下WIN键时,还会弹出“开始菜单”,按下“上网键”时也会弹出网页,测试时很不方面。
   
   
  哪位大哥能帮帮小弟。要能够测试键盘的所有普通按键、WIN键、多媒体键,而不会弹出对话框、网页等选项的。下面是我的VB代码,请各位大哥帮帮改改,谢谢!!

form1里面的代码:
VB code



Option Explicit
Const LEFT_BUTTON = 1
Const RIGHT_BUTTON = 2
Const MIDDLE_BUTTON = 4
Const RED = &HFF
Const NORMAL = &H80000005
Private Sub Form_Load()
    
    On Error Resume Next

    ' 本 KeyboardHook_HookProc ㄧ计
    SetKeyboardHook Me.hwnd, WM_USER

    If Err.Number <> 0 Then
        MsgBox "非 KeybHook.dll 定义之 Windows键", vbCritical
        End
    End If
    On Error GoTo 0
    
    ' 本跌怠祘
    prevWndProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
    SetWindowLong Me.hwnd, GWL_WNDPROC, AddressOf WndProc
     Dim pOld As Boolean
    
    ' 琵Ctrl+Alt+Del舱龄ア
    SystemParametersInfoByRef SPI_SCREENSAVERRUNNING, True, pOld, 0

End Sub



Private Sub Form_Unload(Cancel As Integer)
 Dim pOld As Boolean
    
    ' 確Ctrl+Alt+Del舱龄
    SystemParametersInfoByRef SPI_SCREENSAVERRUNNING, False, pOld, 0
    '  KeyboardHook_HookProc ㄧ计
    ReleaseKeyboardHook
    
    ' 跌怠祘
    SetWindowLong Me.hwnd, GWL_WNDPROC, prevWndProc
End Sub

Private Sub Label111_Click()
 Dim pOld As Boolean
    
    ' 確Ctrl+Alt+Del舱龄
    SystemParametersInfoByRef SPI_SCREENSAVERRUNNING, False, pOld, 0
Unload Me

End Sub




模块里面的代码:通过 lParam 的值来确定对应哪个按键
VB code


Option Explicit

Public totalkey As Integer
Public countkey As Integer
Public countk(200) As Integer

Public count1 As Integer
Public count2 As Integer
Public count3 As Integer
Public Const GWL_WNDPROC = (-4)
Public Const WM_USER = &H400
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_CHAR = &H102
Public Const WM_SYSKEYDOWN = &H104
Public Const WM_SYSKEYUP = &H105
Public Const WM_SYSCHAR = &H106

Public Const WM_NCHITTEST = &H84
Public Const HTCLIENT = 1
Public Const HTCAPTION = 2

Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long
Declare Function SystemParametersInfoByRef Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long

Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Declare Function SetKeyboardHook Lib "KeybHook" (ByVal hwndPost As Long, ByVal Msg As Long) As Long
Declare Function ReleaseKeyboardHook Lib "KeybHook" () As Long

Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long 'msgbox

Public prevWndProc As Long

Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
     If Msg = WM_USER Then
        Form1.List1.AddItem "wParam=" & wParam & ", lParam=" & Hex(lParam)
        Form1.List1.ListIndex = Form1.List1.NewIndex
        Select Case lParam
        Case &H80010201:
            Dim pOld As Boolean
    
            ' 確Ctrl+Alt+Del舱龄
            SystemParametersInfoByRef SPI_SCREENSAVERRUNNING, False, pOld, 0
            Unload Form1
     End Select
    End If
    WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
End Function