This default behavior bothers me a lot also. I agree with Microsoft that it was probably a good idea to default to "Only Show Notifications" for most users. The purpose of the "Notification Area" is (as it's name implies) to show notifications to its users. It should NOT be a place where companies put unuseful icons that "advertise" their programs, but do nothing.
That being said, as a power-user, I have a good idea of which tray icons are important to me and which I'd prefer to hide. I'd much rather have the icons always show by default, but with the ability to manually hide individual ones, just as the OP has requested. Many tray icons not only provide notifications, but also real-time status and quick access to settings and controls, etc. So I'm disappointed by the lack of a setting (even in the registry) that would allow the behavior for new notification icons to be "Show Icon and Notifications" by default.
I have not been unable to find such a setting. The registry key mentioned above by James is probably not useful. For one thing, it is under
HKLM, which is a machine-wide setting. But the behavior of tray icons is user-specific, however there is no
HKCU equivalent of that key.
The relevant registry key is actually
HKCU\Software\Classes\Local Settings\Microsoft\Windows\CurrentVersion\TrayNotify in the
This key is a binary registry key. It contains several blocks of data that store the full path to executables that have added notification icons, as well as the last tool-tip displayed by each icon and the "show" setting for each.
So although I haven't found a way to change the default behavior for new icons, I was able to find a few good references for how to decifer the binary format of the above registry key or how to access the same information using the (undocumented)
ITrayIcon interface. These methods were used to produce utilties that can detect and change the behavior of individual tray icons programmatically.
Since programmatic access to this information is available, it should not be hard to write a small utility program that periodically monitors the list of tray icons and changes the behavior of any new icons it detects. After that, it would record the name of the icon and would not alter it again, so that any changes the user makes manually would not be overwritten.
Here are some code examples for detecting and modifying the behavior of individual tray icons:
Both of these give pretty good examples of performing the tasks required to make a small utility that monitors and changes the behavior of new notification icons. If at some point I get around to writing that utility, I'll post it back here.