簡體   English   中英

我的應用程序圖標在 Windows 通知區域中是否可見?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM