微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我的应用程序图标在Windows通知区域中可见吗?

如何解决我的应用程序图标在Windows通知区域中可见吗?

我的软件有一个通知图标。 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);

图标位于隐藏区域时:

enter image description here

当我修改其位置时:

enter image description here

可以看出,即使在隐藏区域中,也可以通过Shell_NotifyIconGetRect函数获得图标的坐标。

类似地,我测试了不在隐藏区域中的情况:

enter image description here

您可以发现图标的大小和坐标已更改,并可以根据它们判断图标是否在隐藏区域中。

编辑:

当隐藏区域关闭时:

如果图标显示在通知区域中,则Shell_NotifyIconGetRect函数将返回S_OK

enter image description here

如果图标位于通知区域的隐藏区域中,则该函数返回S_FALSE

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。