Most people rarely, if ever, mean to use the caps lock key on their keyboard. I found that about 99% of the times I pressed it pushing any key other than caps lock would have been more useful. So I used the Accesibility Control Panel enable a sound when I pushed it. I have since discovered something even more useful.

Windows 2000 includes a Scan Code Mapper which is controled by the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout registry key. To adjust the map you must insert a new value of type REG_BINARY with the name "Scancode Map". That value has the following format:

Start offset  Size      Data
(in bytes)    (in bytes)  
0             4         Header: Version Information 
4             4         Header: Flags 
8             4         Header: Number of Mappings 
12            4         Individual Mappings 
Last 4 bytes  4         Null Terminator (0x00000000)
The version and flags should be set to all 0.
The number of mappings includes the null terminator and is stored as a DWORD(4 byte int)in little Endian format.
Each mapping consists two WORD(2 byte int) in little Endian format. To map each use of the CAPS LOCK key(0x003A) to the left CTRL key(0x001D) ie, 0x003A -> 0x001D, the following map should be typed into regedt32: 1D003A00. Totally disable caps lock by mapping it to 0x0000 with the following map: 00003A00.

The complete REG_BINARY to swap the caps lock and left ctrl keys is: 00000000 00000000 03000000 3A001D00 1D003A00 00000000.

You can also do fancy things such as mapping that silly Application Key to the mute button or even, as the ultimate prank, map every key to the power button!

Please note that you must reboot for changes to the scan code map to take effect. It effects all users.

The keyboard mapper appears to be unchanged in Windows XP. This node works.

Big endian scan code
       Key
0x003A Caps lock
0x001D Left Ctrl
0xE01D Right Ctrl
0xE038 Right ALT
0xE020 Mute
Source: http://www.microsoft.com/hwdev/tech/input/w2kscan-map.asp