CBTProc 回呼函式

SetWindowsHookExA/SetWindowsHookExW函式搭配使用的應用程式定義或程式庫定義回呼函式。 系統會在啟動、建立、終結、最小化、最大化、移動或調整視窗大小之前呼叫此函式;完成系統命令之前;從系統訊息佇列移除滑鼠或鍵盤事件之前;設定鍵盤焦點之前;或 與系統訊息佇列同步處理之前。 以電腦為基礎的訓練 (CBT) 應用程式會使用此攔截程式從系統接收有用的通知。

語法

LRESULT CALLBACK CBTProc(
  _In_ int    nCode,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);

參數

  • nCode [in]
    類型: int

    攔截程式用來判斷如何處理訊息的程式碼。 如果 nCode 小於零,攔截程式必須將訊息傳遞至 CallNextHookEx 函式,而不需進一步處理,而且應該傳回 CallNextHookEx傳回的值。 此參數可以是下列其中一個值。

    意義
    HCBT_ACTI加值稅E 5

    系統即將啟動視窗。

    HCBT_CLICKSKIPPED 6

    系統已從系統訊息佇列中移除滑鼠訊息。 收到此攔截程式碼時,CBT 應用程式必須安裝 WH_JOURNALPLAYBACK 攔截程式,以回應滑鼠訊息。

    HCBT_CREATEWND 3

    即將建立視窗。 系統會先呼叫攔截程式,再將 WM_CREATEWM_NCCREATE 訊息傳送至視窗。 如果攔截程式傳回非零值,系統就會終結視窗; CreateWindow 函式會傳回 Null,但 不會將WM_DESTROY 訊息傳送至視窗。 如果攔截程式傳回零,則會正常建立視窗。

    HCBT_CREATEWND 通知時,已建立視窗,但其最終大小和位置可能尚未決定,而且其父視窗可能尚未建立。 雖然尚未收到 訊息WM_NCCREATEWM_CREATE 訊息,但可以將訊息傳送至新建立的視窗。 您也可以修改CBT_CREATEWND結構的hwndInsertAfter成員,以新建立視窗的迭置順序變更位置。

    HCBT_DESTROYWND 4

    視窗即將終結。

    HCBT_KEYSKIPPED 7

    系統已從系統訊息佇列中移除鍵盤訊息。 收到此勾點程式碼時,CBT 應用程式必須安裝 WH_JOURNALPLAYBACK 攔截程式,以回應鍵盤訊息。

    HCBT_MINMAX 1

    視窗即將最小化或最大化。

    HCBT_MOVESIZE 0

    視窗即將移動或調整大小。

    HCBT_QS 2

    系統已從系統訊息佇列擷取 WM_QUEUESYNC 訊息。

    HCBT_SETFOCUS 9

    視窗即將接收鍵盤焦點。

    HCBT_SYSCOMMAND 8

    系統命令即將執行。這可讓 CBT 應用程式防止工作切換,方法是使用熱鍵。

     
    • wParam [in]
      類型: WPARAM

      取決於 nCode 參數。 如需詳細資訊,請參閱下列一節。

    • lParam [in]
      類型: LPARAM

      取決於 nCode 參數。 如需詳細資訊,請參閱下列一節。

    傳回值

    類型:****

    類型:LRESULT

    攔截程式所傳回的值會決定系統是否允許或防止其中一項作業。 對於對應至下列 CBT 攔截碼的作業,傳回值必須是 0,才能允許作業,或 1 來防止它。

    • HCBT_ACTI加值稅E
    • HCBT_CREATEWND
    • HCBT_DESTROYWND
    • HCBT_MINMAX
    • HCBT_MOVESIZE
    • HCBT_SETFOCUS
    • HCBT_SYSCOMMAND

    對於對應至下列 CBT 攔截碼的作業,會忽略傳回值。

    • HCBT_CLICKSKIPPED
    • HCBT_KEYSKIPPED
    • HCBT_QS

    備註

    HOOKPROC類型會定義這個回呼函式的指標。 CBTProc 是應用程式定義或程式庫定義函數名稱的預留位置。

    攔截程式不應該安裝 WH_JOURNALPLAYBACK 攔截程式,但上述攔截程式代碼清單中所述的情況除外。

    應用程式會藉由指定WH_CBT勾點類型和呼叫SetWindowsHookExA/SetWindowsHookExW函式中的攔截程式指標來安裝攔截程式。

    下表描述每個HCBT_勾點程式碼wParamlParam參數。

    wParam lParam
    HCBT_ACTI加值稅E 指定即將啟動之視窗的控制碼。 指定 CBTACTI加值稅ESTRUCT 結構的長指標,其中包含使用中視窗的控制碼,並指定啟用是否因為按一下滑鼠而變更。
    HCBT_CLICKSKIPPED 指定從系統訊息佇列中移除的滑鼠訊息。 指定 MOUSEHOOKSTRUCT 結構的長指標,其中包含點擊測試程式碼,以及滑鼠訊息預定之視窗的控制碼。

    只有在安裝WH_MOUSE勾點時才會將HCBT_CLICKSKIPPED值傳送至CBTProc攔截程式。 如需點擊測試程式碼的清單,請參閱 WM_NCHITTEST

    HCBT_CREATEWND 指定新視窗的控制碼。 指定包含視窗初始化參數 之CBT_CREATEWND 結構的長指標。 參數包括視窗的座標和維度。 藉由變更這些參數, CBTProc 攔截程式可以設定視窗的初始大小和位置。
    HCBT_DESTROYWND 指定要終結之視窗的控制碼。 未定義 且必須設定為零。
    HCBT_KEYSKIPPED 指定虛擬金鑰程式碼。 指定重複計數、掃描程式碼、金鑰轉換程式碼、先前的金鑰狀態,以及內容程式碼。 只有在安裝WH_KEYBOARD勾點時才會將HCBT_KEYSKIPPED值傳送至CBTProc攔截程式。 如需詳細資訊,請參閱 WM_KEYUPWM_KEYDOWN
    HCBT_MINMAX 指定最小化或最大化視窗的控制碼。 以低順序字組指定顯示視窗值, (SW_ 指定作業) 。 如需顯示視窗值的清單,請參閱 ShowWindow。 高序單字未定義。
    HCBT_MOVESIZE 指定要移動或調整大小的視窗控制碼。 指定包含視窗座標之 RECT 結構的長指標。 藉由變更 結構中的值, CBTProc 攔截程式可以設定視窗的最終座標。
    HCBT_QS 未定義且必須是零。 未定義且必須是零。
    HCBT_SETFOCUS 指定取得鍵盤焦點之視窗的控制碼。 指定視窗失去鍵盤焦點的控制碼。
    HCBT_SYSCOMMAND 指定系統命令值 (SC_ 指定系統命令) 。 如需系統命令值的詳細資訊,請參閱 WM_SYSCOMMAND 包含與WM_SYSCOMMAND訊息lParam值相同的資料:如果使用滑鼠選擇系統功能表命令,則低序單字會包含游標的 x 座標,而螢幕座標中的高序字則包含 Y 座標;否則,不會使用 參數。

     

    如需詳細資訊,請參閱 Windows 事件

    規格需求

    最低支援的用戶端

    Windows 2000 Professional [僅限傳統型應用程式]

    最低支援的伺服器

    Windows 2000 Server [僅限桌面應用程式]

    標頭

    Winuser.h (包括 Windows.h)

    另請參閱

    CallNextHookEx

    CreateWindowA/CreateWindowW

    SetWindowsHookExA/SetWindowsHookExW

    WM_SYSCOMMAND訊息

    勾點