如何检查是否隐藏了NotifyIcon

时间:2013-02-03 20:33:08

标签: c# .net windows system-tray trayicon

我不想强迫它显示,我只是想让它检查它是否被Windows隐藏。

默认情况下,Windows会隐藏系统图标以外的托盘(操作中心,电池,网络,声音,日期和时间)。

enter image description here

2 个答案:

答案 0 :(得分:2)

我使用函数 Shell_NotifyIconGetRect,并获取返回值来检查 NotifyIcon 是否隐藏。

NotifyIcon 未隐藏时(在可见的 Tray 部分),函数将返回零。当 NotifyIcon 隐藏时,函数将返回 0x00000001,即 Incorrect function。这真的是hack,我不知道为什么。这是一个例子:

bool isIconHidden = false;
int hresult = Shell_NotifyIconGetRect(ref nid, out rect);

if (hresult == 0)
{
    isIconHidden = false;
}
else if (hresult == 0x00000001)
{
    isIconHidden = true;
}
else
    throw new Win32Exception(hresult);

有关 Shell_NotifyIconGetRect 函数使用的更多详细信息,请参阅 Notify Icon PositionDetermining location of tray icon。 但我不确定该解决方案是否适用于所有 Windows 平台。我的操作系统是Win10 家庭。希望它对你有用。

答案 1 :(得分:1)

@Hans说没有直接的方法可以找到,这是不幸的(但有道理)。

你仍然可以尝试间接发现。您可以take a snapshot of the desktop位图,找到任务栏(我认为在Windows 7中它不能从底部移动,我不确定)并查找您的图标。如果你找到它 - 就在那里。