LRESULT SendMessage(
HWND hWnd, // 目標視窗控制代碼
UINT Msg, // 訊息編號
WPARAM wParam, // 第一參數
LPARAM lParam // 第二參數
);
HWND_BROADCAST:廣播至所有頂層視窗 (含不可見、擁有者視窗、彈出視窗),不包含子視窗RegisterWindowMessage 取得唯一訊息編號避免衝突視窗程序處理結果,具體含義取決於訊息類型。
winuser.h,匯入庫:user32.libcase WM_KEYDOWN:
switch (wParam) {
case VK_HOME: SendMessage(hwnd, WM_VSCROLL, SB_TOP, 0); break;
case VK_END: SendMessage(hwnd, WM_VSCROLL, SB_BOTTOM, 0); break;
case VK_PRIOR: SendMessage(hwnd, WM_VSCROLL, SB_PAGEUP, 0); break;
// ...
}
return 0;
SendMessage(hwnd, WM_COPY, 0, 0);
SendMessage(hwnd, WM_CUT, 0, 0);
SendMessage(hwnd, WM_PASTE, 0, 0);
推薦使用 SendMessage (同步),確保接收方複製完成前不返回,避免發送方過早修改/釋放資料:
std::string strData = "VC知識庫 VCKBASE.COM";
COPYDATASTRUCT cds;
cds.dwData = 0;
cds.cbData = strData.length();
cds.lpData = (void*)strData.c_str();
::SendMessage(hwnd, WM_COPYDATA, NULL, (LPARAM)&cds);
| 特性 | SendMessage | PostMessage |
|---|---|---|
| 機制 | 同步,直接呼叫視窗程序 | 非同步,放入訊息隊列 |
| 返回時機 | 處理完成後 | 放入隊列後立即 |
| 阻塞呼叫端 | 是 | 否 |
| 適用場景 | 需即時結果、跨進程資料傳遞 | 通知、非阻塞觸發 |
不支援所有桌面平台訊息,使用前需確認目標平台支援性。