Windows 通知区域中是否显示我的应用程序图标?
Is my application icon visible in the Windows notification area?
我的软件有一个通知图标。 Windows 默认隐藏非活动图标。当用户关闭我的应用程序时,我想通知他们,该应用程序仍在后台运行,他们可以通过隐藏通知区域中的图标访问它。
如果图标确实不可见,我想显示此消息仅。
用Shell_NotifyIconGetRect
也没什么用,因为即使图标隐藏了,还是成功了,returns箭头图标的坐标
有没有其他方法可以确定我的通知图标当前是否可见?
或者,有没有办法找出箭头图标的坐标——然后我可以将它们与我在寻找图标时得到的坐标进行比较。或者至少有一种方法可以查明是否显示了箭头图标(这对我的后备解决方案有一点帮助)。
Using Shell_NotifyIconGetRect
doesn’t help much, because even if the icon is hidden, it still succeeds and returns the coordinates of the arrow icon.
我测试后的结果不是这样的
我创建了一个示例并使用了以下代码:
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
函数returnsS_OK
:
如果图标在通知区域的隐藏区域,函数returns S_FALSE
:
我的软件有一个通知图标。 Windows 默认隐藏非活动图标。当用户关闭我的应用程序时,我想通知他们,该应用程序仍在后台运行,他们可以通过隐藏通知区域中的图标访问它。
如果图标确实不可见,我想显示此消息仅。
用Shell_NotifyIconGetRect
也没什么用,因为即使图标隐藏了,还是成功了,returns箭头图标的坐标
有没有其他方法可以确定我的通知图标当前是否可见? 或者,有没有办法找出箭头图标的坐标——然后我可以将它们与我在寻找图标时得到的坐标进行比较。或者至少有一种方法可以查明是否显示了箭头图标(这对我的后备解决方案有一点帮助)。
Using
Shell_NotifyIconGetRect
doesn’t help much, because even if the icon is hidden, it still succeeds and returns the coordinates of the arrow icon.
我测试后的结果不是这样的
我创建了一个示例并使用了以下代码:
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
函数returnsS_OK
:
如果图标在通知区域的隐藏区域,函数returns S_FALSE
: