停止自动隐藏托盘通知图标

11
每当我的Windows窗体应用程序第一次运行时,托盘图标会保持可见约不到一分钟,然后自动隐藏,我该怎么做才能使其固定不自动隐藏?
我尝试搜索但找不到任何有用的信息。
似乎这是Windows 7及以上版本的默认行为,我想知道是否有一种方法可以从我的应用程序内部覆盖该行为?

1
不,没有办法通过编程来实现。你可以在系统托盘上点击“自定义”,手动更改为始终显示。 - Blorgbeard
1
@DiskJunky 这是真的,但我希望原帖作者不要知道怎么做 :P - Blorgbeard
2
请确保您也告知用户:“该程序使用了不受支持的图标显示方式,因此它可能随时停止工作(即使安全热修补程序也可能破坏它)。当发生这种情况时,请不要向微软抱怨,而是向Sharp12345提出投诉。” - Raymond Chen
2
@DiskJunky,已记录的API保持稳定,但未记录的部分经常变化。特别是,跟踪隐藏通知图标的内部数据结构几乎在每个Windows版本发布时都会发生变化。 - Raymond Chen
1
我认为,如果用户可以通过文档和支持的API调用在软件设置窗口/选项卡中设置“图标停留在托盘”选项,则这不会引起困扰。如果:
  • 不在弹出窗口、气球帮助框或安装期间询问具有非标准默认值的问题。
  • 可以像启用一样轻松地禁用它。
那么,这种设置方式是可行的,并且不会对其他托盘图标产生影响,并且在软件卸载时也会自动失效。我认为,其他任何实现方法都是不可接受的。
- mg30rg
显示剩余12条评论
2个回答

7
没有支持的编程方法来覆盖系统默认的显示/隐藏通知图标行为。当在Windows 7上添加图标到通知区域时,默认情况下将其添加到通知区域的溢出部分。该区域包含通知区域图标,这些图标是活动的,但在通知区域中不可见。仅有用户可以将图标从溢出区域提升到通知区域,尽管在某些情况下,系统可以将图标暂时提升为短预览(少于一分钟)。强调属于本人。参见MSDN

尽管有文档支持,我仍不同意这个观点。设置必须被存储在某个地方,无论这些设置如何容易被更新或读取。我觉得微软不可能花费大量精力对这些相对琐碎的设置进行加密或者封锁。虽然可能没有API调用,但这并不意味着这是“不可能”的,只是比较困难而已。 - DiskJunky
3
哦,@DiskJunky,毫无疑问。我只是在说它不被支持。鉴于此,如果你的软件发现并利用了这个设置,那么如果微软以后移动了位置,它就会出问题。自从Win8以来,微软已经展示出更大的意愿去做出改变。 - Michael Petrotta
1
@Michael,不对。你仍然可以这样做,我已经做过了。唯一会出问题的情况是如果微软移动了他们实际的注册表键和结构,但这不会发生。顺便说一下,在Windows 8中,我提供的解决方案像在7和Vista中一样很好用 :) - Trevor
1
@MrCoDeXeR:也许是,也许不是。我认为你误解了我的回答。我的意思是说没有支持的方法来做这件事。你说有一种不支持的方法。使用不受支持的路径会产生成本。如果OP和未来的用户可以接受这一点,那就太好了。顺便说一下,一个微软员工,一个高度连接的员工,在这篇文章中发表了评论。听听他对此的看法是值得的。 - Michael Petrotta
1
(是的,微软已经改变了许多记录在案的操作系统领域。对我个人来说很痛苦。未记录的领域?你最好打赌他们会改变) - Michael Petrotta
显示剩余5条评论

2

正如你在评论区中阅读到的,确实没有官方支持的方法。但是,如果你下定决心并有时间深挖一下,我建议使用一些工具来绕过文档,并查看通知设置下发生的实际情况。也许有适当的文档可以参考,但我还没有找到。

野蛮的方法是使用SysInternal的RegMon工具来查看所有的注册表访问。将其与“Explorer.exe”进程绑定,您将看到有关桌面和开始菜单的所有相关信息,包括任何文件访问。毫不客气地说,这是一种粗暴的方法,需要大量的努力和挖掘。一旦与explorer.exe进程绑定,您就可以更改通知设置。查看和调查进程所做的更改将让您了解相关设置存储的位置以及如何存储。缺点是,要查找正在进行的操作,需要浏览和调查大量的数据,但可以做到。这不是理想的解决方案,但如果没有其他解决方案,只能选择这种粗暴的方式。这取决于你愿意为解决这个问题付出多少努力。


@MichaelPetrotta同意。完全正确。但其实也没那么糟糕——我在必要时也这样做过。主要是在SO出现之前的日子里,但仍然如此 :-) 实际上很少有真正做不到的事情。有时SO对于“可能”的定义过于依赖文档。 - DiskJunky
1
我删除了上面的评论,因为它是不必要的,但由于DiskJunky回复了它,我会把它加回来:“如果OP确实需要这个功能,这是一个合理的方法,但是对explorer.exe进行RegMon监视而没有好的过滤器就像从消防龙头喝水一样。” - Michael Petrotta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接