複製鏈接
請複製以下鏈接發送給好友

系統托盤

鎖定
系統托盤是個特殊區域,通常在桌面的底部,在那裏,用户可以隨時訪問正在運行中的那些程序。在微軟的Windows裏,系統托盤常指任務欄的狀態區域;在Gnome的桌面時,常指佈告欄區域;在KDE桌面時,指系統托盤。在每個系統裏,托盤是所有正運行在桌面環境裏的應用程序共享的區域。
中文名
系統托盤
外文名
The system tray
所在地
電腦桌面底部
用    途
訪問正在運行中的那些程序

系統托盤訪問系統托盤

java.awt.SystemTray代表了桌面上的系統托盤。通過調用靜態方法SystemTray.getSystemTray來訪問系統托盤。然後,在調用此方法前,應該用靜態方法SystemTray.isSupported來檢測系統托盤是否可被支持。如果操作系統上系統托盤還未準備就緒或者不被支持,那麼方法
isSupported返回false。此時,應用程序如果試圖調用方法 getSystemTray,那麼將拋出異常 java.lang.UnsupportedOperationException
每個Java應用程序有一個單一的SystemTray實例。因此,一個應用程序不應創建它本身的SystemTray實例,而是應通過調用方法getSystemTray來獲得當前可用的系統托盤。
系統托盤包含一個或多個托盤圖標,這些圖標是以調用方法add(java.awt.TrayIcon)添加的,當不需要這些圖標的時候,通過調用方法remove(java.awt.TrayIcon)來剔除。
注意:Mustang新增加的代碼庫裏指出,如果JAVA運行環境或操作系統發現不能把圖標添加到系統托盤的時候,方法add會拋出一個AWTException異常。例如,在X-WINDOWS桌面環境下,如果
系統托盤不存在,那麼AWTException異常將拋出。

系統托盤使用技巧

設置NOTIFYICONDATA型的結構體變量的成員變量的值: cbSize 該結構體的大小。 hwnd 窗口的句柄。當鼠標滑過該小圖標時,該窗口將接收到相關的消息。 uID 小圖標的ID號。您可以取任意值,只是當您的應用程序有不止一個小圖標時,您要能夠區分出到底是那一個小圖標接收到了鼠標的消息,也即ID號必須唯一。 uFlags 指定該結構體變量的那些成員變量有效。 NIF_ICON 有效。 NIF_MESSAGE 有效。 NIF_TIP 有效。 uCallbackMessage 自定義的消息。當鼠標對小圖標動作時,WINDOWS外殼將把該消息發送到您的應用程序。該消息的值您可以自己定義。 hIcon 放入系統托盤中的圖標的句柄。 szTip 64字節的緩衝區,它用來放入提示字符串,當鼠標停留在小圖標上時,就會顯示該字符串。 調用Shell_NotifyIcon函數。該函數在shell32.inc中定義,其原型如下:
Shell_NotifyIcon PROTO dwMessage:DWORD ,pnid:DWORD dwMessage 是發送到WINDOWS外殼的消息:
NIM_ADD 把小圖標加到系統托盤區
NIM_DELETE 從系統托盤中刪除小圖標。
NIM_MODIFY 修改小圖標。
pnid 是指向NOTIFYICONDATA型結構體變量的指針。
如果您想要加入一個小圖標就用NIM_ADD,刪除時使用NIM_DELETE消息。
基本上的消息就是這些。但是大多數的情況下,您不會僅僅滿足把一個小圖標放到那裏。您還必須要對鼠標事件作出適當的反應。您可以在NOTIFYICONDATA型的結構體變量的成員變量uCallbackMessage 中設置您要處理的消息,然後WINDOWS外殼將在發生這些事件時通知您的應用程序。隨着消息傳送的參數wParamlParam的值如下:
wParam 小圖標的ID號。它和您在NOTIFYICONDATA型結構體變量中的成員變量uID中設置的值一樣。 lParam 低字包含鼠標消息。譬如,用户在小圖標上按下了右鍵時,lParam中將包含WM_RBUTTONDOWN消息。 大多數的系統托盤中的小圖標,在用户用鼠標右擊時都會彈出一個菜單以方便用户選擇。我們可先創建菜單,然後調用TrackPopupMenu函數來顯示它。步驟如下:
調用CreatePopupMenu函數來創建菜單。該函數創建一個空的菜單。如果成功,將在eax中返回該菜單的句柄。 調用AppendMenu, InsertMenu 或 InsertMenuItem來向菜單中加入菜單項。 當您想在當前鼠標位置顯示該菜單時,調用GetCursorPosition函數來得到鼠標當前的屏幕位置,然後調用TrackPopupMenu來顯示菜單。當用户從彈出式菜單中選擇了一個菜單項時,WINDOWS將發送WM_COMMAND消息給您應用程序的消息處理過程,這和通常的菜單選擇是一樣的。

系統托盤常見問題

注意:當您使用系統托盤中的小圖標時有兩件比較討厭的事:
該菜單可能不會像通常那樣馬上消失掉。這是因為從彈出式接收消息的窗口必須是前景窗口。調用SetForegroundWindow函數就可以糾正該錯誤; 在調用了SetForegroundWindow函數後,您會發現第一次該彈出式菜單會正常彈出而且工作的很好。但是隨後,該菜單只是一彈出就立即消失。根據MSDN,這麼做是故意的。為了使得彈出菜單保持住,必須要求下一個切換到的是程序的主窗口。您可以通過郵寄任何消息給該程序的窗口來強行進行任務切換。注意要使用PostMessage而不是SendMessage