Windows XP and skinning

A complete guide to Windows XP skinning.

by Brad Wardell

Introduction

During the Windows XP betas (back when it was known as "Whistler") there was a rumor that Windows XP was going to come with some sort of XML based skinning language that would let users create their very own skins (known as visual styles in Microsoft speak that use a .msstyles file on the hard disk).  This is a rumor that was not perpetrated by Microsoft but by overly enthusiastic beta testers. Windows XP allows users to switch between the old Windows 95 look (Classic) and the new Windows XP look (Windows XP style). The code-name to the Windows XP style was "Luna".  These users assumed that Microsoft was going to let third parties make their own "skins" for it.  In fact, Windows XP isn't "skinnable" without the aid of third parties.  

Why is that?  Because Microsoft designed Windows XP so that only Microsoft could use the skin format they created - .msstyles. They didn't want third parties to monkey around with it and so they made sure that their skinning "engine" (UXTHEME.DLL) would only use Microsoft digitally skinned .msstyle files.  

Why?  I can't speak for Microsoft on this but the reasons should be pretty obvious: 1) They don't want the support hassle.  That is, someone downloads a "skin" and it messes up their system and who do they call? Microsoft. And 2) Non-Microsoft made skins will almost certainly be slower. They aren't likely to be optimized to be the perfect size and shape in the actual file.  Want proof of this?  When you see someone say WindowBlinds is "slow" or "bloated" they are really talking about the skin they're running.  To give you an idea how blind people can be to this, on Windows XP, WindowBlinds uses the Windows XP skinning engine (uxtheme.dll) and people still say WindowBlinds is slow. But all WindowBlinds is doing on XP is extending it to support WindowBlinds skins. 

So you can imagine what would have happened if Microsoft had let third parties use their .msstyles format. The nasty reviews practically write themselves -  "Windows XP: Nice features, dog slow."  The skinning engine doesn't really have to do that much, it just has to take the bitmaps and draw them with standard APIs and hope that the video drivers support those APIs properly (which unfortunately they don't always). When someone says that one of these skinning programs is "bloated" ask yourself this, "how much bloat is involved in loading a bitmap from the hard disk and blitting it onto the screen"? To put things in perspective, WindowBlinds uses less memory than notepad.

What is native?

The basic misconception that people who advocate visual styles is the claim that "visual styles are 'native' and WindowBlinds is some bloated third party add-on."  This is a claim made by non-technical people who confuse bundling with nativity.  Let's talk about how visual styles work:

On a Windows XP install, there is a file called "Luna.msstyles".  This is the "skin" that is known as "Windows XP style".  It is 4 megabytes.  When you load Windows XP, a service known as "Themes" is loaded into memory.  If you look in your tasklist, you'll probably notice a few processes called svchost.exe.  This is one of them.  

When you switch from "classic" to "Windows XP style", this service loads up Luna.msstyles,, has uxtheme.dll verify that it is digitally signed and then uxtheme.dll "skins" the GUI.  If the program in question is theme aware, Windows XP "skins" its buttons and scrollbars and other goodies.  If it is not theme aware (i.e. 99% of apps) then it will just handle the title bar and possibly the scrollbar.

So what does this mean? Windows XP includes a program that loads up a skin and applies it to the system.  The difference between that and a third party program is purely one of bundling. The bundled file, uxtheme.dll by default handles .msstyles files.  On Windows 95, Microsoft Paint could only handle .BMP files. So does that make .JPG and .GIF files non-native?  Of course not.

I don't want third party stuff, I want "native" XP styles!

So you want to make your own skins?  Then you'll need to use a third party program to do it. But the good news is that there will probably be lots of third party options available to users. Why?  Because of the bundling of uxtheme.dll.  Since Windows XP comes with a "skinning engine" it makes sense for third parties to use it.  There are two basic strategies to approaching uxtheme.dll:

1) Create your own skin format.  Since uxtheme.dll will only work with .msstyles that have been Microsoft digitally signed, one of the options to get around that is to simply create your own skin format.  This is what WindowBlinds 3 does.  It has its own skin format .UIS. There are some advantages in having your own skin format.  As a developer, you can protect it, that is, it's your skin format and so skins made for it cannot legally be ready or auto converted by other programs without permission. As a skin author, in the case of WindowBlinds, it means the format was created with you in mind. .msstyles was written by Microsoft for internal use, not for skin authors on the net.  It also means it can be easily extended based on the needs of users.  And your own skin format can be cross platform.  For instance, WindowBlinds 3 skins can be run on Windows XP, Windows 98, ME, 2000, etc.  On Windows 98/ME/2000 the skins are handled by wblind.dll.  On Windows XP they're handled by Microsoft's uxtheme.dll. But since uxtheme.dll is on XP, expect there to be a host of different programs that make use of it that have their own skin formats.  This will create competition which is generally good for users.

2) Hack the digital signing security. An easier path is to simply patch uxtheme.dll to remove the security protection for .msstyles. Once the system DLL is patched, anyone can create their own .msstyle files. The good side on this is that it's relatively easy to do (from a developer point of view) and since everyone on XP is already running the theme service anyway, there is no extra memory consumed. The downsides are fairly obvious, you're hacking a system DLL. Another downside is that this approach assumes Microsoft's only reason for having that security in was because they're a bunch of bastards. I.e. that Microsoft didn't have a good reason to ensure that only Microsoft approved .msstyle files could be used.  Nobody knows why they did it but we know that Microsoft didn't want third parties to use their format. There is also the nebulous legal issue. Modifying someone else's code may be illegal. I wrote a game called The Corporate Machine and the demo version limits the player to only being able to use one map.  If someone wrote a patch that allowed users to any map, I'd be pretty ticked off since then there'd be less reason for people to buy the game and my hard work would be for nothing.  

But no matter how one slices it, since uxtheme.dll exists in Windows XP, it's going to be used. It's already used by WindowBlinds and no doubt others will use it too. People want to customize their user interfaces and having a bundled skin engine makes it much easier to do just that.  The only question that remains is to talk about the differences between the two main skin formats in question - Microsoft's .msstyle format and Stardock's .uis format. What are the advantages of each?

 

Skin languages: What's the best route?

This gets into a matter of philosophy.  Since no matter how you slice it you're going to have to download a third party program in some capacity to use more "skins" than what comes with Windows XP, it really just comes down to what way allows you to run the skins you want?. 

Let's look at .msstyles and .uis.  Just fair warning, I was involved with .uis's design so I am a biased source. But I don't think any of the things being written here are particularly controversal.

.MSSTYLES

MSSTYLES is an INI based skin language that Microsoft created to create the Windows XP visual style.  It was designed for internal use by Microsoft and is not supported for use by third parties. It has one official skin (Windows XP Style, aka Luna).  

What is good about .MSSTYLES is that it's throrough. Every GUI element in Windows XP is skinnable with it. Microsoft's team knew what they were doing. It would nto be inaccurate to say that if Microsoft wanted to, they could create the ultimate skinning language. If there's really anything to complain about in the .MSSTYLE language is that it's overly complex. It takes a lot of work to make a skin for it. But my complaint isn't legitimate because Microsoft never intended for third parties to use it. It was designed specifically so that they could create a single new look for Windows XP and it does the job extremely well.

As I said, Microsoft could create the ultimate skin language if they chose to. I know some of the guys involved and they're code gods. But they didn't and .msstyles is limited in scope. Very limited. Specifically it's limited to having the ability to simply create the Luna skin. The further away you get from the default Windows XP style (Luna) the more these limitations show up.

For example, you couldn't use it to create a BeOS style skin because it doesn't support tabbed title bars.  You couldn't use it to create a true rendition of the Aqua (MacOS X) user interface because it doesn't support roll-up controls (WindowBlinds .UIS does) and it doesn't support alpha blended scrollbars (i.e. semi transparent).  You couldn't create a MacOS classic skin with it because it doesn't support having a header behind the title bar text (the lines on the traditional MacOS UI would show up behind the title bar text).

And it wasn't designed to extend the user interface, merely make it look somewhat different. You can't put in plug-ins or add more types of controls and buttons or alpha blend parts into one another.  In short, it's not as flexible. But this is by design. Microsoft could easily do these sorts of thing if it wanted to. But that wasn't its purpose. It wasn't meant for a bunch of third party "skinnerz" to run amuck with it.  

And there may be other reasons why Microsoft put in so much effort to protect their format from being used by third parties. Something to consider if you find yourself tempted to patch your system DLLs in order to eliminate the security features of the XP styles engine in order to use third party skins.

.UIS

Believe it or not, .UIS was the first skin language ever developed for the Windows GUI.  It has been being developed since 1997.  That alone gives it an advantage from a skin author's point of view. That's because much of the design of it and features of it have been based on skin author feedback. And it it can do an awful lot of incredible things.  It supports animated title bars, sound effects, plug-ins, additional controls, irregular window shapes, animated scrollbars, scripting, user configurable title bars, wallpapers, icons, explore backgrounds, dialog texturing, and a host of other things. Someone might say this makes WIndowBlinds "bloated". These features don't make WindowBlinds bloated but it can make a particular skin "bloated".

If we think of skin formats to be akin to be like bitmap formats, WindowBlinds simply lets people have a far greater palette of colors (so to speak) than .msstyles. And with that, much bigger and more complex skins can be made. But it also means much better looking, much more productive, and even much smaller skins can be made. WindowBlinds 3, for instance, supports NVF (Native Vector Format) allowing skin authors to do away with bitmaps entirely if they wanted to create a hyper fast power skin. A user could put a stock ticker at the bottom of their window. .UIS supports roll-up buttons, MP3 controls, always on top buttons, and smart bars.

These are the advantages of a skin format that's been improved and enhanced over a period of 4 years.  Which brings us to another advantage, it already has thousands of skins available for it and because WindowBlinds runs on Windows 98, NT, 2000, ME, and XP, those skins can be used on any version of Windows.

Which format people use depends on which one has the skins they want. A year from now, there will likely be a half dozen or so formats to add to the current list and each one will have its own advantages and disadvantages over .MSSTYLES and .UIS.  To paraphrase a famous quote "It's about the skins!"  

 

But I want it for free!

Which is ultimately what it comes back to. A user who has purchased Windows XP doesn't want to have to buy another program to get more visual styles.  Heck, even downloading a third party program seems obnoxious.  But the fact is, as it stands now, any solution is going to require the user to download something.  But there are free options.  It's only if you want the enhanced goodies or whatever that you'll end up paying anything. Stardock, for instance, banks on enough people wanting the extra goodies to keep it in business.

The enhanced features of WindowBlinds 3 are:

It can make all your apps theme aware.  The "free" version of WindowBlinds is like Windows XP itself. If the app isn't theme aware, it doesn't skin it completely.  The enhanced registered version makes all applications theme aware so the system is completely skinned.

wbxp.gif (76531 bytes)

Without WindowBlinds, most of these buttons and scrollbars, and checkboxes and such would look like Windows 95.

 

It can dynamically color a skin on the fly. The "free" version is like Windows XP -- WinXP comes with 3 color choices (Olive, Silver, Blue). If you don't like them, too bad.  But the enhanced registered version of WindowBlinds lets you pick out a color from the color wheel and change the color to anything you want.

wb3d.jpg (88013 bytes)

WindowBlinds can change the color of a skin dynamically

 

WindowBlinds 3 will have SmartBars.  Basically this means being able to add buttons to your title bar as a user. Want to have a button that lists your top 5 most used websites? Or one that rolls-up the window? Or brings up a menu of your most used apps?  SmartBars can do these sorts of things.  The "free" version won't do these sorts of things since XP itself doesn't.

There are tons of little things that are nice. WindowBlinds 3 will eventually introduce SkinCast for registered users so that they can more easily access high quality skins of different categories. Additional effects, sound effects, HyperPaint, and much more.

The pattern here is that the "free" version of WindowBlinds 3/XP will do what users are asking -- let Windows XP have additional visual styles.  Stardock's bet is that out of the millions of users who use Windows XP, many thousands of them will want these kinds of features.

Conclusions

The only downside of the "free" version is that you have to have a fairly small program residing in memory to handle the loading of the .uis files and sending them over to uxtheme.dll.  Of course, it's all about perception. Next time you're looking at your tasklist in XP (Ctrl-Shift-Esc) note how much ram those svchost.exe processes use.  WindowBlinds uses less RAM than a typical XP powertoy. 

Adding additional visual styles to Windows XP will definitely require some third party program to be involved. This is because .msstyles have to be Microsoft digitally signed.  There will likely be a host of programs that take various strategies to load up a skin and send it to uxtheme.dll.  Since it does much of the hard work, there's no doubt users will have various options to add additional skins to Windows XP.  The question will merely be one of which third party program are you going to use to do it?  And which types of skins do you want to use?  Just don't let yourself be fooled that one way is  more "native" than another.  The only completely "native" way would be if Microsoft got rid of the digitally signed requirement for .msstyles files.  But even if they did that, it would still come down to whether one would rather use .msstyles based skins or some other skin language and the overall features the various methods provided.

There's also the other thing, Microsoft doesn't recommend any given third party product over another. But Stardock developed WindowBlinds XP with close contact to Microsoft.  It was officially launched on September 26 at Microsoft.  It is Microsoft Windows XP certified. In short, it's not some bloated quickie third party hack messing with your system.  It integrates seamlessly into it.

The good news for skin users is that because uxtheme.dll is part of Windows XP, they can expect a plethora of choices to arrise to use it. This in turn spurs competition which is good for consumers.

Resources:

WindowBlinds Home Page

http://www.windowblinds.net

SkinPrimer 2002

http://www.stardock.com/stardock/articles/skinprimer/skinprimer2002.html