Change pinned taskbar icon (windows 7)
I wan't to customize the icon displayed within the windows 7 taskbar. When my app is running, I can do it by changing main window icon but, when the app is pinned, the exe's icon is displayed.
How can I set the taskbar icon for my app to an icon different from the one embedded within the exe ?
Not tried, this solution may work but looks dirty.
Edit :
Our app is compiled once but depending on config file, features are enabled or not so it's a product or another. We do not want to compile one exe for each product.
The solution above may not work as many instances of my app can be installed in different pathes (so you end up with the same exe file name but different icons!), is this registry key poorly designed or am I missing something?
EDIT The info below is a bit obsolete; all new Windows 7 bits are now available as a managed API, available here: http://code.msdn.microsoft.com/WindowsAPICodePack
There is a series of articles on the new Taskbar API by the debugging guru Sasha Goldshtein. You should have a look at the Overlay Icons and Progress Bars API.
You can download the sample code from Windows 7 Taskbar Developer Resources on Microsoft Code. What you're looking for is the IMClient
sample:
The IMClient sample demonstrates how taskbar overlay icons and taskbar progress bars can light up an application’s taskbar button instead of relying on an additional dialog or on an icon in the system notification area (tray).
(source: microsoft.co.il)
(source: microsoft.co.il)
(source: microsoft.co.il)
I believe this should help you achieve what you want.
When you pin an application to the TaskBar, it simply creates a shortcut in the following directory:
C:\Users\<User Name>\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar
You should be able to identify where the shortcut is (ie, get KnownFolders and work from there. UserAppData should be the one), and then using P/Invoke (IShellLink), you can alter the icon that the shortcut is setup to use. The machine might need a reboot for this to take effect, but it should work.
If you hold down Shift while right-clicking on the pinned application, and select Properties, you can see the Change Icon button for the shortcut. This is basically what you need to emulate with code.
All of these things can definately be done with code, but whether you think they're any better than the registry setting is up to you.
You can do this by using the library called "Windows 7 Bridge" which is based on the "Windows Vista Bridge".
These are managed wrappers around all the Vista and Windows 7 native functions.
More info can be found here