BroadcastSystemMessage函数
向指定的收件人发送邮件。接收者可以是应用,可安装的驱动器,网络驱动器,系统级设备驱动器或这些系统组件的任何组合。
要在定义请求时接收附加信息,可使用BroadcastSystemMessageEx函数
long WINAPI BroadcastSystemMessage(
_In_ DWORD dwFlags,
_Inout_opt_ LPDWORD lpdwRecipients,
_In_ UINT uiMessage,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
参数
dwFlags [in]
类型:DWORD
广播选项。此参数可以是以下一个或多个值。
BSF_ALLOWSFW 0x00000080
使接收方在处理消息时设置前台窗口。
BSF_FLUSHDISK 0x00000004
每个收件人处理邮件后刷新磁盘。
BSF_FORCEIFHUNG 0x00000020
继续广播消息,即使超时时间过去或收件人之一没有响应。
BSF_IGNORECURRENTTASK 0x00000002
不将消息发送到属于当前任务的窗口。这防止应用程序接收其自己的消息。
BSF_NOHANG 0x00000008
强制非响应应用程序超时。如果其中一个收件人超时,请不要继续广播该邮件。
BSF_NOTIMEOUTIFNOTHUNG 0x00000040
等待对消息的响应,只要接收者没有反应。不超时。
BSF_POSTMESSAGE 0x00000010
张贴讯息。不要与BSF_QUERY结合使用。
BSF_QUERY 0x00000001
一次将邮件发送到一个收件人,只有当前收件人返回TRUE时才发送给后续收件人。
BSF_SENDNOTIFYMESSAGE 0x00000100
使用SendNotifyMessage函数发送消息。不要与BSF_QUERY结合使用。
lpdwRecipients [in,out,optional]
类型:LPDWORD
指向包含和接收有关消息的收件人的信息的变量的指针。
当函数返回时,此变量接收这些值的组合,标识哪些收件人实际接收到该消息。
如果此参数为NULL,则函数将广播到所有组件。
此参数可以是以下一个或多个值。
BSM_ALLCOMPONENTS 0x00000000
广播到所有系统组件。
BSM_ALLDESKTOPS 0x00000010
广播到所有桌面。需要SE_TCB_NAME权限。
BSM_APPLICATIONS 0x00000008
广播到应用程序。
uiMessage [in]
类型:UINT
要发送的消息。
有关系统提供的消息的列表,请参阅系统定义的消息。
wParam [in]
类型:WPARAM
其他消息特定信息。
lParam [in]
类型:LPARAM
其他消息特定信息。
返回值
类型:
类型:long
如果函数成功,返回值为正值。
如果函数无法广播消息,则返回值为-1。
如果dwFlags中参数是BSF_QUERY和至少一个接收者返回BROADCAST_QUERY_DENY到相应的消息,该返回值是零。要获取扩展错误信息,请调用GetLastError。
备注
如果BSF_QUERY没有指定,函数发送指定的消息给所有要求收件人,无视这些收件人返回的值。
系统仅对系统消息(范围为0到(WM_USER -1)的系统消息进行编组。要将其他消息(那些> = WM_USER)发送到另一个进程,您必须执行自定义编组。
示例:
一个进程可以通过使用BroadcastSystemMessage函数广播私人消息来终止其他进程 ,如下所示:
DWORD dwRecipients = BSM_APPLICATIONS;
UINT uMessage = PM_MYMSG;
WPARAM wParam = 0;
LPARAM lParam = 0;
BroadcastSystemMessage(
BSF_IGNORECURRENTTASK,//不向此进程发送消息
&dwRecipients,//仅广播到应用程序
uMessage,//注册的私人消息
wParam,//消息特定值
lParam); //消息特定值
接收专用消息的进程调用 ExitProcess来终止其执行。