1  窗体中:Sub Form_Load()
 Dim ret As Long
 preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
 ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf wndproc)
 idHotKey = 1 'in the range &h0000 through &hBFFF
 Modifiers = 0
 uVirtKey = vbKeyF1
 ret = RegisterHotKey(Me.hwnd, idHotKey, Modifiers, uVirtKey)
 End Sub Private Sub Form_Unload(Cancel As Integer)
 Dim ret As Long
 '取消Message的截取,而使之又只送往原来的Window Procedure
 ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)
 Call UnregisterHotKey(Me.hwnd, uVirtKey)
 End Sub
2  模块中:
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
  (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
  (ByVal hwnd As Long, ByVal nIndex 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 RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As LongPublic Const WM_HOTKEY = &H312
Public Const GWL_WNDPROC = (-4)Public preWinProc As Long
Public Modifiers As Long, uVirtKey As Long, idHotKey As LongPrivate Type taLong
   ll As Long
End Type
Private Type t2Int
   lWord As Integer
   hword As Integer
End Type
 Public Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, _
                         ByVal wParam As Long, ByVal lParam As Long) As Long
 If Msg = WM_HOTKEY Then
    If wParam = idHotKey Then
       Dim lp As taLong, i2 As t2Int
       lp.ll = lParam
       LSet i2 = lp
       If (i2.lWord = Modifiers) And i2.hword = uVirtKey Then
           test
       End If
   End If
 End If
 '将之送往原来的Window Procedure
 wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
 End Function
Public Sub test()
    MsgBox "Hello"
End Sub