實現系統托盤的功能

2021-04-13 12:19:14 字數 1274 閱讀 8398

windows桌面的系統托盤位於工作列的右側,即windows桌面的右下方,它常用來顯示一些系統的狀態。如系統時間,音量控制以及其他的一些圖示。

常常能見到一些優秀的軟體在執行後會將其應用程式圖示加入到系統托盤中,如金山詞霸。如果能將自己編寫的應用程式的圖樣也加入到系統托盤中,將會使程式顯得很有專業水準。

其實要實現我個功能並不難,與系統托盤通訊的函式只有乙個:shell_notifyicon(dword dwmessage,

pnotifyicondata pnid),首先看一下該函式的兩個引數:

第乙個引數dwmessage可以取以下值:

(1):nim_add 向托盤加入乙個圖示;

(2):nim_modify 修改托盤中的圖示;

(3):nim_delete 從托盤中刪除乙個圖示;

第二個引數pnid是 notifyicondata 結構體的乙個指標。該結構體的原形如下:

typedef struct _notifyicondata notifyicondata, *pnotifyicondata;

為了接收到來自系統托盤的通知訊息,可以將ucallbackmessage設定為所定義的訊息id值,同時設定nif_message標誌,這樣當使用者在圖示上移動或按下滑鼠時,windows將發出訊息,該訊息的messageid是你在ucallbackmessage中定義的值;wparam是定義的uid的值;而lparam是滑鼠事件(如wm_lbuttondown),這樣應用程式就能夠響應該事件了。

因此,為了將自己的應用程式加入到系統托盤中去,首先必須建立乙個處理托盤通知訊息的視窗物件,然後將視窗物件與自己的托盤通知訊息聯絡起來,並建立相應的托盤通知訊息的訊息對映機制,以便視窗物件能處理相應的事件。

可以看到結構體notifyicondata中,其成員變數hwnd,uid,uflag均用於在視窗物件與你自己的托盤通知訊息之間建立聯絡,而成員變數ucallbackmessage則必須是對應於視窗物件的托盤通知訊息id值。

於是要完成的工作如下:

(1):建立乙個處理托盤通知訊息的視窗物件;

(2):建立乙個結構體notifyicondata的變數,交給變數的相應域賦值以在托盤通知訊息與視窗物件之間建立聯絡;

(3):建立相應的箍盤通知訊息對映機制;

(4):呼叫shell_notifyicon函式以在系統箍盤中加入,修改或刪除圖示;

(5):當然別忘了在視窗物件中編寫相應的事件響應函式。

這個功能是大家經常都會看到的,可有的人不知道是怎麼實現的,在此寫出來,只有那些想實現系統托盤功能而又不知道怎麼實現的同志們,希望對你們有用。

簡單實現系統托盤

使用 delphi 提供的 ttrayicon 類,兩三行程式甚至不寫程式 設計時選擇幾下 即可實現.設計時的準備工作 1 新增 ttrayicon tpopupmenu 控制項,tpopupmenu 用於托盤的右鍵選單.2 隨意給 tpopupmenu 新增些選單項.檔案 unitunit1 in...

RCP工程系統托盤功能

在開發rcp工程過程中,有時候在最小化視窗的時候希望將視窗託管在系統欄。新增 如下 public void postwindowopen private void hookminimize final iworkbenchwindow window trayitem.addlistener swt....

系統托盤程式設計

所謂的 托盤 在windows系統介面中,指的就是下面任務條右側,有繫 統時間等等的標誌的那一部分。二 托盤程式設計相關函式 winshellapi bool winapi shell notifyicon dword dwmessage,pnotifyicondata pnid 這個函式呢,負責向...