使用命令行显示/隐藏 Windows 通知区域上的特定图标

使用命令行显示/隐藏 Windows 通知区域上的特定图标

如何使用命令行使图标在任务栏的通知区域(可能称为系统托盘)上显示/隐藏?就像我可以使用以下 UI 执行的操作一样:

选择任务栏上显示的图标

我以为它可能位于其他地方,但在使用以下方式HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer监视注册表事件时没有发现任何东西RegSetValue进程监控

我的目的是在工作时间隐藏一组图标,然后稍后通过命令行显示它们。

答案1

虽然@harrymc 的回答允许你添加和删除程序实际任务栏,在本问题的上下文中(如屏幕截图所示),“任务栏”一词实际上是指 Windows 的“通知区域”(以前正式称为“系统托盘”或“systray”,现在非正式地称为“系统托盘”或“systray”)。

不幸的是,正如所说这里

已经发生了变化通知区域让用户能够更好地控制哪些图标出现在任务栏. 所有通知图标现在默认隐藏,并且可见性无法通过编程控制

(重点是我的)

我在此 MSDN 线程,这恰好是 OP 所问的同一个问题。

现在,由于问题没有明确这一点,为了完成:如果问题是关于控制由控制它的同一程序添加的图标,那么文档在这里

最后一点:如果您不介意打破常规(从而进行黑客攻击),您可以使用以下任一方法来绕过这个限制:

  • 截距dwMessageShell_NotifyIconA 函数在您想要控制图标的程序中,使用您自己制作的程序(这可能需要或不需要您将原始二进制文件作为您所制作程序的子程序来执行)。
  • explorer.exe用您自己的二进制文件替换,复制其外观和功能。我知道这听起来很疯狂,但它可以用最不黑客的方式解决这个问题。

答案2

我发现最可靠的方法是这个小命令行工具: 固定到任务栏

要在命令行中使用它来固定:

syspin "path/file.exe" c:5386

取消固定:

syspin "path/file.exe" c:5387

我在 Windows 10 20H2 上测试了该程序,使用上述参数运行良好。过去推荐的其他 PowerShell 脚本对我来说不起作用。

答案3

您正在寻找的注册表项IconStreams位于HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify

我刚刚回答了一个此处重复问题

要点是,IconStreams由于它是 ROT-13 编码并打包到 REG_BINARY 中,因此需要进行一些处理才能读取和编辑。因此您可以:

(1)保存并恢复整个值——甚至是整个TrayNotify父容器,例如:

@rem save:
reg export "HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" "TrayNotify1.reg"

@rem restore and restart explorer to re-read the key:
reg import "TrayNotify1.reg"
start /wait TASKKILL /F /IM explorer.exe && start explorer.exe

(2) 或者IconStreams通过编程进行更改。我发现的大多数代码都是 Powershell:

Tim Mintner 也在 2011 年发表了一篇旧博客文章,其中他对格式进行部分逆向工程IconStreams 的

相关内容