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


Функция 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
Отправляет сообщение с помощью функции sendNotifyMess age . Не используйте в сочетании с BSF_QUERY.

[in, out, optional] lpInfo

Тип: LPDWORD

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

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

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

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

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

[in] Msg

Тип: UINT

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

Списки системных сообщений см. в System-Defined сообщениях.

[in] wParam

Тип: WPARAM

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

[in] lParam

Тип: LPARAM

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

[out, optional] pbsmInfo

Тип: PBSMINFO

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

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

Тип: длинные

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

Если функция не может транслировать сообщение, возвращаемое значение равно –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 [только классические приложения]
целевая платформа Виндоус
заголовка winuser.h (включая Windows.h)
библиотеки User32.lib
DLL User32.dll

См. также

BSMINFO

BroadcastSystemMessage

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

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

Справочник

SendNotifyMessage