從任務通知區啟動螢幕保護程式(轉)
本文透過一個快速啟動螢幕保護程式的小程式SSLaunch,來介紹應用程式如何向工作列通知區加入圖示、如何禁止多個Win32例項以及螢幕保護程式的有關內容。
SSLaunch用C語言編寫,用Visual C++ 5.0編譯,是一個基於無模式對話方塊的程式,同時禁止多個例項,即一次只能有一個例項執行。工作列通知區圖示在對話方塊初始化時加入,對話方塊響應程式定義的回撥訊息,當滑鼠左鍵按下時,彈出一由螢幕保護程式名填充的上下文選單。對話方塊關閉(即程式退出)時刪除工作列通知區圖示。如果讀者有興趣可以很容易地把它移植成基於 MFC 的程式。
1、工作列通知區
Windows 95的工作列中有一個通知區, 應用程式可以把一個圖示放入其中,以表示操作狀態,並可以有與之相關聯的用作說明控制。當滑鼠出現在此圖示的矩形邊界內時,向相應的應用程式傳送應用程式定義的回撥訊息。 應用程式透過傳送訊息增加、修改、刪除工作列圖示。訊息的傳送透過呼叫函式Shell_NotifyIcon來完成,如果呼叫成功,則返回TRUE;否則,返回FALSE。Shell_NotifyIcon函式原形如下:
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(
DWORD dwMessage, // 訊息識別符號
PNOTIFYICONDATA pnid // NOTIFYICONDATA 結構
);
訊息識別符號可以是 :
NIM_ADD 向工作列通知區加入圖示
NIM_DELETE 從工作列通知區刪除圖示
NIM_MODIFY 改變工作列通知區圖示
NOTIFYICONDATA 結構:
typedef struct _NOTIFYICONDATA {
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
char szTip[64];
} NOTIFYICONDATA, *PNOTIFYICONDATA;
其中:
cbSize NOTIFYICONDATA 結構大小
hWnd 接收回撥訊息視窗控制程式碼
uID 工作列通知區圖示標識
uFlags 指定該結構中那些成員有效
uCallbackMessage 應用程式定義的回撥訊息
hIcon 工作列通知區圖示控制程式碼
szTip 工作列通知區提示字串
引數uFlags可以是下列值的組合:
NIF_ICON 工作列通知區圖示有效
NIF_MESSAGE 應用程式定義的回撥訊息有效
NIF_TIP 工作列通知區提示字串有效
a.工作列通知區圖示的加入
BOOL SSLaunch_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
// Add an notification icon to the taskbar
NOTIFYCONDATA nid;
NOTIFYICONDATA nid;
nid.cbSize = sizeof(nid);
nid.hWnd = hwnd;
nid.uID = IDI_SSLAUNCH;
nid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
nid.uCallbackMessage = WM_SSLAUNCHICONNOTIFY;
nid.hIcon=LoadIcon(GetWindowInstance(hwnd),
KEINTRESOURCE(IDI_SSLAUNCH));
lstrcpyn(nid.szTip,g_szAppName,sizeof(nid.szTip) /sizeof(nid.szTip[0]));
return(Shell_NotifyIcon(NIM_ADD, &nid))
}
b.工作列通知區圖示的刪除
應用程式退出時,應該刪除任務通知區上相應的圖示:
void SSLaunch_OnDestroy(HWND hwnd)
{
// Remove the notification icon from the taskbar
NOTIFYICONDATA nid;
nid.cbSize = sizeof(nid);
nid.hWnd = hwnd;
nid.uID = IDI_SSLAUNCH;
Shell_NotifyIcon(NIM_DELETE, &nid);
}
c.應用程式定義回撥訊息的接收
若為工作列通知區指定了回撥訊息,則系統會於滑鼠事件在此區域發生時
嚮應用程式傳送此訊息,其中wParam是工作列通知區圖示標識,lParam
是滑鼠事件發生後的滑鼠資訊。
void SSLaunch_OnIconNotify(WPARAM wParam, LPARAM lParam)
{
UINT uID = (UINT)wParam;
UINT uMsg = (UINT)lParam;
if(uID == IDI_SSLAUNCH){
switch(uMsg){ [@more@]
SSLaunch用C語言編寫,用Visual C++ 5.0編譯,是一個基於無模式對話方塊的程式,同時禁止多個例項,即一次只能有一個例項執行。工作列通知區圖示在對話方塊初始化時加入,對話方塊響應程式定義的回撥訊息,當滑鼠左鍵按下時,彈出一由螢幕保護程式名填充的上下文選單。對話方塊關閉(即程式退出)時刪除工作列通知區圖示。如果讀者有興趣可以很容易地把它移植成基於 MFC 的程式。
1、工作列通知區
Windows 95的工作列中有一個通知區, 應用程式可以把一個圖示放入其中,以表示操作狀態,並可以有與之相關聯的用作說明控制。當滑鼠出現在此圖示的矩形邊界內時,向相應的應用程式傳送應用程式定義的回撥訊息。 應用程式透過傳送訊息增加、修改、刪除工作列圖示。訊息的傳送透過呼叫函式Shell_NotifyIcon來完成,如果呼叫成功,則返回TRUE;否則,返回FALSE。Shell_NotifyIcon函式原形如下:
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(
DWORD dwMessage, // 訊息識別符號
PNOTIFYICONDATA pnid // NOTIFYICONDATA 結構
);
訊息識別符號可以是 :
NIM_ADD 向工作列通知區加入圖示
NIM_DELETE 從工作列通知區刪除圖示
NIM_MODIFY 改變工作列通知區圖示
NOTIFYICONDATA 結構:
typedef struct _NOTIFYICONDATA {
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
char szTip[64];
} NOTIFYICONDATA, *PNOTIFYICONDATA;
其中:
cbSize NOTIFYICONDATA 結構大小
hWnd 接收回撥訊息視窗控制程式碼
uID 工作列通知區圖示標識
uFlags 指定該結構中那些成員有效
uCallbackMessage 應用程式定義的回撥訊息
hIcon 工作列通知區圖示控制程式碼
szTip 工作列通知區提示字串
引數uFlags可以是下列值的組合:
NIF_ICON 工作列通知區圖示有效
NIF_MESSAGE 應用程式定義的回撥訊息有效
NIF_TIP 工作列通知區提示字串有效
a.工作列通知區圖示的加入
BOOL SSLaunch_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
// Add an notification icon to the taskbar
NOTIFYCONDATA nid;
NOTIFYICONDATA nid;
nid.cbSize = sizeof(nid);
nid.hWnd = hwnd;
nid.uID = IDI_SSLAUNCH;
nid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
nid.uCallbackMessage = WM_SSLAUNCHICONNOTIFY;
nid.hIcon=LoadIcon(GetWindowInstance(hwnd),
KEINTRESOURCE(IDI_SSLAUNCH));
lstrcpyn(nid.szTip,g_szAppName,sizeof(nid.szTip) /sizeof(nid.szTip[0]));
return(Shell_NotifyIcon(NIM_ADD, &nid))
}
b.工作列通知區圖示的刪除
應用程式退出時,應該刪除任務通知區上相應的圖示:
void SSLaunch_OnDestroy(HWND hwnd)
{
// Remove the notification icon from the taskbar
NOTIFYICONDATA nid;
nid.cbSize = sizeof(nid);
nid.hWnd = hwnd;
nid.uID = IDI_SSLAUNCH;
Shell_NotifyIcon(NIM_DELETE, &nid);
}
c.應用程式定義回撥訊息的接收
若為工作列通知區指定了回撥訊息,則系統會於滑鼠事件在此區域發生時
嚮應用程式傳送此訊息,其中wParam是工作列通知區圖示標識,lParam
是滑鼠事件發生後的滑鼠資訊。
void SSLaunch_OnIconNotify(WPARAM wParam, LPARAM lParam)
{
UINT uID = (UINT)wParam;
UINT uMsg = (UINT)lParam;
if(uID == IDI_SSLAUNCH){
switch(uMsg){ [@more@]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10172717/viewspace-928850/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 從任務通知區啟動螢幕保護程式 (轉)
- 用VB製作螢幕保護程式 (轉)
- 利用VB編寫螢幕保護程式 (轉)
- 呼叫系統螢幕保護 (轉)
- 智取螢幕保護密碼(轉)密碼
- 讓應用程式禁止Windows螢幕保護 (轉)Windows
- 用C#Builder編寫螢幕保護程式 (轉)UI
- Aerial for Mac鳥瞰螢幕保護程式Mac
- 金鋒螢幕保護程式2.0破解
- 在桌面上建立螢幕保護程式圖示(轉)
- Mac簡單時鐘螢幕保護程式Mac
- w10螢幕保護怎麼取消_win10關閉螢幕保護的方法Win10
- Aerial for Mac(mac最美的鳥瞰螢幕保護程式)Mac
- 螢幕保護控制工具:ScreenSaverNow for MacMac
- Aerial for Mac(mac高畫質鳥瞰螢幕保護程式)Mac
- 保護您的Flutter應用程式:實現隱私螢幕Flutter
- Word Clock for Mac(mac螢幕保護軟體) v1.0.7啟用版Mac
- 螢幕設定成淺綠色可以保護眼睛
- win10螢幕保護時間怎麼設定Win10
- win10系統怎麼設定螢幕保護?Win10
- flutter 啟動螢幕使用 Lottie 動畫Flutter動畫
- Oracle自動維護任務Oracle
- 夢想圖片螢幕保護V2.6破解簡要分析
- 關於螢幕程式設計(轉)程式設計
- 動態改變螢幕設定 (轉)
- Win10系統設定接投影儀演示時自動禁用螢幕保護的方法Win10
- 啟動和停止任務
- ubuntu螢幕旋轉Ubuntu
- PBN飛行程式保護區樣例行程
- 螢幕取詞核心內幕 (轉)
- Storm任務啟動過慢ORM
- 判斷螢幕旋轉的事件程式碼事件
- ORACLE 11G 自動維護任務Oracle
- ABAP選擇螢幕:根據使用者選擇動態顯示螢幕(轉老宋)
- orientationchange 螢幕旋轉事件事件
- 貝爾金Belkin為iPhone 13系列打造UltraGlass與防眩光螢幕保護膜iPhone
- Swift橫豎屏切換、自動旋轉螢幕、手動旋轉螢幕、鎖定當前螢幕禁止轉屏、橫豎屏頁面跳轉過度、橫豎屏UI適配SwiftUI
- RxJava2 實戰知識梳理(10) 螢幕旋轉導致 Activity 重建時恢復任務RxJava