10

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

4

3 回答 3

14

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

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

于 2009-05-24T22:29:49.697 回答
4

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

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 认为,有一个打开的气球向用户显示。一些小问题 - 例如没有直接右键单击图标 - 仍然存在。

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

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

于 2012-02-23T15:38:17.183 回答
2

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

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

于 2015-08-18T10:19:48.070 回答