介绍

BroadcastSystemMessage函数 可以发送一个消息给指定一类接受者(从Broadcast就可以看出,广播的意思)。这里的接受者可以是,一般的应用程序、可装载的驱动程序、网络驱动程序、系统级的设备驱动程序 或者 上述的任意组合。

函数原型

long BroadcastSystemMessage(// 广播选项DWORD   flags,// in:指定接受这个消息的接受者类别;out:实际接收消息的接受者类别LPDWORD lpInfo,// 消息IDUINT    Msg,// 消息参数1WPARAM  wParam,// 消息参数2LPARAM  lParam
);

下面我们来 具体讲解参数:

flags

广播选项,可以是下面中的1个 或者 多个组合。

Value Meaning
BSF_ALLOWSFW 从名字上拆解,Broadcast System Flag,allow set foreground window。允许接受者在处理消息的时候将窗口设置为前置窗口。
BSF_FLUSHDISK Flush Disk,在每个接受者处理完消息后刷新磁盘
BSF_FORCEIFHUNG force if hung,继续广播 即时接受者之一没有响应 或者 超时
BSF_IGNORECURRENTTASK ignore current task,忽略掉当前任务 也就是自己,消息不会发到当前程序
BSF_NOHANG no hang,不要悬挂,没有响应的应用程序视作超时。其中一个接受者超时就不再继续广播。
BSF_NOTIMEOUTIFNOTHUNG no time out if no hung,只要接受者没有给不响应的动作,就一直等待这个消息的响应,不做超时处理。
BSF_POSTMESSAGE post message,使用post方式发送消息,不能和BSF_QUERY组合使用
BSF_QUERY 一次发送一个消息,当前接受者返回TRUE之后才会继续往后发
BSF_SENDNOTIFYMESSAGE 使用SendNotifyMessage函数发送消息,不能够和BSF_QUERY组合使用

lpInfo

输入输出变量。作为输入变量时,指定接受这个消息的接受者类别;作为输出变量时,当函数返回时 该变量为 实际接收消息的接受者类别。

Value Meaning
BSM_ALLCOMPONENTS broadcast system message, 广播给所有系统组件
BSM_ALLDESKTOPS 广播给所有的桌面,需要SE_TCB_NAME设置特权
BSM_APPLICATIONS 广播给所有的应用程序

Msg

消息ID,这里我们一般不直接写消息ID,而是用一个字符串来创建一个消息ID,RegisterWindowMessage

wParam、lParam,消息携带参数。

用法

一般这里广播消息,都是广播给我们自己的程序使用的,不然别的程序又不认识你。

笔者在项目有这样用过这个函数,我们的程序只有一个实例,如果发现是再次打开就把之前打开的程序前置显示,这里通知已打开的程序就是使用的 BroadcastSystemMessage函数去通知的。

具体代码如下:

// 程序启动入口
BOOL CMyApp::InitInstance()
{CString   strAppName = _T("AC32BEA6-58BB-4EB5-A52A-15C7CA2139E5");HANDLE hMutex = CreateMutex( NULL,   TRUE,   strAppName );if   ( GetLastError()   ==   ERROR_ALREADY_EXISTS ){static UINT showMyAppMsg = RegisterWindowMessage( L"MYAPP_SHOW" );DWORD dwRecipients = BSM_APPLICATIONS; // 只给一般的应用程序广播BroadcastSystemMessage( BSF_POSTMESSAGE, // Post message方式&dwRecipients,   // 只给一般的应用程序广播showMyAppMsg,    // 消息ID0,0 );    return FALSE;}// ...
}// 窗口的消息处理函数
LRESULT CMyDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{LRESULT lrst=CWnd::DefWindowProc(message, wParam, lParam);static UINT showMyAppMsg = RegisterWindowMessage( L"MYAPP_SHOW" );if ( message == showMyAppMsg ){ShowWindow( SW_SHOW );SetForegroundWindow();return lrst;}// ...
}

Windows编程—BroadcastSystemMessage函数详解相关推荐

  1. Windows编程入门程序详解

    Windows编程入门程序详解 1.     程序 /************************************************************************* ...

  2. Window编程主函数详解

    Windows编程中主函数是非常重要的,但是却在编写上非常简单(可能我这个初学者还不是很理解),有的时候我们.总体上可以分为这几个部分. 第一个是主函数的生命 WinMain(),这个含函数在百度上是 ...

  3. linux网络编程常用函数详解与实例(socket--bind--listen--accept)

    常用的网络命令: netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可 ...

  4. Windows下system()函数详解

    Start~~ 在C++/C的Windows环境中,对于控制台窗口的处理,有一个函数必须知道: system(" "); 是的,没错.它可以调动Cmd控制台中的命令,来方便程序员的 ...

  5. Linux文件编程常用函数详解——lseek()函数

    lseek()函数的头文件和形式: #include <sys/types.h> #include <unistd.h> off_t lseek(int filedes, of ...

  6. linux socket编程 accept函数详解

    int accept(int sockfd,struct sockaddr * addr,socklen_t * addrlen); sockfd的参数为listen()函数返回的监听套接字: add ...

  7. system()函数详解

    windows下system () 函数详解 windows操作系统下system () 函数详解(主要是在C语言中的应用) 函数名: system 功 能: 发出一个DOS命令 用 法: int s ...

  8. c语言windows驱动编程入门,Windows驱动开发技术详解 PDF扫描版[175MB]

    Windows驱动开发技术详解由浅入深.循序渐进地介绍了windows驱动程序的开发方法与调试技巧.本书共分23章,内容涵盖了windows操作系统的基本原理.nt驱动程序与wdm驱动程序的构造.驱动 ...

  9. C语言网络编程:accept函数详解

    文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...

最新文章

  1. matlab GUI figure置右上角
  2. PHP二分法查找,MYSQL索引即为用了此查找
  3. 微信公众平台开发教程(八)Session处理
  4. swift. 扩展类添加属性_Swift快速为类扩展属性
  5. oracle多列转换成树结构,如何将树“压缩”为Oracle中层次结构上的聚合数据?
  6. EasyUI:datagrid冻结表头
  7. 放荡不羁SVG讲解与实战之Android高级UI
  8. Windows 系统封装
  9. DVB-S/S2天线及信号相关知识
  10. SQL语句预处理防注入——完整版
  11. Qt--ipad滑屏效果
  12. Hive left semi join ,select 和 where中不能出现右表字段/不会生成笛卡尔积
  13. 【netron】模型可视化工具netron
  14. android 怎样删除sim卡中的联系人
  15. R语言使用epiDisplay包的kap函数(kap.m.raters)计算Kappa统计量的值(总一致性、期望一致性)、对多个评分对象的结果进行一致性分析、评分的类别为多个类别
  16. 算法训练 逗志芃的危机
  17. Verilog HDL语言总结(全)
  18. linux修改blacklist.conf的权限不够怎么办,跪求 /etc/modprobe.d/blacklist.conf
  19. 办理3C认证多少钱?包含哪些费用?
  20. 《论语》原文及其全文翻译 学而篇14

热门文章

  1. Arturia Prophet Mac音频插件:将Prophet 5,Prophet VS,Prophet Hybrid三种不同音乐合成器于一体
  2. 提高篇 第二部分 字符串算法 第1章 哈希和哈希表
  3. P1002 [NOIP2002 普及组] 过河卒(python3实现)
  4. P2089 烤鸡(python3实现)
  5. 第十一届蓝桥杯省赛C++组试题 第4题 选择题判定
  6. python0b1011_1011 A+B 和 C (15分)Python参考答案
  7. STM32F407+CubeMX - 使用GPIO翻转+示波器测量函数的执行时间
  8. 不允许指针指向不完整的类类型_8.7 C语言动态内存分配与指向它的指针变量
  9. Java笔记-DH密钥交换
  10. canvas笔记-在canvas中使用其他HTML元素