微软官方:
SendMessage function
Sends the specified message to a window or windows. The SendMessage function calls the window procedure for the specified window and does not return until the window procedure has processed the message.
To send a message and return immediately, use the SendMessageCallback or SendNotifyMessage function. To post a message to a thread's message queue and return immediately, use the PostMessage or PostThreadMessage function.
Syntax
LRESULT WINAPI SendMessage( _In_ HWND hWnd, _In_ UINT Msg, _In_ WPARAM wParam, _In_ LPARAM lParam );
Parameters
-
hWnd [in]
-
Type: HWND
A handle to the window whose window procedure will receive the message. If this parameter is HWND_BROADCAST ((HWND)0xffff), the message is sent to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows; but the message is not sent to child windows.
Message sending is subject to UIPI. The thread of a process can send messages only to message queues of threads in processes of lesser or equal integrity level.
Msg [in]
-
Type: UINT
The message to be sent.
For lists of the system-provided messages, see System-Defined Messages.
wParam [in]
-
Type: WPARAM
Additional message-specific information.
lParam [in]
-
Type: LPARAM
Additional message-specific information.
Return value
Type:
Type: LRESULT
The return value specifies the result of the message processing; it depends on the message sent.
Remarks
When a message is blocked by UIPI the last error, retrieved with GetLastError, is set to 5 (access denied).
Applications that need to communicate using HWND_BROADCAST should use the RegisterWindowMessage function to obtain a unique message for inter-application communication.
The system only does marshalling for system messages (those in the range 0 to (WM_USER-1)). To send other messages (those >= WM_USER) to another process, you must do custom marshalling.
If the specified window was created by the calling thread, the window procedure is called immediately as a subroutine. If the specified window was created by a different thread, the system switches to that thread and calls the appropriate window procedure. Messages sent between threads are processed only when the receiving thread executes message retrieval code. The sending thread is blocked until the receiving thread processes the message. However, the sending thread will process incoming nonqueued messages while waiting for its message to be processed. To prevent this, use SendMessageTimeout with SMTO_BLOCK set. For more information on nonqueued messages, see Nonqueued Messages.
An accessibility application can use SendMessage to send WM_APPCOMMAND messages to the shell to launch applications. This functionality is not guaranteed to work for other types of applications.
SendMessage 是一个进程间阻塞函数,同一进程的线程间阻塞,所以在有些处理资源共享冲突问题上可以使用此函数,举个例子,例如系统中有一寄存器,OS可以操作,OS也提供接口给AP,AP也可以操作此寄存器,那么如果OS和AP之间同时去写此寄存器,那就会出现冲突,那怎么解决,就可以使用SendMessage,OS发送消息给AP,AP才可以去操作此寄存器,当AP操作完成,SendMessage 返回,OS才能操作此寄存器,这就是利用了SendMessage进程间阻塞这个特性