從任務通知區啟動螢幕保護程式(轉)

heying1229發表於2007-07-28
本文透過一個快速啟動螢幕保護程式的小程式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@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10172717/viewspace-928850/,如需轉載,請註明出處,否則將追究法律責任。

相關文章