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!
Here's a powershell script to set currently known app icons to show. Could be set as a scheduled task or something.
Get-ChildItem "HKCU:\Control Panel\NotifyIconSettings" | ForEach-Object {
Set-ItemProperty -Path $_.PSPath -Name 'IsPromoted' -Type 'DWORD' -Value 1
}
(Script execution must be enabled for it to work: Settings -> Privacy & Security -> For Developers -> Powershell)
- FloydyJan 30, 2024Copper Contributor
I've been looking into this issue for an enterprise solution.
IsPromoted = 1 in the reg is essentially what is being set to unhide each icon, which is also what gets set when this is changed manually.
I have come up with similar powershell, my intention is to set it as a scheduled task deployed from GPP to run every x minutes.
Note that you can run this as a simpler single powershell command using a wildcard * at the end of the path, without then needing the get command (although the result is the same).Set-ItemProperty -Path "HKCU:\Control` Panel\NotifyIconSettings\*" -Name 'IsPromoted' -Value 1
The reason it needs to run every x minutes (and the reason home users are finding the Windows 11 behaviour flakey) is because many of these icons are generated dynamically under certain conditions - therefore not only is every users icon uniquely identified, but the app icon you unhid yesterday may well be a completely different instance of that icon tomorrow. So the result is that the 'new' copy of that icon is default hidden each time, so appears to 'hide' again to the user.
So at the moment my best effort it to "capture" any icons currently running, to restore the taskbar as unhidden every x minutes.
All because Microsoft have forgotten how task bar icons are used (ironically including most of their own - such as Teams, Outlook, and Defender).
Update -
Struggled to get this concept to run as a Scheduled Task in Enterprise environment. 😕 It works, but its messy. It needs to run in the Users group context I believe in order to successfully access the HKCU unfortunately (SYSTEM doesn't seem to work), and this means every user would need Log On As Batch permissions (not viable for us). There's also an issue with it 'flashing' the powershell prompt briefly each time it runs, which isn't really acceptable on a fast schedule. This is the Scheduled Task command (note special character between "Control Panel") if anyone wants it - set to run as Users group (or as your own user if you're on a personal device).%SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -Command Set-ItemProperty -path "HKCU:\Control` Panel\NotifyIconSettings\*" -Name "IsPromoted" -Value 1
Instead I'm probably going to look at just running the first powershell as a login and logoff script for each user from GPO, so it'll at least set icons unhidden that exist on logon and logoff (but it will miss any that only intermittently appear (such as Outlook envelope notification) and any that recreate dynamically. I'm hoping it will catch the ones we need most.
Conclusion (& Second Update) -
Can confirm running my first powershell command as a .ps1 script in Login & Logoff Powershell script tab in GPO works pretty well for Enterprise environment. Home users could do the same from Local Group Policy.
It won't capture every icon but it should capture anything that's fairly persistent.
It'll have to do, pig, it'll have to do.- AMDMan64Feb 28, 2024Copper Contributor
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.- FloydyFeb 28, 2024Copper ContributorInteresting idea, but yeah the main issue I found was that these icons are dynamically recreated. That's not to say your idea of hardcoding them in couldn't work with a fixed ID, but my guess is that you might end up with duplicate icons as the system tries to recreate them anyway?
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.
- bonky2024Jun 17, 2024Copper Contributor
try this command.. seems to work well and switches on all the icons
powershell -command set-ItemProperty -Path 'HKCU:\Control" Panel\NotifyIconSettings\*' -Name 'IsPromoted' -Value 1
- coopermnzApr 06, 2024Copper Contributor
@Thanks, this is what i was looking for. I wanted to pin on app and let the users manage the rest