【问题标题】:How to check if NotifyIcon is hidden如何检查 NotifyIcon 是否隐藏
【发布时间】:2013-02-03 20:33:08
【问题描述】:

我不想强制它可见,我只想检查它是否被 Windows 隐藏。

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

【问题讨论】:

  • 按照设计,无法找出答案。

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


【解决方案1】:

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

NotifyIcon 未被隐藏时(在可见托盘部分),该函数将返回零。当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 家庭。希望它对你有用。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • W7任务栏可以移动到屏幕任意边缘
    • 我无法移动它。无论如何,OP 必须在所有可能的位置上寻找它。请记住,在 RTL 操作系统中,图标可能出现在左侧。
    • 你必须先解锁它。右键->锁定任务栏
    • 如果我要这样做,它必须是合法的......这对我来说不是必需的,但它会很有用。 :)
    • 这种方法有什么不合法的地方?除了容易出错(如果处理得当,这是合法的......)
    猜你喜欢
    • 1970-01-01
    • 2020-05-22
    • 2010-09-15
    • 2014-05-01
    相关资源
    最近更新 更多