[英]Is my application icon visible in the Windows notification area?
我的軟件有一個通知圖標。 Windows 默認隱藏非活動圖標。 當用戶關閉我的應用程序時,我想通知他們,該應用程序在后台仍處於活動狀態,他們可以通過隱藏通知區域中的圖標訪問它。
只有當圖標確實不可見時,我才想顯示此消息。
使用Shell_NotifyIconGetRect
並沒有多大幫助,因為即使圖標被隱藏,它仍然成功並返回箭頭圖標的坐標。
有沒有其他方法可以確定我的通知圖標當前是否可見? 或者,有沒有辦法找出箭頭圖標的坐標——然后我可以將它們與我尋找圖標的坐標進行比較。 或者是否至少有一種方法可以確定是否顯示了箭頭圖標(這對我的后備解決方案會有所幫助)。
使用
Shell_NotifyIconGetRect
並沒有多大幫助,因為即使圖標被隱藏,它仍然成功並返回箭頭圖標的坐標。
我測試后的結果不是這樣的。
我創建了一個示例並使用了以下代碼:
static NOTIFYICONDATA nid;
static NOTIFYICONIDENTIFIER niif;
case WM_CREATE:
{
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = hwnd;
nid.uID = 1001;
nid.uCallbackMessage = WM_MYMESSAGE;
nid.hIcon = LoadIcon(NULL, IDI_QUESTION);
strcpy(nid.szTip, "Test Tool");
nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
nid.dwStateMask = NIS_HIDDEN;
size_t nidszTipLength = sizeof(nid.szTip) / sizeof(nid.szTip[0]);
Shell_NotifyIcon(NIM_ADD, &nid);
niif.cbSize = sizeof NOTIFYICONIDENTIFIER;
niif.hWnd = nid.hWnd;
niif.uID = nid.uID;
niif.guidItem = GUID_NULL;
return 0;
}
然后我使用 Shell_NotifyIconGetRect 來獲取圖標的坐標:
RECT rc;
HRESULT hr = Shell_NotifyIconGetRect(&niif, &rc);
當圖標在隱藏區域時:
當我修改它的位置時:
可以看出,即使在隱藏區域,也可以通過Shell_NotifyIconGetRect
函數獲取圖標的坐標。
同樣,我測試了不在隱藏區域的情況:
可以發現圖標的大小和坐標發生了變化,可以根據它們判斷圖標是否在隱藏區域。
編輯:
當隱藏區域關閉時:
如果圖標顯示在通知區域,則Shell_NotifyIconGetRect
函數返回S_OK
:
如果圖標位於通知區域的隱藏區域,則函數返回S_FALSE
:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.