Simon's Win32 Cheat Sheet

This sheet summarises all the things I do to make my Win2k machine more useful to me. I've summarised it here partly for my own benefit (I have to repeat the process on each new machine) and partly in the hope that it may be be of use to others.

Please tell me, simonpj@microsoft.com, if there are things you find useful that aren't mentioned here. Please note: this page is MIRRORED on chaz.nyc/chazhome.com for preservation purposes and some changes have been made to ensure it is current.

I have a Win2k Machine, but I've added possibly-inaccurate notes about Win95 too. In general, Win95/Win98 behave the same, and WinNT/Win2k behave the same.

Acknowledgements. Many thanks to Sigbjorn Finne and Luca Cardelli, from whom much of the enclosed advice comes.


General setup and user interface

Your environment variables

Much of the Unix-y stuff below involves you setting your environment variables. For example, on WinNT/Win2k, to edit your PATH variable, do the following: Some environment variables are "user variables" and some are "system variables". I'm not sure of the difference but both are changed though the same dialogue.

In addition, when running a Cygwin (see below) shell you can set environment variables in your .bashrc file. But it is better to set your environment variables from the control panel (they get inherited by bash) because then they are visible to applications that aren't started by bash. For example, when you're invoking CVS (and ssh) via Emacs keybindings; it invokes cvs.exe without going via bash. On a Win9x machine you need to edit autoexec.bat using Windows/system/Sysedit. You need to reboot to make the new settings take effect.

Make Caps-lock behave like Ctrl

When I'm using emacs I need to use the Ctrl key a lot. It's very inconveniently placed on the Windows keyboard. A much better plan is to make the Caps-lock key (which is much better placed) into a duplicate of the Ctrl key. You lose Caps-lock, but who cares?

I know of two ways to do this (below).

Alternatively Luca recommends the Happy Hacking keyboard. No caps-lock at all.

Ctrl2Cap

Here is a utility that does the job:
  http://www.sysinternals.com/ntw2k/source/ctrl2cap.shtml
I've been using it for some years. NOTE: the distributed version of Ctrl2Cap (2.0) works fine with Windows XP. About a year ago I had a lot of trouble with version 2.0 on my then-Windows-2000 machine. I fiddled about for ages, and contacted the author. Nothing worked. Fortunately, I had a previous version still around, and that does work. Well, it did for me. Here it is. Use only if desperate.

Altering the key mapping

Erling Alf Ellingsen told me that an easier way to achieve the same effect is by altering the key mapping in the Windows Registry. Here's caps.reg a little registry file that makes the alteration. You can install it just by double-clicking it. (See notes about .reg files.) Then restart your machine to make the change take effect.

Here's what caps.reg contains:

  [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
  "Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00
Erling writes: "Breaking it down:
   00 00 00 00 ("version", should be 0)
   00 00 00 00 ("flags", should be 0)
   02 00 00 00 (number of key maps)
   1d 00 3a 00 (map scan code 1D to scan code 3A)
   00 00 00 00 (blank key map)
If my memory serves me, 0x1D is the left ctrl key, and 0x3A is Caps Lock."

I have tested this solution and it seems to work. Strange though; if it's so easy, why do SysInternals have a special utility?

Make your Contacts take precendence over the global address list

[This one is relevant for Outlook only, and even then I think it's specific to Outlook XP.]

When you type someone's name in the "To" field of a message, Outlook tries to figure out who you mean. It can look in more than one address book, and its essential that it looks in your own Contacts first, else it'll auto-complete to some random person in the global address list (which in my company is pretty big). It won't even flag a "not-sure"; it just auto-completes to the wrong person.

It's easy to make it look in your Contacts list first, once you know how, but it's devilish hard to find out how. Here's what to do.

Install better fonts

Luca Cardelli's home page has a couple of nice fonts available under "Mac/PC resources". In particular, his LICS font has a menagerie of useful mathematical symbols that aren't available in any standard font.

To install a new font, just drag it into C:/WINNT/Fonts. You don't even need to reboot.

Stop booting with NumLock on

It has happened to me, both at home and at work, that my computer would boot up with NumLock on. (This makes it puzzling when you try to type the password to log on...). This setting somehow gets embedded in the guts of the boot process, for unknown reasons.

To fix it, add the line (found in the Microsoft Knowledge Base):

  NUMLOCK=OFF
at the end of your C:\config.sys. Num lock will still turn on at the beginning of booting, but will turn off again before the end of booting. (This works for Win98; I don't know if it works for Win2k.)

User interface tweaking

Power users apparently all know about TweakUI, a control panel that lets you alter aspects of the Windows user interface. The ones I like are: You can also arrange that moving the mouse over a window changes focus, more like X-windows.

Switch off the pesky MDM process

On my laptop, a background process MDM.exe used to appear, which seemed to cause hundreds of page faults a second even when I was doing absolutely nothing. Since I use my machine a lot for compiling, I reckoned I could do without it.

MDM is the Machine Debug Manager, and it is installed with Internet Explorer. Like me, you probably don't need it. Here is how to tun it off/disable it. Go to the Control Panels and click Internet Options. Click on the Advanced tab and check the box 'diable script debugging'. This should stop it appearing.

Work around the pesky foo.ps[1] problem

Using Internet Explorer, I often follow a link to someone's paper, with a filename like foo.ps.gz. In response to the popup box, I click on "Open this file from its current location"; zip files can't hurt you (I belive). IE downloads the zip file, and WinZip starts up automatically, which is all very wonderful. But alas, the file it displays is called foo.ps[1], rather than foo.ps, so I can't double-click on it in the WinZip window. I have no idea where the pesky "[1]" comes from.

The slow solution is to extract the file, rename it, and then double-click on it. Less slow is to right-click on it in the WinZip window, select "View...", and then select gsview as your viewer.

But the best (albeit hackish) solution is to tell Windows that ".ps[1]" is a suffix meaning "here's a Postscript file; run gsview". It's easily done. In an file browser window select "Tools/Folder Options" and click the "File Types" tab. Click "New". In the new dialogue window type "ps[1]" as the new file extension. In the same window, click "Advanced", and select "Postscript" from the huge list you are offered.

Now do the same for "ps[2]", "ps[3]". (I've never needed more.)

Access your Windows machine remotely

Windows now comes with Remote Desktop built-in, which lets you display your windows desktop on another (Windows) machine. Some time ago, a couple of people told me that VNC is a wonderful thing: https://www.comparitech.com/vpn/what-is-a-vnc-and-how-does-it-differ-from-a-vpn/. It lets you display your windows desktop on a Unix machine or Mac, and vice versa. However I'm also told that it has a "general utter lack of security", so that running it may expose you to all sorts of bad things. Don't blame me!

Make filename completion work in the cmd shell

[If you use the TweakUI thing above, you don't need this.] When you are typing commands to the standard cmd shell, filename completion doesn't work by default. Here's how to switch it on (thanks to Alex Buckley for this).

Instead of this rigmarole, you can just double-click this complete.reg, which makes the above change to the registry. See notes about .reg files. The next command processor (cmd.exe) you run will perform tabbed filename completion. Tab completes the first filename with the given prefix; subsequent tabs cycle through the filenames with that prefix.

This doesn't work in Win95/8 because they only have the old command.com available as a command processor.

Info about your profile

Your "profile" is stored in WINNT/Profiles/<your-user-name>. If you have a roaming profile, like I do, some of this stuff gets copied to the main server when you log out, and sucked down when you log in, so it's desirable that it's not too big. In particular: On the other hand: Having a roaming profile on a laptop is a Bad Idea in my view. First, there's a danger that you'll get stuck on a dialup line dragging down a big profile. (Mind you, since you have to log in before you can dial up, this is unlikely to happen. But it can be awkward if you are connected when you log in, but then you disconnect later.) More important, with a roaming profile you share settings of your environment variables, such as $HOME. So then emacs (for example) will look for a .emacsrc file that isn't available when you are disconnected from the network.

You can change whether you have a roaming or local profile thus:
My Computer/Properties/Advanced/User Profiles Settings/Change Type/Local.

Changing this setting affects only the computer you change it on. A single account can have a roaming profile on one computer and a local profile on another.

Change what's started at boot time

Windows has many marvellous ways of changing what programs are run at startup time; e.g. what programs end up in your "system tray". I could never work out how to get rid of them, until Sigbjorn told me: msconfig works on Windows XP too, but I've not used it in anger.

Monitor power-saving and Exceed

For a long time I was frustrated because I could not persuade my desktop PC to switch off the monitor as it is supposed to. (Doing so saves a lot of power overnight, and all screens come with "Energy Star" stuff designed just for this purpose. It also extends the life of the cathode ray tube by turning off its electron-emitting heater filament.)

The problem turned out to be Exceed (at least in V7.0). Exceed is an X server that lets you display X windows on your machine. In its default configuration, Exceed prevents the screen switching off. To fix this:

Make the printer staple by default

I am fortunate enough to use a printer with a stapler, but it took me ages to discover how to make it staple by default. The same trick works for various other printer settings. What is particularly exiciting is that you have to make the same change in two places in the printer properties. If you only do it in one, it works for a few weeks, and then stops working. Don't ask me why, but it does.

Here's how to change the default behaviour:

In general, any settings you make here should be the default for all future printing on that printer.

You can also do this on a case-by-case basis. When you are about to print your document:

The properties change only for this one document, but they do seem to persist across successive printing of the same document from the same application.

Printing the first page (only) of a letter on printed letterhead

Your printer may have multiple paper trays, one loaded with headed paper. When printing a letter, you only want the first page to come from this tray. Here's how to achieve this glorious outcome.

Select "File/ Print..", choose your printer etc, then click the "Properties" button (top RH corner). Click "Advanced...". Find the bit that says "First page different", and open it up (click the "+" sign). Change the setting to "Enabled" and pick the media type. The latter step selects which paper try the printer will use, but unhelpfully in my set-up the "media type" setttings are things like "pre-printed" and "labels" rather than "Tray 1" , "Tray 2", etc. Quite how it knows which tray has pre-printed sheets is beyond me. I use trial and error to find the mapping.

Find out what a funny filename extension means

I occasionally come across a file with an extension (suffix) I don't recognise. There are quite a few web sites with a comprehensive list of what file extensions mean, but I didn't find them easy to find. Here are the ones I know about.

Make Adobe Acrobat start faster

Adobe Acrobat is the standard reader for PDF, but it starts up really slowly because it loads a bazillion plug-ins. You can trim the plug-ins, and hence greatly speed up start up as follows: Thanks to Ulfar Erlingsson for this tip.

Recover a gigabyte of disk space

If you are like me your hard disk is pretty full. A simple change in settings can save you almost 10% of your hard drive.

By default, Windows XP reserves 12% of the hard drive for something called restore points. These can be used to restore the system to a previous situation if you mess up the system with some install or other changes. This 12% can get used pretty fast when you install a lot of software. And 12% of your disk is a lot: 28GB drive * 12% = 3.36GB.

You can reserve less space, and so free up a lot. The downside is that you will not be able to restore the system to 10 restore points ago. I for one never used this options anyhow, so restoring just a few points back is plenty for me.

Don't forget to check the available space before and after you do it.

Perform useful tasks

Wake up your laptop's network connections

I often disconnect my laptop, which runs Windows 2000, from the network to move it around. When I do this I only suspend it; I don't log off or power down. The trouble is that often when I reconnect, the little green light on the connector comes on, but the network connection doesn't work at all. By trial and error, I've found a series of actions that usually fixes the problem. I used to reboot the machine, which was time-consuming, and often didn't help. But these steps seem to do the trick; don't ask me why. Try them in this order: they are arranged in order of increasing brutality and time-consuming-ness. That's it! Usually works for me. Thanks to Richard Black and Julian Melville.

Folder navigation

Open a folder in a new window, without replacing the current window, even though you have set View/FolderOptions/Settings/OpenEachFolderInSameWindow: just hold down the control key while you double-click. If you are using Active Desktop (i.e. single click), you need to Left-Mouse-Press on the folder, then press the control key, then release the mouse button, then release the control key.

Run the Inbox Repair Tool (Outlook users)

If something bad happens to your Personal Folders, Outlook may put up a box saying "Exit all mail-enabled applications and run the Inbox Repair Tool". I couldn't find the "Inbox Repair Tool"!

It turns out that it's a program called Scanpst.exe, which I found using the "Find files and folders" search engine. (It was deeply buried in Program Files/Common Files/System/....)

The name "Inbox Repair Tool" seems to be a misnomer: it'll repair your personal.pst file too.

Capture a screenshot

Capturing a screenshot is especially useful when reporting a bug where the alert box, or whatever, doesn't support cut and paste.

A good screen-shot utility is Capture. It captures screenshots into .bmp files, as well as to the clipboard. Thanks to Ron Kaminsky for the pointer.

Click in a URL without opening it

When using an editor like Word or Outlook, have you ever tried to put the insertion point into the middle of an underlined-in-blue URL, so that you can edit it? If you just click in the URL, Word or Outlook will try to follow the (probably bogus) URL, which is hardly what you wanted.

Fortunately, someone at Microsoft thought of that: just hold down Ctrl while you click. Took me ages to discover this.

Defragment your disk from the command line

You can defragment your disk from a cmd shell simply by typing
  defrag c:
Defragmenting can significantly improve the speed of some things (e.g. running a compiler).

Someone told me that if you carry on working while the defrag process is running, it continually restarts from scratch, so didn't make any progress. But this didn't happen for me. It just clunks away happily in the background.

Here's how to do this as a scheduled task so it happens overnight. Create a batch-file, e.g. defragall.bat and put in into a directory in your path. The batch-file looks like this:

  @echo off
  defrag c:
  defrag d:
  defrag ...

Now, go to "Start/Programs/Accessories/System Tools/Scheduled Tasks". Add scheduled task and point it to the batch file. Set up the time etc to whatever you want. (Thanks to Mark Oude Alink for this.)

Restart the desktop after Explorer crash

It occasionally happens that I click on a link in Explorer, and the Explorer window locks up entirely. The hour-glass appears, and the window will do nothing, ever again. (Pressing Stop etc has no effect. The wavy flag does not wave.) It's as if it has gone into an infinite loop.

The only way out is to kill Explorer from the Task Manager. Alas, that kills my desktop too, so the Start button and taskbar disappear. One way to solve this is to log out and back in again, but you don't need to do that: here's how to restart your dekstop.

Do a Ctrl+Alt+Delete, go into Task Manager, then ensure that the 'Applications' tab is selected and then press 'New task'. Type 'explorer' and yey presto, your desktop reappears.

Notes about .reg files

Double-clicking a ".reg" file makes a change to the registry (it asks for confirmation first). That's an alarming thing to do. Here are a couple of things that make it less worrying:

Print ASCII files

I often want to print program listings. The prfile utility is rather like the Unix a2ps; it formats Ascii listings for printing, adding titles, frames, and putting 2 or more pages on one sheet.
http://hem.passagen.se/ptlerup/prfile.html

Show folder sizes

I sometimes want to know how much space a folder takes. Right-click/Properties does the job for a single folder but the free TreeSize utility displays a nice tree with all the folder sizes filled in.
http://www.jam-software.com/index.html

Reading Macintosh floppy discs

You can read a 1.44Mb Macintosh floppy disc directly on your PC, if you have the right software. (The 800kb kind need different hardware.)

Papers and presentations

Export Postscript from a Word, Excel, or Powerpoint document

I often want to export Postscript from from a Word, Excel, or Powerpoint document. For example: submit a Word documemt to a conference, or include a chart made by Excel in a paper, or include Powerpoint pictures in a LaTeX file. I know two ways to do this, neither of them obvious.

Use "Print as file"

Using "Print as file" is most direct, but it takes multiple actions on each occasion. If you select File/Print... again, to repeat the process after editing the file, you don't need to repeat the "print as file", or "select EPS" steps; they are remembered.

The stuff above only prints one slide (the first). If you want to print all of the slides of a Powerpoint presentation, with each slide on a new page, Mike Barnett found that you can proceed as follows:

Trying to view the resulting PostScript using Ghostview ends up in errors that Ghostview complains about. But if you take the PostScript and convert it to PDF, then Acrobat has no problem displaying all of the pages. It doesn't appear to make any difference for this if I change the "PostScript Output Option" to "EPS" or not. [Mike adds: this recipe may not work with Office 2003. I finally got it to work using "Optimize for Portability" as the PostScript Output Option and "Automatic" as the TrueType Font Download Option. The PostScript is still wacky: in GhostView you see only the first page, but the PDF contains all of the pages, *except* for the last slide. So I had to add a dummy last slide to the presentation...]

Install a pseudo-printer

The second method takes two minutes to set up, but is then less work to use. It works by installing a pseudo-printer, but you don't need any hardware to do this! Once you have done this, you simply choose your new printer in the "File/Print.." dialogue, whenever you want to print Postscript. When you click OK in the "Print.." box, you'll be asked for a file name. I didn't get a proper file-select dialogue box here, so it wasn't clear to me which directory the file would end up in, so I had to type a full path name. I don't know whether this infelicity is driver-specific.

Excel charts

If you want to dump a single Excel chart as Postscript:

Include LaTeX equations in Powerpoint slides

Writing mathematics in Powerpoint slides is a pain. But no longer!

Written by George Necula, TexPoint is a Powerpoint add-in that enables the easy use of LaTeX symbols and formulas in Powerpoint presentations. The package allows you to write LaTeX source for symbols or one-line formulas in your slides and then translates that source into the appropriate sequence of symbols. For more complicated formulas, you can also embed arbitrary LaTeX source in the Powerpoint presentation. The source is processed and displayed automatically every time it is edited.

I havn't used it yet, but it looks terrific, and people who have used it say it's great.

Draw a picture and include it in a LaTeX document

I use LaTeX for writing papers, and I often want to include diagrams. Here are a couple of ways to use excellent Win32 drawing tools to do so. (It took me ages to discover this stuff.)

Powerpoint is widely available, and is an excellent drawing editor. I particularly like the fact that connectors stay connected when you move boxes around, and that box labels stay with the box. Generally, the user interface is jolly good. The trick is to get it to dump a picture you can include in LaTeX:

That's it! It's quite a pain, but it works. Furthermore, if you edit the drawing, you can just "print" the file again. Powerpoint will remember the EPS setting, so it's quite quick. If you don't change the bounding box, you don't need to change the LaTeX file at all.

When I asked around about this I got the following alternative suggestions, which I have not tried.

Include typeset material from Postscript into a Powerpoint slide

I'm preparing a Powerpoint presentation for a paper that I have typeset in LaTeX. Powerpoint is excellent for text and diagrams, but I wanted to include many equations and type-inference rules that I had carefully typeset in my LaTeX paper. Here's how to do it with amazingly little effort.

Someone else responded thus: I do pictures in a similar easy way - if I want to save a screen I want to put in a slide or word document, I press "Alt-PrtScn" on the keyboard (current focus window image goes into clipboard), then go to Office Photo Editor, File, New, control-V (paste) and then use the Select Tool to snip out graphics that I want.

Include mathematical symbols in Word documents

[Contributed by Tuomas Aura.] It can be frustrating to use Word's Insert Symbol function to insert a mathematical symbol, because the symbol you want can be hard to find.

Instead, you can type a 4-digit hexadecimal character code, and then type Alt-X. For example, a square subset-or-equal symbol (\sqsubseteq in Latex) is = 2291 + Alt-X.

These two Word documents give the character codes:


Install and configure useful packages

Emacs

There is a general FAQ for Emacs on Windows at http://www.gnu.org/software/emacs/windows/faq.html.

Install ispell for Emacs

ispell is an interactive spell checker for Emacs. I got a working copy from ftp://ftp.franken.de/pub/win32/develop/gnuwin32/cygwin/porters/Humblet_Pierre_A/V1.1. Look for ispell...README and ispell...tar.gz.

The instructions in the README are fine. I found it easy to install by untar-ing (telling WinZip to use path-names!) into c:/cygwin, and making sure that c:/cygwin/usr/local/bin was on my PATH.

Tags tables for emacs

[This one is not Win32-specific at all.] Tags tables are great. Here are two things I've found indispensable:

Printing from Emacs

Among other things, it tells you how to set up emacs so you can print from Emacs. I reproduce the simplest version here, due to Andrew Innes:

Printing (very) plain text. In 20.4, you should start by clearing out ALL printing-related settings from your .emacs, especially packages like print-nt that were written for older releases. If you have a printer physically attached to your computer, then I believe the default settings will very likely work just as they are (assuming you have already configured Windows to support the printer, and can successfully print a test page). So first try loading a small text file, and then selecting Tools -> Print -> Print Buffer from the menubar.

If you don't have a printer physically attached, or it is not attached to the standard parallel printer port (LPT1), then set `printer-name' accordingly:

  (setq printer-name "LPT2:")                      ; non-standard port
  (setq printer-name "//some-server/its-printer")  ; network printer
Again try Tools -> Print -> Print Buffer from the menubar, to see if it works. For network printers, remember the rule: Emacs will only be able to print to "//some-server/its-printer" if "its-printer" is listed as a shared printer in the output of "net view some-server".

LaTex

I'm going to assume that you already have the miktex version of LaTex (http://www.miktex.org) installed, in "c:/texmf".

Configure LaTex

Here is how to configure Latex. In particular, you need to explain where to find your style files, bibliographies etc, and (unlike Unix) you don't do that through environment variables.

View DVI files

I usually use dvips to convert the DVI files that Latex spits out into Postscript, but it's possible to look at the DVI files directly. What took me ages to discover is that the DVI file viewer that comes with miktex is called yap.

Here's how to make yap your default DVI viewer, so that double-clicking a DVI file will open it. In a file browser window pick "Tools/Folder Options...". Click on the "File Types" tab; check that DVI is not in the list of known extensions; click "New"; type "dvi" into the extension box; then click OK. Now select the DVI item in the scrolling list of file types, and click "Change". I get a window saying "Windows doesn't know how to open DVI files". Click "Select the program from a list"; in the new dialogue box, click Browse.. and navigate to "C:/texmf/miktex/bin/yap.exe". Now OK your way out.

Installing a Telnet client

TeraTerm is a good telnet client to run on your machine. You can find it at
  http://hp.vector.co.jp/authors/VA002416/teraterm.html
In particular, it supports a SSH plugin, TTSSH. The latter is available on the same page as above. When you run TeraTerm, from the Setup window do the following:

Alternatively, Jurgen Bohn wrote to me to recommend PuTTY, a free implementation of Telnet and SSH for Win32 platforms, along with an xterm terminal emulator

   http://www.chiark.greenend.org.uk/~sgtatham/putty/
He said "This free tool is very easy to use and requires no installation etc." I havn't tried it myself.

Cygwin

Cygwin is a suite of Unix lookalike tools that dresses up the Win32 environment into something more UNIX-like. Notably, it provides gcc, as and ld. Cygwin also provides CVS.

Important grungy information about Cygwin:

Here's how to install Cygwin. Here's an alias you might also find quite useful. If you add
  alias start='cmd /c start'
to your $HOME/.bashrc, it lets you start up Windows applications associated with a particular file extension directly from the bash prompt, e.g.,
  sofbox$ start someDoc.html
starts up IE displaying someDoc.html.

Services for Unix

Microsoft now produce a package called Services for Unix (SFU). Like Cygwin, it provides a Unix environment on top of the Windows platform, but the integration between SFU and Windows is much deeper and more intimate.

I have never used SFU, but I've seen a demo and it looks pretty good. It's free too, I believe, from version 3.5 onwards.

http://www.microsoft.com/windows/sfu/

CVS

There is a very nice graphical front-end to CVS for Win32 platforms, with a UI that people will be familiar with, at

	http://www.wincvs.org/

We have tried, and failed, to make it work with all the ssh stuff. If you succeed, let us know.

Brian Zhou recommends TortoiseCVS, another graphical front-end for CVS on Win32, which makes a CVS repository look like a Windows Explorer folder.

        http://cvsgui.sourceforge.net/TortoiseCVS/download.shtml
I havn't tried it myself.

Installing GHC

Use the InstallShield download from http://haskell.org/ghc. By default, this installs GHC in c:/ghc/ghc-x.yy/*.

You'll need to add c:/ghc/ghc-x.yy/bin to your PATH; that makes GHC easy to invoke. And that is all.

Be a GHC developer

To build GHC from source, follow the instructions in the Notes for building under Windows section of the GHC building guide. If you check out the source using CVS, follow the instruction in the Using the CVS repository section of the same guide.