例子:添加一个窗体,里面的代码是: Private Sub Form_Load() Call frmMainProc Call myFunction.RegHotKey(hwnd, 1, , vbKeyF4) Call myFunction.RegHotKey(hwnd, 2, , vbKeyF6) Call myFunction.RegHotKey(hwnd, 3, , vbKeyF7)End Sub 添加一个模块,里面的代码: Option Explicit'Public Declare Function SetKeyboardHook Lib "KeybHook" (ByVal hwndPost As Long, ByVal MSG As Long) As Long 'Public Declare Function ReleaseKeyboardHook Lib "KeybHook" () As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long Public 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 ' RegHotKey Public Const WM_HOTKEY = &H312 Public Const MOD_ALT = &H1 Public Const MOD_CONTROL = &H2 Public Const MOD_SHIFT = &H4Public Const GWL_WNDPROC = (-4) Public Const WM_USER = &H400 Public myFunction As New clsFunction Public OldWndProc As Long Public Function frmMainProc() OldWndProc = SetWindowLong(Form1.hwnd, GWL_WNDPROC, AddressOf MainProc) End Function
Public Function MainProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long '这里是我们写程序最重要的部分 相当于 VB 中的事件 Select Case uMsg Case WM_HOTKEY Select Case wParam Case Is = 1 '按了F4键,窗口最大化 Form1.WindowState = 2 Case Is = 2 '按了F6键,窗口最小化 Form1.WindowState = 1 Case Is = 3 '按了F4键,窗口恢复原状 Form1.WindowState = 0
End Select End Select MainProc = CallWindowProc(OldWndProc, hwnd, uMsg, wParam, lParam) End Function 添加一个类模块,里面的代码:'Private Const WM_HOTKEY = &H312 'Private Const MOD_ALT = &H1 'Private Const MOD_CONTROL = &H2 'Private Const MOD_SHIFT = &H4Private Type POINTAPI X As Long Y As Long End TypeDim X1 As Long, Y1 As Long Dim RColor As Long, GColor As Long, BColor As Long Dim reColor As LongPublic Function RegHotKey(hwnd As Long, Optional RegKeyID As Long, Optional ModifiersKey As Long, Optional vk As Long) As Long '注册热键 Call RegisterHotKey(hwnd, RegKeyID, ModifiersKey, vk) End Function Public Function DelHotKey(hwnd As Long, Optional DelKeyID As Long) As Long '删除热键 Call UnregisterHotKey(hwnd, DelKeyID) End Function 粘完就运行一下,试试F4,F6,F7按键产生的效果,自己根据需要去修改吧。
win2000可以用 注册热键.
所以。
可以在窗口里加一个TIMER控件来检测系统按钮。
Private Sub Form_Load()
Call frmMainProc
Call myFunction.RegHotKey(hwnd, 1, , vbKeyF4)
Call myFunction.RegHotKey(hwnd, 2, , vbKeyF6)
Call myFunction.RegHotKey(hwnd, 3, , vbKeyF7)End Sub
添加一个模块,里面的代码:
Option Explicit'Public Declare Function SetKeyboardHook Lib "KeybHook" (ByVal hwndPost As Long, ByVal MSG As Long) As Long
'Public Declare Function ReleaseKeyboardHook Lib "KeybHook" () As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long
Public 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
' RegHotKey
Public Const WM_HOTKEY = &H312
Public Const MOD_ALT = &H1
Public Const MOD_CONTROL = &H2
Public Const MOD_SHIFT = &H4Public Const GWL_WNDPROC = (-4)
Public Const WM_USER = &H400
Public myFunction As New clsFunction
Public OldWndProc As Long
Public Function frmMainProc()
OldWndProc = SetWindowLong(Form1.hwnd, GWL_WNDPROC, AddressOf MainProc)
End Function
Public Function MainProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'这里是我们写程序最重要的部分 相当于 VB 中的事件
Select Case uMsg
Case WM_HOTKEY
Select Case wParam
Case Is = 1
'按了F4键,窗口最大化
Form1.WindowState = 2
Case Is = 2
'按了F6键,窗口最小化
Form1.WindowState = 1
Case Is = 3
'按了F4键,窗口恢复原状
Form1.WindowState = 0
End Select
End Select
MainProc = CallWindowProc(OldWndProc, hwnd, uMsg, wParam, lParam)
End Function
添加一个类模块,里面的代码:'Private Const WM_HOTKEY = &H312
'Private Const MOD_ALT = &H1
'Private Const MOD_CONTROL = &H2
'Private Const MOD_SHIFT = &H4Private Type POINTAPI
X As Long
Y As Long
End TypeDim X1 As Long, Y1 As Long
Dim RColor As Long, GColor As Long, BColor As Long
Dim reColor As LongPublic Function RegHotKey(hwnd As Long, Optional RegKeyID As Long, Optional ModifiersKey As Long, Optional vk As Long) As Long
'注册热键 Call RegisterHotKey(hwnd, RegKeyID, ModifiersKey, vk)
End Function
Public Function DelHotKey(hwnd As Long, Optional DelKeyID As Long) As Long
'删除热键
Call UnregisterHotKey(hwnd, DelKeyID)
End Function
粘完就运行一下,试试F4,F6,F7按键产生的效果,自己根据需要去修改吧。