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


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

Отправляемое сообщение.

Списки системных сообщений см. в разделе Системные сообщения.

[in] wParam

Тип: WPARAM

Дополнительные сведения, относящиеся к сообщению.

[in] lParam

Тип: LPARAM

Дополнительные сведения, относящиеся к сообщению.

Возвращаемое значение

Тип: LRESULT

Возвращаемое значение указывает результат обработки сообщения; Это зависит от отправленного сообщения.

Комментарии

Если сообщение заблокировано UIPI, последняя ошибка, полученная с помощью GetLastError, имеет значение 5 (доступ запрещен).

Приложения, которым необходимо обмениваться данными с помощью HWND_BROADCAST , должны использовать функцию RegisterWindowMessage , чтобы получить уникальное сообщение для обмена данными между приложениями.

Система выполняет маршалинг только для системных сообщений (в диапазоне от 0 до (WM_USER–1)). Чтобы отправить другие сообщения (т. е>. WM_USER) в другой процесс, необходимо выполнить настраиваемую маршалинг.

Если указанное окно было создано вызывающим потоком, процедура окна вызывается немедленно в качестве подпрограммы. Если указанное окно было создано другим потоком, система переключается на этот поток и вызывает соответствующую процедуру окна. Сообщения, отправляемые между потоками, обрабатываются только в том случае, если принимающий поток выполняет код получения сообщений. Отправляющие потоки блокируются до тех пор, пока принимающий поток не обработает сообщение. Тем не менее поток отправки будет обрабатывать входящие сообщения без очереди, ожидая обработки своего сообщения. Чтобы избежать этого, используйте SendMessageTimeout с параметром SMTO_BLOCK. Дополнительные сведения о несложенных сообщениях см. в разделе Сообщения без очереди.

Приложение со специальными возможностями может использовать SendMessage для отправки WM_APPCOMMAND сообщений в оболочку для запуска приложений. Эта функция не гарантирует работу с другими типами приложений.

Примеры

Пример см. в разделе Отображение ввода с клавиатуры.

Примечание

Заголовок winuser.h определяет SendMessage в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header 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