Функция 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, имеет значение 5 (доступ запрещен).
Приложения, которые должны взаимодействовать с помощью HWND_BROADCAST, должны использовать функцию RegisterWindowMessage для получения уникального сообщения для взаимодействия между приложениями.
Система выполняет маршаллинг только для системных сообщений (в диапазоне от 0 до (WM_USER–1)). Чтобы отправить другие сообщения (те >= WM_USER) в другой процесс, необходимо выполнить настраиваемую маршалинг.
Если указанное окно было создано вызывающим потоком, процедура окна вызывается немедленно в качестве подзадачей. Если указанное окно было создано другим потоком, система переключается на этот поток и вызывает соответствующую процедуру окна. Сообщения, отправляемые между потоками, обрабатываются только в том случае, если принимающему потоку выполняется код извлечения сообщений. Поток отправки блокируется до тех пор, пока получение потока не обрабатывает сообщение. Однако поток отправки будет обрабатывать входящие неqueued сообщения во время ожидания обработки сообщения. Чтобы предотвратить это, используйте SendMessageTimeout с набором SMTO_BLOCK. Дополнительные сведения о неqueuued сообщениях см. в разделе неqueued Messages.
Приложение специальных возможностей может использовать SendMessage для отправки WM_APPCOMMAND сообщений в оболочку для запуска приложений. Эта функция не гарантируется для других типов приложений.
Примеры
Пример см. в разделе Отображениеввода клавиатуры.
Заметка
Заголовок winuser.h определяет SendMessage как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 2000 Профессиональный [только классические приложения] |
минимальный поддерживаемый сервер | Windows 2000 Server [только классические приложения] |
целевая платформа | Виндоус |
заголовка | winuser.h (включая Windows.h) |
библиотеки |
User32.lib |
DLL | User32.dll |
набор API | ext-ms-win-ntuser-message-l1-1-0 (представлено в Windows 8) |
См. также
концептуальные
сообщений и очередей сообщений
Справочник