Поделиться через


Функция 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)

См. также

концептуальные

InSendMessage

сообщений и очередей сообщений

PostMessage

PostThreadMessage

Справочник

RegisterWindowMessage

SendDlgItemMessage

SendMessageCallback

SendMessageTimeout

SendNotifyMessage