' 保存原消息函数地址
Public lpPrevWndProc As Long ' 热键消息常量 Public Const WM_HOTKEY = &H312 ' Set/GetWindowLong 参数,表示对消息函数进行处理 Public Const GWL_WNDPROC = -4 |
' 用于返回原消息函数地址
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) 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 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 |
Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Debug.Print "Message: "; hw, uMsg, wParam, lParam If uMsg = WM_HOTKEY Then Msgbox "截获热键!" WindowProc = 0 Else ' 调用原消息处理函数过程 WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam) End If End Function |
' 保存原消息函数地址,设置新消息函数地址
Public Sub Form_Load() |
' 恢复原消息处理
Public Sub Form_Unload() |