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