SendMessageW 函式 (winuser.h)
將指定的訊息傳送至視窗或視窗。 SendMessage 函式會呼叫指定視窗的視窗程式,而且在視窗程式處理訊息之前不會傳回 。
若要傳送訊息並立即傳回,請使用 sendMessageCallback 或 SendNotifyMessage 函式。 若要將訊息張貼至線程的訊息佇列並立即傳回,請使用 PostMessage 或 PostThreadMessage 函式。
語法
LRESULT SendMessageW(
[in] HWND hWnd,
[in] UINT Msg,
[in] WPARAM wParam,
[in] LPARAM lParam
);
參數
[in] hWnd
類型:HWND
視窗程式的句柄,其視窗程式將接收訊息。 如果此參數是 HWND_BROADCAST ((HWND)0xffff),訊息會傳送至系統中的所有最上層視窗,包括已停用或看不見的未擁有視窗、重疊的視窗和彈出視窗;但訊息不會傳送至子視窗。
訊息傳送受限於UIPI。 進程的線程只能將訊息傳送至進程較小或等於完整性層級之線程的訊息佇列。
[in] Msg
類型:UINT
要傳送的訊息。
如需系統提供的訊息清單,請參閱 System-Defined 訊息。
[in] wParam
類型:WPARAM
其他訊息特定資訊。
[in] lParam
類型:LPARAM
其他訊息特定資訊。
傳回值
類型:LRESULT
傳回值會指定訊息處理的結果;這取決於傳送的訊息。
言論
當 UIPI 封鎖訊息時,使用 getLastError擷取
需要使用 HWND_BROADCAST 進行通訊的應用程式應該使用 RegisterWindowMessage 函式,以取得應用程式間通訊的唯一訊息。
系統只會對系統訊息進行封送處理(範圍 0 到 (WM_USER-1) 中的訊息。 若要將其他訊息 (這些 >= WM_USER) 傳送至另一個進程,您必須執行自定義封送處理。
如果指定的視窗是由呼叫線程所建立,則會立即呼叫視窗程式做為子程式。 如果指定的視窗是由不同的線程所建立,系統就會切換至該線程,並呼叫適當的窗口程式。 只有在接收線程執行訊息擷取程式代碼時,才會處理線程之間傳送的訊息。 傳送線程會遭到封鎖,直到接收線程處理訊息為止。 不過,傳送線程會在等候處理其訊息時處理傳入的非佇列訊息。 若要避免這種情況,請使用 SendMessageTimeout 搭配SMTO_BLOCK集。 如需非佇列訊息的詳細資訊,請參閱 非佇列訊息。
輔助功能應用程式可以使用 SendMessage,將 WM_APPCOMMAND 訊息傳送至殼層以啟動應用程式。 此功能不保證適用於其他類型的應用程式。
例子
如需範例,請參閱 顯示鍵盤輸入。
注意
winuser.h 標頭會將 SendMessage 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
支援的最低伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平臺 | 窗戶 |
標頭 | winuser.h (包括 Windows.h) |
連結庫 | User32.lib |
DLL | User32.dll |
API 集 | ext-ms-win-ntuser-message-l1-1-0 (在 Windows 8 中引進) |
另請參閱
概念
參考