0x2_訊息的傳送

HK丶騷皮龍發表於2020-10-12

訊息的傳送

SendMessage函式將指定的訊息傳送到一個或多個視窗。它呼叫指定視窗的視窗過程,直到視窗過程處理完訊息後才返回。

// 函式原型
LRESULT SendMessage(
  HWND hWnd,      // 目標視窗控制程式碼
  UINT Msg,       // 傳送的訊息
  WPARAM wParam,  // 訊息附加引數
  LPARAM lParam   // 訊息附加引數
);

SendMessage函式是非佇列訊息


訊息的寄送

PostMessage函式在與建立指定視窗的執行緒相關聯的訊息佇列中放置(釋出)一條訊息,並在不等待執行緒處理該訊息的情況下返回。

// 函式原型
BOOL PostMessage(  
  HWND hWnd,      // 目標視窗控制程式碼
  UINT Msg,       // 傳送的訊息 
  WPARAM wParam,  // 訊息附加引數
  LPARAM lParam   // 訊息附加引數
);
  • hWnd引數為HWND_BROADCAST時,該訊息被髮布到系統中的所有頂級視窗,包括禁用或不可見的無主視窗、重疊視窗和彈出視窗。訊息不釋出到子視窗。

廣播訊息

BroadcastSystemMessage函式向指定的收件人傳送訊息。接收方可以是應用程式、可安裝驅動程式、網路驅動程式、系統級裝置驅動程式或這些系統元件的任何組合。

long BroadcastSystemMessage(
  DWORD dwFlags,           // 廣播選項 
  LPDWORD lpdwRecipients,  // 接收訊息的物件 
  UINT uiMessage,          // 廣播訊息
  WPARAM wParam,           // 訊息附加引數 
  LPARAM lParam            // 訊息附加引數  
);
- dwFlags引數
    BSF_QUERY:廣播一次訊息只傳送給一個接收者,只有當前接收方返回TRUE時才傳送給後續接收方
    如果沒有指定BSF_QUERY,則將訊息傳送給所有接收者

相關文章