Forum Discussion
"Show all icons in system tray" option in windows11
- Dec 19, 2022
To always show all the Icons in the System Tray or Notification area of Windows 11/10, follow these steps:
1. Press Win+R to open the Run prompt.
2. Enter this value: explorer shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}
3. Tick the Always show all icons and notifications on the taskbar checkbox.
4. Click the OK button.Hope this helps everyone!
Floydy
I like your solution, but what I plan to do with our Windows 11 deployment is to prestage any icons that have to be there by adding them to the %systemdrive%\users\default\ntuser.dat registry file.
I'm a little bit concerned about the "IconSnapshot" registry key, however. My fear is that it will break it.
From some research, it appears that the key names are competely random and many have reported that the differ between computers for the same executable. That's probably why it breaks when something as simple as a new version is deployed. I can't tell you how many times I've unhidden Teams, for example.
I'll have to do some testing, but I'm hoping that method might work. I might just end up managing those keys via GPO or Intune setting as well.
Although, I was just playing with some coding and cobbled together a C# script that I called "NotifWatcher.exe". Basically, every 5 seconds, it queries all the subkeys of the HKEY_CURRENT_USER\Control Panel\NotifyIconSettings registry key and resets any value of "IsPromoted" that is not equal to 1, back to 1. We could go with every 60 seconds or something too. The script below worked and seemed to have very minimal CPU on my system. Much less than PowerShell when I told it to do the same thing. I guess I'd be worried about the chattiness of this solution if we'd ever have to do a ProcessMonitor explore, however.
using Microsoft.Win32;
using System;
using System.Threading;
class Program
{
static void Main()
{
while (true)
{
CheckAndUpdateRegistryValue(@"Control Panel\NotifyIconSettings");
Thread.Sleep(TimeSpan.FromSeconds(5));
}
}
static void CheckAndUpdateRegistryValue(string registryPath)
{
const string propertyName = "IsPromoted";
using (var key = Registry.CurrentUser.OpenSubKey(registryPath, writable: true))
{
if (key != null)
{
var propertyValue = key.GetValue(propertyName);
if (propertyValue != null && propertyValue.ToString() == "0")
{
key.SetValue(propertyName, 1, RegistryValueKind.DWord);
}
// Recursively check all subkeys
foreach (string subkeyName in key.GetSubKeyNames())
{
CheckAndUpdateRegistryValue(registryPath + "\\" + subkeyName);
}
}
}
}
}
So, Microsoft, if you're listening - please just bring back the "Show All Tray Icons" option and we won't have to implement stupid solutions like the one above.
Been running the Login/Logoff powershell for a few weeks now and I have to say it works well enough for us I think. I like the neatness of it as well that it's not having to continually process. We are using roaming profiles, so that helps a bit as users will gradually pick up the most frequently used icons over time - it might not work quite as well if you're only using local profiles and starting with a fresh profile on each new device.