Shell Overlay Icons — The Space Wars

For some of us there has been a quiet war raging inside the Windows registry. The fight is over your shell overlay icons and their priority. I fought back!

The Problem — Shell Overlay Icons Limit

Amazingly, even going into the modern era of Windows 10 in 2017 this is still an issue. The issue is that many tools want to make use of shell overlay icons but Windows only has 15 “slots”. It’s safe to assume that many of these tools would use this Windows feature for an “at a glance” method of displaying state. This also means that a single tool wont just use one icon but many to display various states of files and folders. For example the little screen shot below shows two shell overlay icons, one is green denoting a committed state and one red highlighting an uncommitted state.

an example showing shell overlay icons

As our ever-more digitally connected world evolves, more and more tools want to make use of this feature. I’m sure most of you reading this have at least a couple of tools that do this. However, the list for me goes on and on. Tools like OneDrive, Dropbox, Git and SVN and … you get the picture.

Given that Windows only uses the top 15 entries in the registry, I have over 30 listed. Dropbox alone brings 10 to the table, so what are we supposed to do? As you can see 15 isn’t going to go particularly far given this scenario. Whilst these shell overlay icons are useful in some scenarios they probably aren’t the best solution to the problem anyway. There is a good discussion here on the problem from Raymond Chen who works on the Shell Team at Microsoft.

The Space Wars

What the hell am I on about anyway — Space Wars? Many of these tool vendors, Dropbox I’m looking at you in particular, have started a kind of war inside your registry. Aside from any chuckling ‘nix users chortling about the fact Windows even has something as insane as a registry we still have to deal with it. Actually, to be fair a lot of the issues with the registry is down to my fellow developers abusing it but that’s a whole other story for another time.

So, what exactly is the problem? When you take a registry entry key name like “DropboxExt01” you’d expect that come before “DropboxExt02”, right? Well, kinda. If I rename “DropboxExt02” to “ DropboxExt02” (notice the leading space) “ DropboxExt02” now comes before “DropboxExt01”. And thus was born the space wars …

Each vendor thinks their tool is the most important, obviously. So they’ve taken it on themselves to start appending their shell overlay icons key names with ALL THE SPACES, ARRRRR!! Forcing their entries to top of the tiny selection that Windows will actually bother to use.

I Fought Back!

I’ve lost count of the number of times I’ve fired up regedit in order to fix this insane situation. Countering a vendors update install that “fixes” that tools entries (read: appends more spaces). “Why wouldn’t you want our icons to work”. Well dear Dropbox your tool isn’t the center of my world, in fact I’ve nearly uninstalled you as this is such an annoyance.

Anyway, I’d just had enough yesterday. So I wrote a tool. Say hello to Overlay Ninja …

shell overlay icons - overlay ninja

Okay, okay it doesn’t look that great (yet) but I knocked it up in a few hours. Now I can fix this problem easily in a couple of clicks and without going anywhere near regedit. The source code for this is all up on my GitHub page. It’s under GPLv3 so if you make any improvements please do submit a pull request so we can all benefit.

You can set priorities by application or by each individual shell overlay icons entry which adds a lot of flexibility. I’ve tested this as far as I can and all is working as expected. As ever, when doing anything in the registry make a backup first. If you’re reading this and don’t even know what the registry is, what the hell are you doing reading this? :) Go have a read of this before doing anything with the tool.

x86 or x64?

Inside the GitHub repository I’ve also uploaded pre-compiled versions of the tool so users without the required build tools can still use it. Due to some architecture redirection foibles within the Windows registry you will need to use either the x86 or the x64 version of the tool for it to actually work as expected. If your OS is 32-bit, use the x86 version, if it’s 64-bit use the x64 version (here’s how to check that).

Happy, er … Ninjaing, Ninjaning? Ninjining?


Originally published at jammer.biz.