【问题标题】:How to always show program tray icons in Windows by *default*?*默认情况下,如何始终在 Windows 中显示程序托盘图标?
【发布时间】:2010-10-28 15:13:57
【问题描述】:

如果程序在 Windows 7 中首次执行,它会自动隐藏图标。是否有任何清单设置或选项强制 Windows 7 默认始终显示图标?

【问题讨论】:

    标签: windows-7 icons tray


    【解决方案1】:

    这当然不是“不可能的”。有一个未记录的 COM 接口 ITrayNotify 用于检索托盘图标并更改其可见性,由 Explorer 本身使用。完整的 C++ 源代码:http://thread0.me/tag/windows/

    当然,使用非官方 API有风险,而且 Windows 8 对该 API 进行了重大更改,这意味着您必须为 XP 使用 2 个不同的定义 - Win7 和 Win8 - Win10。但是,嘿,即使是Chrome uses this trick。请务必正确处理故障。

    【讨论】:

      【解决方案2】:

      如果您真的想显示您的托盘图标,您可以弹出一个带有最少文本的气球,然后通过以下代码示例再次隐藏气球和它的阴影:

      trayIcon.ShowBalloonTip(30000, "", ".", ToolTipIcon.None)
      
      Dim balloonHandle As IntPtr = GetBalloonHwnd(balloonText) ' mainly: FindWindow("tooltips_class32", Nothing)
      
      If (balloonHandle <> IntPtr.Zero) Then
        Dim sysShadowClassHwnd As IntPtr = FindWindow("SysShadow", Nothing)
      
        ' will hide balloon and leaving a small shadow artifact - just for this balloon
        PostMessage(balloonHandle, WM_SETREDRAW, IntPtr.Zero, IntPtr.Zero)
        SetWindowPos(balloonHandle, IntPtr.Zero, 0, 0, 0, 0, SWP_HIDEWINDOW)
      
        If (sysShadowClassHwnd <> IntPtr.Zero) Then
          ' this will remove the small shadow artifact
          PostMessage(sysShadowClassHwnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero)
        End If
      End If
      

      如果您重复此操作(例如每 30 秒),您的托盘图标将停留在那里,因为 Explorer.exe 认为,有一个打开的气球向用户显示。一些小问题 - 例如无法直接右键单击图标 - 仍然存在。

      我确实曾经为我们的公司软件显示托盘图标,用户不打算手动执行此操作以及每次更新。所以也许这会对某人有所帮助...... :)

      否则,我完全同意:这应该只在用户手中,不受应用程序控制。

      【讨论】:

        【解决方案3】:

        不久前,在 .NET Rocks 播客中,来自微软的 Kate Gregory 说这是不可能的。

        她说过类似的话:“如果用户想要它(托盘图标),他/她会把它放在那里”。 这样做的原因是为了防止托盘区域混乱。

        【讨论】:

        • 在我看来这是一件了不起的事情。系统托盘已被滥用,我一直试图将所有内容设置为“始终隐藏”以尝试回收屏幕空间
        • Jamie,我同意,但请记住,有些类型的应用程序基本上需要托盘图标作为对主程序的唯一访问。而且我确信 Win7 会创建 MASSIVE 支持加载“图标在哪里?”。
        • 嗯,其实是有可能的...如果用户可以配置他想要显示的托盘图标,那么必须可以通过代码进行配置(可能通过更改一些注册表值)
        • @Mark:那是用户的电话,最后。您始终可以显示一个弹出气球,指出图标的去向。此外,您可以通过简单的单击拖动将托盘图标移动到自动显示,因此工作量很小。
        • “由用户决定”方法的一个问题是,有时在企业环境中,应该允许组织来确定这些内容。此外,对于已发布的 Citrix 应用程序,似乎无法将图标配置为始终显示为图标实际存在于最终用户无法访问的桌面上。最后,对于个人环境,通常取决于用户,但并不总是适合企业。
        猜你喜欢
        • 2021-05-19
        • 1970-01-01
        • 1970-01-01
        • 2020-01-31
        • 1970-01-01
        • 2021-01-08
        • 2013-07-17
        • 2010-09-14
        相关资源
        最近更新 更多