當前位置:編程學習大全網 - 編程語言 - VB怎麽用HOOK函數攔截按鈕的click事件

VB怎麽用HOOK函數攔截按鈕的click事件

window系統的程序都是消息驅動機制,意思就是說靠消息來響應事件,當我們點擊commandbutton時 系統會獲取這個消息,然後會把這個 鼠標 或者鍵盤按鍵消息發送給 commandbutton 處理消息的壹個函數,他人稱之為 窗口過程,系統吧消息發送給 該 commandbutton 的窗口過程,該窗口過程 就會按消息 不同種類執行相應的代碼,如下代碼 是攔截 鼠標和鍵盤的按鍵消息,從而 不讓窗口過程 調用 click 方法。

’-------------------------------------窗口代碼

Private Sub Command1_Click()

MsgBox 1

End Sub

Private Sub Form_Load()

OldPrc = SetWindowLong(Command1.hwnd, -4, AddressOf CommandProc)

End Sub

‘-------------------------------------模塊代碼

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 SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public OldPrc As Long

Public Function CommandProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Debug.Print Hex(Msg)

If Msg = &H201 Or Msg = &H100 Then Exit Function

CommandProc = CallWindowProc(OldPrc, hwnd, Msg, wParam, lParam)

End Function

'特別說明下,執行 Click 方法的時候是Form窗口的窗口過程調用Click方法,並非是 Command 按鈕的窗口過程,系統首先是把消息 發送給 Command 按鈕的窗口過程,然後Command 按鈕的窗口過程 又把消息 轉發給 Form窗口的窗口過程,然後 Form窗口的窗口過程 按消息種類 執行

我們寫的 Command的壹些方法,

詳細內容請參考 MSDN 或者 windows核心編程 的windows消息機制

  • 上一篇:DNF系統問題
  • 下一篇:神廟逃亡2博爾特怎麽才能免費解鎖
  • copyright 2024編程學習大全網