Windows编程—BroadcastSystemMessage函数详解
介绍
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函数详解相关推荐
- Windows编程入门程序详解
Windows编程入门程序详解 1. 程序 /************************************************************************* ...
- Window编程主函数详解
Windows编程中主函数是非常重要的,但是却在编写上非常简单(可能我这个初学者还不是很理解),有的时候我们.总体上可以分为这几个部分. 第一个是主函数的生命 WinMain(),这个含函数在百度上是 ...
- linux网络编程常用函数详解与实例(socket--bind--listen--accept)
常用的网络命令: netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可 ...
- Windows下system()函数详解
Start~~ 在C++/C的Windows环境中,对于控制台窗口的处理,有一个函数必须知道: system(" "); 是的,没错.它可以调动Cmd控制台中的命令,来方便程序员的 ...
- Linux文件编程常用函数详解——lseek()函数
lseek()函数的头文件和形式: #include <sys/types.h> #include <unistd.h> off_t lseek(int filedes, of ...
- linux socket编程 accept函数详解
int accept(int sockfd,struct sockaddr * addr,socklen_t * addrlen); sockfd的参数为listen()函数返回的监听套接字: add ...
- system()函数详解
windows下system () 函数详解 windows操作系统下system () 函数详解(主要是在C语言中的应用) 函数名: system 功 能: 发出一个DOS命令 用 法: int s ...
- c语言windows驱动编程入门,Windows驱动开发技术详解 PDF扫描版[175MB]
Windows驱动开发技术详解由浅入深.循序渐进地介绍了windows驱动程序的开发方法与调试技巧.本书共分23章,内容涵盖了windows操作系统的基本原理.nt驱动程序与wdm驱动程序的构造.驱动 ...
- C语言网络编程:accept函数详解
文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...
最新文章
- matlab GUI figure置右上角
- PHP二分法查找,MYSQL索引即为用了此查找
- 微信公众平台开发教程(八)Session处理
- swift. 扩展类添加属性_Swift快速为类扩展属性
- oracle多列转换成树结构,如何将树“压缩”为Oracle中层次结构上的聚合数据?
- EasyUI:datagrid冻结表头
- 放荡不羁SVG讲解与实战之Android高级UI
- Windows 系统封装
- DVB-S/S2天线及信号相关知识
- SQL语句预处理防注入——完整版
- Qt--ipad滑屏效果
- Hive left semi join ,select 和 where中不能出现右表字段/不会生成笛卡尔积
- 【netron】模型可视化工具netron
- android 怎样删除sim卡中的联系人
- R语言使用epiDisplay包的kap函数(kap.m.raters)计算Kappa统计量的值(总一致性、期望一致性)、对多个评分对象的结果进行一致性分析、评分的类别为多个类别
- 算法训练 逗志芃的危机
- Verilog HDL语言总结(全)
- linux修改blacklist.conf的权限不够怎么办,跪求 /etc/modprobe.d/blacklist.conf
- 办理3C认证多少钱?包含哪些费用?
- 《论语》原文及其全文翻译 学而篇14
热门文章
- Arturia Prophet Mac音频插件:将Prophet 5,Prophet VS,Prophet Hybrid三种不同音乐合成器于一体
- 提高篇 第二部分 字符串算法 第1章 哈希和哈希表
- P1002 [NOIP2002 普及组] 过河卒(python3实现)
- P2089 烤鸡(python3实现)
- 第十一届蓝桥杯省赛C++组试题 第4题 选择题判定
- python0b1011_1011 A+B 和 C (15分)Python参考答案
- STM32F407+CubeMX - 使用GPIO翻转+示波器测量函数的执行时间
- 不允许指针指向不完整的类类型_8.7 C语言动态内存分配与指向它的指针变量
- Java笔记-DH密钥交换
- canvas笔记-在canvas中使用其他HTML元素