You can run into Today skin/Theme-related questions all the time on Pocket PC boards; this is why I’ve decided to write a complete tutorial (with a fully-fledged roundup of the available programmatical solutions) on the question. Hope it’ll answer all your questions. Feel free to ask if you don’t understand something.
First and foremost, some words on how the operating system works. This will be essential to understand the rest of my article.
The Windows Mobile operating system gets its Today and Start Menu background images from \Windows\tdywater.gif
, respectively, except
if the registry value HKEY_CURRENT_USER\Software\Microsoft\Today\UseStartImage
is existing and set to a non-null value. Then, it will only use \Windows\stwater.gif
(that is, the start menu image) and just ignores \Windows\tdywater.gif
for generating the Today image. (This is very useful to know because for example ThemeMakerTosh
crops the start menu image to a very small size (150*293). This is why the Today screen will be a tiled version of this image, instead of the ‘real’ Today image. With other theme generators, this is not that big a problem.)
(Incidentally, what’s ‘st’, what’s ‘tdy’, and why ‘water’, you may ask. What does the Today background has to do with ‘water’? Nothing, really; ‘water’ comes from ‘watermark’. You may also have guessed that ‘st’ stands for Start Menu and, you – like me – MS-DOS oldtimers, ‘tdy’ stands for, no, not Tandy 1000
-compliant stuff, but ‘Today’. You’ll certainly laugh at me: at first, when I saw a filename starting with ‘tdy’ in the file system, I asked myself ‘WTF the Pocket PC has to do with old Tandy PCjr compatibles?!’
If you just copy an image in \Windows\stwater.gif
(and, UseStartImage is enabled as is by default), then, the Windows Mobile operating system will do the following:
- if the image is bigger than the available screen estate (let it be QVGA Portrait, QVGA Landscape or the same with VGA, in both SE and native mode), it just crops the image and only displays what is displayable from the upper left corner. That is, it doesn’t resize the image to fit in the available screen estate
- If it’s smaller than the available screen estate, it tiles
the image, by effectively displaying the image several times on your PDA. A well-known analogy is how Web browsers tile the Web page background images over the entire web page.
What does this result in? It’s pretty simple.
1, to avoid tiling, you should use stwater.gif
images (from now on, I only assume there’s only one image in \Windows and both the Start Menu and the Today background uses the same; please see my explanation of “UseStartImage” on this right at the beginning) that are bigger (or equal to the size) than the available screen estate. In the case of SE VGA Portrait, this means they are (at least) 480*536
(width / heigth); and, in SE VGA Landscape, this means they are (at least) 640*376
. As the same
image is (or, at least, can be – see the explanation on stwater_640_480.gif
later!) used in both
orientation modes, this all means in the default SE mode, you’ll need to use images of size 640*536. (Divide all these values by two to get the QVGA WM2003SE values!
In this screenshot, you can clearly see that if you use a Today image that only has the width of 480 pixels, it will be tiled in the Landscape mode. This is why the image needs to have the width 640.
Please note that the Portrait height 536 only refers to SE VGA
and not native
VGA. What does it mean in native mode? You’ve guessed right: as the upper/lower bars are half the size in native VGA than in SE (2*26 pixels as opposed to 2*52), you’ll need to increase the heigth of the image to 588 in order to avoid the tiling effect in Portrait mode. Using images of (at least) this height, no tiling will happen in Portrait:
I’ve only spoken of the screen estate without the drop-down Start menu so far. As you may know, the lowest area of the Start menu, if all the history and program slots are filled, may extend in the bottom bar of the Today screen, which means you will see a tiling effect in this area if you stick to the above-mentioned 536 (SE) VGA height. An example in SE VGA, with a Today image that has the height 536:
As can clearly be seen, the exceeding Start menu area is tiled. This means you shouldn’t use the height 536 in SE; it’s the best to stick to the height 588 in general, which is also native VGA compliant. Note that you won’t need taller images than 588 pixels because in native VGA mode the Start menu never exceeds into the lower bar.
(Note that the image I’ve used all in my tests have been generated by me. This image is good in the following respects:
- it clearly shows brute-force (that is, ones that don’t use any antialiasing – for example, Pocket Internet Explorer with images that are wider than half the horizontal screen estate
) stretching/downsampling effects: then, lines will either disappear or appear with double thickness, which can very easily be seen
- it also shows tiling effects because it prints coordinates every 20 pixels
- it shows the effective resolution (is the Today background displayed with pixel doubling)
You can download the image generator app from here
; the C# source, as usual with all my PPC/Java apps, are also available
. Just make it generate the image and save to a file of your own. I’ve pre-generated
some images for your convenience with some sizes used and referred to in this article.)
2, you shouldn’t copy much bigger images to \Windows than the available screen estate either because it’s a,
a waste of RAM; b,
you won’t ever see the regions outside the crop region as the Windows Mobile operating system doesn’t do any runtime resizing / content fitting, except for tiling with small(er) images.
This, so far, may have seemed pretty easy. However, life is not as easy as you would think, mostly because of the several configuration options (you’ve guessed) VGA brings into the picture, specifically the two different DPI settings in the default SE and the native VGA mode. What does this mean? (Skip this section if you don’t want to know how VGA devices use Today background information.)
If you have a large, fully VGA-compliant (640*588) image, then, you will need to explicitly
set another registry key, HKEY_CURRENT_USER\Software\ Microsoft\Today\DPI
, to the decimal value 192 in SE. (As its default value is 96, in native VGA mode, it doesn’t need to be set). Otherwise, the system will consider it to be the default 96, which will result in the pixel-doubled view of the upper left quarter of the image. It’s really worth knowing as some means of setting themes/background like to mess up/delete this value. Then, even if you have a high-resolution image in \Windows\stwater.gif
, you will only see the upper left quarter of it.
Also note that \Windows\stwater.gif
is a generic file. In SE, if you still prefer using different images for the landscape/portrait mode, you should use the filenames stwater_640_480.gif
(the default file name for the landscape mode) and stwater_480_640.gif
(the default file name for the portrait mode). Of the apps, only the (in some devices) built-in Pictures creates files with this name convention; other tools don’t. Please note that in the rest of the article I always refer to stwater.gif
; if you choose to ‘break up’ its functionality for the two orientation modes, you’ll need to use the filenames stwater_640_480.gif
so that the operating system finds them.
Please note that there is also another value in the Registry, HKEY_CURRENT_USER\Software\Microsoft\Today\WatermarkDPI
, which only has effect on how the Today screen is rendered if its value is 192 (the default for most apps that do set it) and HKEY_CURRENT_USER\Software\Microsoft\Today\DPI
isn’t set. Then, it’ll tile a VGA stwater.gif image four times on the Today screen. It won’t have any other effects: neither in SE nor in other native VGA modes. That is, you may safely delete this registry value, it won’t cause any problems.
Here’s a matrix of the WatermarkDPI/DPI
relationship in both SE (192 dpi) and native VGA (96 dpi), with a VGA-sized image. As can clearly be seen, in SE, the lack of HKEY_CURRENT_USER\Software\Microsoft\Today\DPI
(having the value 192) will result in problems. In native VGA mode, however, this registry value may even be missing (except when WatermarkDPI is defined and is 192 at the same time).
The table: sorry, can’t include it in here because of the forum engine restrictions. See “DPI / WatermarkDPI relationship” here
Incidentally, you may have wondered what the QVGA/VGA radio buttons in SE_VGA
(or in ozVGA
) do. They change the value of HKEY_CURRENT_USER\Software\Microsoft\Today\DPI
. The matrix of these changes:
(sorry, can’t include it in here because of the forum engine restrictions. See “VGA/QVGA Today image and VGA mode relationship” here
What these all mean? It’s pretty simple. If you only have a QVGA-size (more properly, 320*294, which is half of the well-known 640*588 VGA-compliant size) stwater.gif, then, you may want to instruct the Pocket PC to do pixel doubling while displaying it. Then, if you are in SE, you need to define HKEY_CURRENT_USER\Software\Microsoft\Today\DPI
with the value of 96; and, in native VGA mode, you also need to define HKEY_CURRENT_USER\Software\Microsoft\Today\DPI
with the value of 48. With VGA- and landscape-compliant (640*588) stwater.gif, the DPI values to be used in SE and native VGA modes are 192 and 96, respectively, as has already been pointed out.
There’re some other values in HKEY_CURRENT_USER\Software\Microsoft\Today\
. Knowing them is not as important and problems based on their misconfiguration are not common as the registry values discussed above; therefore, I’ll only introduce them when it is definitely needed.
You’ll need to reset your device between manually changing stwater.gif/modifying the Today screen-related registry… or?
Yes, basically, if you don’t do any advanced ‘hacking’, you will end up resetting your device all the time between changes. There is, however, a very smart way of avoiding this. Just execute my very simple app
and the Today screen will be immediately updated. (As usual, the sources are also available
.) (For people interested in coding: I’ve used the information in this article
when developing the app).
Beware of the “Use this picture as the background” of the built-in Settings/ Today applet!
You may want to ask an important question: Why fuss with all this manual stwater.gif
file copying and device resetting / Today refresh forcing when we already have the built-in means to do so (namely, “Use this picture as the background
” in the Settings/ Today applet)? Yes, you’re right – that’s a good question.
First, this applet only uses a Today image; that is, it won’t put the image in the Start menu background. Second, it’s pretty incompatible with other (easier) solutions in that it it uses a custom file (as is, however, suggested in this, pretty old, PPC2k2-related article
), \Windows\tdycust.gif, to copy the image (instead of stwater.gif) to, and it, therefore, also modifies HKEY_CURRENT_USER\Software\Microsoft\Today\WallFile
, giving them the value “\windows\tdycust.gif” and “tdycust.gif”, respectively, so that the operating system knows in what file to look for the Today background image. This is why you need to manually remove these registry entries if you want to install a .tsk file over a Today background image set by the Today applet
, because you won’t be able to do this unless you explicitly remove these registry values
. Always keep this in mind after you try to install a TSK file after having installed any image file with the Today applet.
Basically, all the Today theme generator/setter apps are based on the same logics
Why did I need to speak of all this? Because, as you will see, Today background setter/ Theme creator apps all use the same methology:
1, Pocket PC apps that set the Today background directly, just copy (after some possible resizing – see for example Pictures) the image file you pass them to the now well-known \Windows\stwater.gif.
2, Theme creator apps do almost the same: they put a stwater.gif (and a tdywater.gif) in a .tsk
file (which is almost the same as .cab files), along with some system colour information. It’s this .tsk
file that you, once transferred to the PDA, import in the Settings/Today
Importing a .tsk
file in Settings/Today
applet doesn’t do anything fancy: it just extracts the two (Start Menu and Today) background images from the .tsk
file and copies them into \Windows, overwriting the old files (if there were any of them). It also extracts the new system color scheme from the .tsk
file and loads it in the Registry. Finally, it forces the Today screen to be updated (which you must do by hand, for example by directly executing my above-introduced Today refresher app
, if you do the copying of image files to \Windows by hand, without using any external tools).
What’s the point in having .tsk
files, then? Because
1, they are much easier for non-Pocket PC-geeks to import – task files, essentially, only need to be clicked on in the Settings/Today
applet and nothing needs to be done – you won’t need to force a Today screen refresh, you won’t need to redefine system colors by hand etc.
2, if you define a new color scheme along with your images (set the Today/Start Menu text color and make sure the Today upper/lower bars have the same color as, say, the background/most widely used color of your image), it will be applied at once.
If you, however, prefer importing/copying over your image files by hand (without using .tsk
files), you will need to change the system colors yourself – either by importing a pre-defined registry import file that contains them, or, starting an app like CETuner 2005
. This app is capable of setting all system colors, except for (of them, the lack of the Start Menu font color setting is a very annoyimg omission!), as of version 2.56, the Start Menu text, the FileList Line A/B left/right and the Selection dot color.
The other widely known registry tweaker app with (some) system appearance tweaking capabilities, Tweaks2k2.NET (the current, tested version is 220.127.116.11), on the other hand, is capable of setting both the Start Menu text and the Selection dot colors, in addition to the Today screen font/line and the top bar colors. Its other color/font setting capabilities, however, are certainly much more limited than those of CETuner 2005, at least as of the current version.
You may want to check out this direct comparison
of the two apps, color setting-wise (read the explanation for the tets cases below). As you can see, they are capable of a lot of color setting capabilities that are completely missing from current theme creator applications (not to speak of, in this respect, ‘simple’ apps – MultiIE, Pocket Artist etc. – that only overwrite stwater.gif).
So, as has been explained, using .tsk
files can be much easier. Fortunately, as you’ll see, you can easily create or even ‘hack’ (that is, just swap the images inside the tsk file to other images) tsk files.
Speaking of .tsk files, I also need to speak of a common misconception. Many think that tsk files can only be put in \Windows or \My Documents to be accessed (and, incidentally, even top-notch, brand new software packages like Spb Pocket Plus 3.0 put some 1495 kbytes of TSK files (on VGA devices) into \Windows
). That’s not true –
.tsk files can be anywhere
– in either the root of the storage card (if it contains an ignore_my_docs
file in the root) or in \My Documents
of the storage card (but not in any subdirectory!).
Please also note that you don’t need to keep the .tsk file after you’ve set it as default. The WM operating system, as has already been explained, just extracts the two image files inside it and copies them over to \Windows, and also gets the new color information stored in the tsk file, followed by importing it into the registry.
Converting / downsampling / resizing images
As has already been explained, the Windows Mobile operating system doesn’t do any image conversion by default at runtime, while displaying the Today background (think of the runtime CPU/memory implications of this! It would need to do the same every time the Today screen is brought into the foreground!). Therefore, you may want to convert your images to the right size before copying them in your \Windows directory or putting it into a TSK file. This is much more important than you think because all the free theme creator packages are only able to convert to either QVGA or VGA-sized, portrait-only
images. If their output has VGA resolution at all, it’ll still have the width of 480, which will be tiled in Landscape. So, the output of all packages (except for the VGA/Landscape-compliant ThemeMaker McDeb
and the Spb Extended Theme Generator
, which, on the other hand, requires properly sized input files because it only swaps files inside tsk files created by the MS Theme Generator in the previous step) must be manually edited and the two image files swapped to VGA and/or Landscape-compliant ones.
To resize your images to 320*294 or 640*588 (QVGA or VGA, Landscape-compliant images) right on your PDA
(and not on your PC), you may want to use, for example, XnView
(if your input file is not bigger than 2-3 Mpixels) on the PDA. There’re other alternatives to XnView, but most of them are commercial. You may want to read my image viewer/editor roundup on these options
If you (as you should!) prefer doing image resizing/downsampling/cropping on the PC, you have several options. As far as non-commercial (free) tools are concerned, PictureTray
is a decent resizing (but not cropping!) tool. If you also want to do some cropping, especially in batch mode, I recommend ImageMagick
. For example, mass (batch) cropping is very easy with the following command:
FOR /R %%X IN (*.jpg) DO "&lt;path to ImageMagick&gt;\convert.exe" -crop 640x588+0+0 "%%X" "%%X"
and, resizing with this:
FOR /R %%X IN (*.jpg) DO "&lt;path to ImageMagick&gt;\convert.exe" -resize 640x588 -quality 50 "%%X" "%%X"
The former will only retain the upper left part of all JPG images, while the latter will resize all the images in the current directory and all the subdirectories, overwriting the original files (so, save them to another directory before issuing the above commands!).
And now for something completely different… yes, the apps at last
Theme generator apps (with TSK output)
; also see this e800 thread
This free app is able to convert images, but, if you choose VGA (e800 in this case), the output will be portrait only
(the image size is 480*588). It’s also capable of creating QVGA Portrait TSK files (again, no landscape in this mode either). However, it can be of help because 1, it’s free 2, if you swap the images after the TSK file creation, then, its strengths (good color setting capabilities (especially compared to the non-existing color capabilities of the Spb app) and being free) can be utilized.
Microsoft Theme Generator
The most widely known, free, but pretty incapable and for ages not updated Theme generator. Doesn’t let the user set 2003-related colors (for example, the Start menu text color). Its built-in image converter is QVGA Portrait only.
Spb Extended Theme Generator
An add-on for the Microsoft Theme Generator. Doesn’t add much to its capabilities (doesn’t even let the user define WM2003-specific color schemes). There is no free lunch…
All it does is swapping the stwater/tdywater.gif images in the TSK file previously generated by Microsoft Theme Generator. It does not convert the images; therefore, the images you pass to it should already be properly resized and cropped. It has absolutely no color setting capabilities either, as opposed to both ThemeMakerTosh and FunnySnake's TKCreater, the other two GUI-based, free TSK generators.
A free, PDA-based utility with basic capabilities. Supports WM2003 color settings. Not VGA-compatible either.
If you aren’t afraid of manual resizing/cropping of images (which you will otherwise end up doing if you use any task creator tool except for ThemeMaker McDeb) and setting colors in textual config files, this free utility is for you. As you have access to all the settable attributes (colors) in the system, you can do anything with this suite at the expense of user-unfriendlyness. You may also want to read this article
on the app.
Avanquest (BVRP) Software’s pocket Theme Manager 2
A GUI-based all-in-one editor. Supports animation. A bit (?) overpriced, if you also take into account that the built-in image converter code it’s not VGA (not even SE!) compliant
and, with the free Animated Theme Injector
, you can also include Flash movies in your TSK files. Verdict: it’s too pricey if you take into account that you’ll end up hacking the TSK files it generates. ThemeMaker McDeb is a much better buy in this respect (too).
It also has a task file changer module runninng on the PDA. If you, however, aren’t keen on automatic task file changing, you may not need this feature.
At last a desktop-based utility that has an image cropper/converter/resizer engine that is both SE and VGA compliant. It is easy to use and also lets you set any system color, including the most-important Start menu text color and the Today text color. This is the Theme generator program to get if you don’t want to convert/crop your images by using external tools.
Today screen background setters
Conduits Pocket Artist 3.0, Resco Image Viewer 5.32
are programs that are also able to set the Today background directly. However, they only copy the given image file to \Windows\stwater.gif – no resizing/cropping/system color change will take place.
is a bit better in this respect, but still far worse than manual TSK creation (with, say, ThemeBuilder 2003), ThemeMaker McDeb or even the hopefully built-in Pictures, mostly because it generates images of size 480*480. Therefore, it’s unable to fill in the entire screen area and tiles in Landscape, as can clearly be seen in the following two screenshots:
Tools/Set as Today Wallpaper… in WM2003+ Pictures
Some (not all!) WM2003+ devices like the iPAQ 2210 or the Pocket Loox 720 have the excellent Pictures application in ROM. It’s much better than the above-mentioned Today screen background setter tools because it not just dumbly copies the image file to \Windows\stwater.gif – it resizes them beforehand. If it’s smaller than the available screen estate, it puts a white border around it (that is, it doesn’t stretch it, but it also results in the Pocket PC’s not tiling it) and it also allows for setting the transparency level (other, simple tools don’t). It, however, doesn’t let for setting system colors – you will need to use, for example, direct registry tweaking or tweaks2k2.NET for that.
Please note that, instead of the standard \Windows\stwater.gif, this app creates stwater_640_480.gif
files, as described above.
The summarization table
: sorry, can’t include it in here because of the forum engine restrictions. See “Summarization table” here
Please note that I’ve listed font (re)definition capabilities (along with all the system color definition capabilities) mostly because I’ve also referred to CETuner and Tweaks2k2.NET in the article, which you will most probably need if you plan to use ‘plain’ today background setting without TSK files. You can read more on how WM2003 and WM2003SE store and use font size information
If you want to create VGA and/or SE-(landscape) compliant themes and don’t want to manually convert files, go for ThemeMaker McDeb
, it’s definitely the best tool in this respect. Forget pocket Theme Manager 2
because it’s not landscape/VGA-compliant!
Unfortunately, I would have expected the Spb app to be much
more powerful. It doesn’t offer almost anything – you can do the same with simple image file overwriting in the TSK files as far as its pure TSK generation capabilities (not its Spb Pocket Plus skinning support!) are concerned.
If you don’t plan to pay for ThemeMaker McDeb, but don’t want to convert/crop your images by hand either, and are lucky enough to have Pictures
on your PDA shipped in ROM, you’ll find it sufficient for most purposes (as long as you’re ready to set system colors manually), as far as casual (!) Today screen skin setting is concerned.
And, don’t forget: you can create VGA and/or landscape-compliant TSK files even without purchasing ThemeMaker McDeb
, if you’re ready to do some manual image conversion, as outlined above. This may be a much better choice if you only plan to make few TSK files.
Please note that you can also download the files generated by these tools
and you may also browse some other screenshots here
. I haven’t directly linked the latter images in my article because they would have given little more information. Their names are decypherable; P stands for Portrait, L for Landscape, SE for SE VGA, N for native VGA.