下面这段代码是设置CTRL+F10,CTRL+F11,CTRL+F12三个快捷键的操作 , 稍改一下就行了。 新建一个工程,加入一个模块,窗体名为默认的form1模块中的代码如下: Option ExplicitPublic 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 LongPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic 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 LongPublic Const WM_HOTKEY = &H312 Public Const GWL_WNDPROC = -4Public Const MOD_CTRL = &H2Public Const VK_F10 = &H79 Public Const VK_F11 = &H7A Public Const VK_F12 = &H7BPublic glWinRet As LongPublic Function CallbackMsgs(ByVal wHwnd As Long, ByVal wmsg As Long, ByVal wp_id As Long, ByVal lp_id As Long) As Long If wmsg = WM_HOTKEY Then Call DoFunctions(wp_id) CallbackMsgs = 1 Exit Function End If CallbackMsgs = CallWindowProc(glWinRet, wHwnd, wmsg, wp_id, lp_id) End FunctionPublic Sub DoFunctions(ByVal vKeyID As Byte)
Form1.Show Form1.WindowState = 0 DoEvents If Form1.Visible = False Then Form1.Show Form1.WindowState = 0 End If
Form1.Cls
Select Case vKeyID Case 0 Form1.Print "执行 CTRL+F10 的操作!" Case 1 Form1.Print "执行 CTRL+F11 的操作!" Case 2 Form1.Print "执行 CTRL+F12 的操作!" End Select End Sub窗体中的代码如下: Option ExplicitDim retVal0 As Boolean, retVal1 As Boolean, retVal2 As BooleanPrivate Sub Form_Load() Me.AutoRedraw = True MsgBox "将要设置 CTRL+F10, CTRL+F11, CTRL+F12 为快捷键"
retVal0 = RegisterHotKey(Me.hwnd, 0, MOD_CTRL, VK_F10) If Not retVal0 Then MsgBox "无法设置CTRL+F10为快捷键!", vbCritical End If
retVal1 = RegisterHotKey(Me.hwnd, 1, MOD_CTRL, VK_F11) If Not retVal1 Then MsgBox "无法设置CTRL+F11为快捷键!", vbCritical End If
retVal2 = RegisterHotKey(Me.hwnd, 2, MOD_CTRL, VK_F12) If Not retVal2 Then MsgBox "无法设置CTRL+F12为快捷键!", vbCritical End If
If (retVal0 = False And retVal1 = False And retVal2 = False) Then MsgBox "没有任何快捷键被设置!", vbCritical End End If
End Sub Private Sub Form_Resize() If Me.WindowState = 1 Then Me.Hide End If
End Sub Private Sub Form_Unload(Cancel As Integer) If retVal0 = True Then UnregisterHotKey Me.hwnd, 0 End If
If retVal1 = True Then UnregisterHotKey Me.hwnd, 1 End If
If retVal2 = True Then UnregisterHotKey Me.hwnd, 2 End If
End Sub
'演示怎样设置一个窗口在桌面上的HotKey,这个程序将Form1的HotKey设置为 'Ctl+Alt+A.Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Const WM_SETHOTKEY = &H32 Private Const HOTKEYF_SHIFT = &H1 Private Const HOTKEYF_CONTROL = &H2 Private Const HOTKEYF_ALT = &H4Private Sub Form_Load() Dim l As Long Dim wHotkey As Long
wHotkey = (HOTKEYF_ALT Or HOTKEYF_CONTROL) * (2 ^ 8) + 65 l = SendMessage(Me.hwnd, WM_SETHOTKEY, wHotkey, 0) End Sub
新建一个工程,加入一个模块,窗体名为默认的form1模块中的代码如下:
Option ExplicitPublic 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 LongPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic 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 LongPublic Const WM_HOTKEY = &H312
Public Const GWL_WNDPROC = -4Public Const MOD_CTRL = &H2Public Const VK_F10 = &H79
Public Const VK_F11 = &H7A
Public Const VK_F12 = &H7BPublic glWinRet As LongPublic Function CallbackMsgs(ByVal wHwnd As Long, ByVal wmsg As Long, ByVal wp_id As Long, ByVal lp_id As Long) As Long
If wmsg = WM_HOTKEY Then
Call DoFunctions(wp_id)
CallbackMsgs = 1
Exit Function
End If
CallbackMsgs = CallWindowProc(glWinRet, wHwnd, wmsg, wp_id, lp_id)
End FunctionPublic Sub DoFunctions(ByVal vKeyID As Byte)
Form1.Show
Form1.WindowState = 0
DoEvents
If Form1.Visible = False Then
Form1.Show
Form1.WindowState = 0
End If
Form1.Cls
Select Case vKeyID
Case 0
Form1.Print "执行 CTRL+F10 的操作!"
Case 1
Form1.Print "执行 CTRL+F11 的操作!"
Case 2
Form1.Print "执行 CTRL+F12 的操作!"
End Select
End Sub窗体中的代码如下:
Option ExplicitDim retVal0 As Boolean, retVal1 As Boolean, retVal2 As BooleanPrivate Sub Form_Load()
Me.AutoRedraw = True MsgBox "将要设置 CTRL+F10, CTRL+F11, CTRL+F12 为快捷键"
retVal0 = RegisterHotKey(Me.hwnd, 0, MOD_CTRL, VK_F10)
If Not retVal0 Then
MsgBox "无法设置CTRL+F10为快捷键!", vbCritical
End If
retVal1 = RegisterHotKey(Me.hwnd, 1, MOD_CTRL, VK_F11)
If Not retVal1 Then
MsgBox "无法设置CTRL+F11为快捷键!", vbCritical
End If
retVal2 = RegisterHotKey(Me.hwnd, 2, MOD_CTRL, VK_F12)
If Not retVal2 Then
MsgBox "无法设置CTRL+F12为快捷键!", vbCritical
End If
If (retVal0 = False And retVal1 = False And retVal2 = False) Then
MsgBox "没有任何快捷键被设置!", vbCritical
End
End If
glWinRet = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf CallbackMsgs)
End Sub
Private Sub Form_Resize() If Me.WindowState = 1 Then
Me.Hide
End If
End Sub
Private Sub Form_Unload(Cancel As Integer) If retVal0 = True Then
UnregisterHotKey Me.hwnd, 0
End If
If retVal1 = True Then
UnregisterHotKey Me.hwnd, 1
End If
If retVal2 = True Then
UnregisterHotKey Me.hwnd, 2
End If
End Sub
'Ctl+Alt+A.Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Const WM_SETHOTKEY = &H32
Private Const HOTKEYF_SHIFT = &H1
Private Const HOTKEYF_CONTROL = &H2
Private Const HOTKEYF_ALT = &H4Private Sub Form_Load()
Dim l As Long
Dim wHotkey As Long
wHotkey = (HOTKEYF_ALT Or HOTKEYF_CONTROL) * (2 ^ 8) + 65
l = SendMessage(Me.hwnd, WM_SETHOTKEY, wHotkey, 0)
End Sub