sendMessage 函式 (winuser.h)

將指定的訊息傳送至視窗或視窗。 SendMessage 函式會呼叫指定視窗的視窗程式,而且在視窗程式處理訊息之前不會傳回 。

若要立即傳送訊息並傳回,請使用 SendMessageCallbackSendNotifyMessage 函式。 若要將訊息張貼至線程的訊息佇列並立即傳回,請使用 PostMessagePostThreadMessage 函式。

語法

LRESULT SendMessage(
  [in] HWND   hWnd,
  [in] UINT   Msg,
  [in] WPARAM wParam,
  [in] LPARAM lParam
);

參數

[in] hWnd

類型: HWND

視窗程式的句柄會接收訊息。 如果此參數 HWND_BROADCAST ( ( HWND) 0xffff) ,訊息會傳送至系統中的所有最上層視窗,包括已停用或隱藏的未擁有視窗、重疊視窗和彈出視窗;但訊息不會傳送至子視窗。

訊息傳送受限於UIPI。 進程的線程只能將訊息傳送至進程較小或等於完整性層級之線程的訊息佇列。

[in] Msg

類型: UINT

要傳送的訊息。

如需系統提供的訊息清單,請參閱 系統定義訊息

[in] wParam

類型: WPARAM

其他特定訊息資訊。

[in] lParam

類型: LPARAM

其他特定訊息資訊。

傳回值

類型: LRESULT

傳回值會指定訊息處理的結果;這取決於傳送的訊息。

備註

當 UIPI 封鎖訊息時,使用 GetLastError 擷取的最後一個錯誤會設定為 5 (拒絕存取) 。

需要使用 HWND_BROADCAST 進行通訊的應用程式應該使用 RegisterWindowMessage 函式來取得應用程式間通訊的唯一訊息。

系統只會對範圍 0 中的系統訊息進行封送處理, ( (WM_USER-1) ) 。 若要將其他訊息傳送 (這些 >= WM_USER) 至另一個進程,您必須執行自定義封送處理。

如果指定的視窗是由呼叫線程所建立,則會立即呼叫視窗程式做為子程式。 如果指定的視窗是由不同的線程所建立,系統就會切換至該線程,並呼叫適當的窗口程式。 只有在接收線程執行訊息擷取程式代碼時,才會處理在線程之間傳送的訊息。 傳送線程會遭到封鎖,直到接收線程處理訊息為止。 不過,傳送線程會在等候處理訊息時處理傳入的非佇列訊息。 若要避免這種情況,請使用 SendMessageTimeout 搭配SMTO_BLOCK集。 如需非佇列訊息的詳細資訊,請參閱 非佇列訊息

輔助功能應用程式可以使用 SendMessageWM_APPCOMMAND 訊息傳送至殼層,以啟動應用程式。 此功能不保證適用於其他類型的應用程式。

範例

如需範例,請參閱 顯示鍵盤輸入

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 winuser.h (包括 Windows.h)
程式庫 User32.lib
Dll User32.dll
API 集合 ext-ms-win-ntuser-message-l1-1-0 (於 Windows 8)

另請參閱

概念

InSendMessage

訊息和消息佇列

PostMessage

PostThreadMessage

參考

RegisterWindowMessage

SendDlgItemMessage

SendMessageCallback

SendMessageTimeout

SendNotifyMessage