Функция BroadcastSystemMessageExA (winuser.h)

Отправляет сообщение указанным получателям. Получателями могут быть приложения, устанавливаемые драйверы, сетевые драйверы, драйверы устройств на уровне системы или любое сочетание этих системных компонентов.

Эта функция похожа на BroadcastSystemMessage , за исключением того, что эта функция может возвращать дополнительные сведения от получателей.

Синтаксис

long BroadcastSystemMessageExA(
  [in]                DWORD    flags,
  [in, out, optional] LPDWORD  lpInfo,
  [in]                UINT     Msg,
  [in]                WPARAM   wParam,
  [in]                LPARAM   lParam,
  [out, optional]     PBSMINFO pbsmInfo
);

Параметры

[in] flags

Тип: DWORD

Параметр широковещательного вещания. Этот параметр может иметь одно или несколько из следующих значений.

Значение Значение
BSF_ALLOWSFW
0x00000080
Позволяет получателю задать окно переднего плана во время обработки сообщения.
BSF_FLUSHDISK
0x00000004
Очищает диск после того, как каждый получатель обработает сообщение.
BSF_FORCEIFHUNG
0x00000020
Продолжает транслировать сообщение, даже если истекло время ожидания или один из получателей не отвечает.
BSF_IGNORECURRENTTASK
0x00000002
Не отправляет сообщение в окна, принадлежащие текущей задаче. Это предотвращает получение приложением собственного сообщения.
BSF_LUID
0x00000400
Если задано BSF_LUID , сообщение отправляется в окно с тем же идентификатором LUID, что и в элементе luid структуры BSMINFO .

Windows 2000: Этот флаг не поддерживается.

BSF_NOHANG
0x00000008
Принудительное истечение времени ожидания приложения, не отвечающего на запросы. Если у одного из получателей истекает время ожидания, не продолжайте трансляцию сообщения.
BSF_NOTIMEOUTIFNOTHUNG
0x00000040
Ожидает ответа на сообщение, если получатель не отвечает. Время ожидания не истекает.
BSF_POSTMESSAGE
0x00000010
Публикует сообщение. Не используйте в сочетании с BSF_QUERY.
BSF_RETURNHDESK
0x00000200
Если доступ запрещен и этот и BSF_QUERY заданы, BSMINFO возвращает дескриптор рабочего стола и дескриптор окна. Если доступ запрещен и задан только BSF_QUERY , BSMINFO возвращает только дескриптор окна.

Windows 2000: Этот флаг не поддерживается.

BSF_QUERY
0x00000001
Отправляет сообщение одному получателю за раз, отправляя его следующему получателю только в том случае, если текущий получатель возвращает значение TRUE.
BSF_SENDNOTIFYMESSAGE
0x00000100
Отправляет сообщение с помощью функции SendNotifyMessage . Не используйте в сочетании с BSF_QUERY.

[in, out, optional] lpInfo

Тип: LPDWORD

Указатель на переменную, которая содержит и получает сведения о получателях сообщения.

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

Если этот параметр имеет значение NULL, функция передается всем компонентам.

Этот параметр может иметь одно или несколько из следующих значений.

Значение Значение
BSM_ALLCOMPONENTS
0x00000000
Широковещательная рассылка для всех компонентов системы.
BSM_ALLDESKTOPS
0x00000010
Широковещательная трансляция на всех рабочих столах. Требуется привилегия SE_TCB_NAME .
BSM_APPLICATIONS
0x00000008
Широковещательная рассылка в приложения.

[in] Msg

Тип: UINT

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

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

[in] wParam

Тип: WPARAM

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

[in] lParam

Тип: LPARAM

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

[out, optional] pbsmInfo

Тип: PBSMINFO

Указатель на структуру BSMINFO , которая содержит дополнительные сведения, если запрос отклонен и параметру dwFlags присвоено значение BSF_QUERY.

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

Тип: long

Если функция выполняется успешно, возвращаемое значение является положительным.

Если функция не может транслировать сообщение, возвращается значение –1.

Если параметр dwFlags имеет значение BSF_QUERY и хотя бы один получатель вернул BROADCAST_QUERY_DENY соответствующее сообщение, возвращаемое значение равно нулю. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Если BSF_QUERY не указан, функция отправляет указанное сообщение всем запрошенным получателям, игнорируя значения, возвращенные этими получателями.

Если поток вызывающего объекта находится на рабочем столе, отличном от потока окна, которое отклонило запрос, вызывающий объект должен вызвать Метод SetThreadDesktop(hdesk), чтобы запросить что-либо в этом окне. Кроме того, вызывающий объект должен вызвать CloseDesktop для возвращенного дескриптора hdesk .

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

Примечание

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

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header winuser.h (включая Windows.h)
Библиотека User32.lib
DLL User32.dll

См. также раздел

BSMINFO

BroadcastSystemMessage

Основные понятия

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

Справочные материалы

SendNotifyMessage