日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows编程—BroadcastSystemMessage函数详解

發(fā)布時間:2025/3/15 windows 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows编程—BroadcastSystemMessage函数详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

介紹

BroadcastSystemMessage函數(shù) 可以發(fā)送一個消息給指定一類接受者(從Broadcast就可以看出,廣播的意思)。這里的接受者可以是,一般的應(yīng)用程序、可裝載的驅(qū)動程序、網(wǎng)絡(luò)驅(qū)動程序、系統(tǒng)級的設(shè)備驅(qū)動程序 或者 上述的任意組合。

函數(shù)原型

long BroadcastSystemMessage(// 廣播選項DWORD flags,// in:指定接受這個消息的接受者類別;out:實際接收消息的接受者類別LPDWORD lpInfo,// 消息IDUINT Msg,// 消息參數(shù)1WPARAM wParam,// 消息參數(shù)2LPARAM lParam );

下面我們來 具體講解參數(shù):

flags

廣播選項,可以是下面中的1個 或者 多個組合。

ValueMeaning
BSF_ALLOWSFW從名字上拆解,Broadcast System Flag,allow set foreground window。允許接受者在處理消息的時候?qū)⒋翱谠O(shè)置為前置窗口。
BSF_FLUSHDISKFlush Disk,在每個接受者處理完消息后刷新磁盤
BSF_FORCEIFHUNGforce if hung,繼續(xù)廣播 即時接受者之一沒有響應(yīng) 或者 超時
BSF_IGNORECURRENTTASKignore current task,忽略掉當(dāng)前任務(wù) 也就是自己,消息不會發(fā)到當(dāng)前程序
BSF_NOHANGno hang,不要懸掛,沒有響應(yīng)的應(yīng)用程序視作超時。其中一個接受者超時就不再繼續(xù)廣播。
BSF_NOTIMEOUTIFNOTHUNGno time out if no hung,只要接受者沒有給不響應(yīng)的動作,就一直等待這個消息的響應(yīng),不做超時處理。
BSF_POSTMESSAGEpost message,使用post方式發(fā)送消息,不能和BSF_QUERY組合使用
BSF_QUERY一次發(fā)送一個消息,當(dāng)前接受者返回TRUE之后才會繼續(xù)往后發(fā)
BSF_SENDNOTIFYMESSAGE使用SendNotifyMessage函數(shù)發(fā)送消息,不能夠和BSF_QUERY組合使用

lpInfo

輸入輸出變量。作為輸入變量時,指定接受這個消息的接受者類別;作為輸出變量時,當(dāng)函數(shù)返回時 該變量為 實際接收消息的接受者類別。

ValueMeaning
BSM_ALLCOMPONENTSbroadcast system message, 廣播給所有系統(tǒng)組件
BSM_ALLDESKTOPS廣播給所有的桌面,需要SE_TCB_NAME設(shè)置特權(quán)
BSM_APPLICATIONS廣播給所有的應(yīng)用程序

Msg

消息ID,這里我們一般不直接寫消息ID,而是用一個字符串來創(chuàng)建一個消息ID,RegisterWindowMessage

wParam、lParam,消息攜帶參數(shù)。

用法

一般這里廣播消息,都是廣播給我們自己的程序使用的,不然別的程序又不認(rèn)識你。

筆者在項目有這樣用過這個函數(shù),我們的程序只有一個實例,如果發(fā)現(xiàn)是再次打開就把之前打開的程序前置顯示,這里通知已打開的程序就是使用的 BroadcastSystemMessage函數(shù)去通知的。

具體代碼如下:

// 程序啟動入口 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; // 只給一般的應(yīng)用程序廣播BroadcastSystemMessage( BSF_POSTMESSAGE, // Post message方式&dwRecipients, // 只給一般的應(yīng)用程序廣播showMyAppMsg, // 消息ID0,0 ); return FALSE;}// ... }// 窗口的消息處理函數(shù) 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;}// ... } 新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的Windows编程—BroadcastSystemMessage函数详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。