Yesterday I was reading Jeff Atwood's blog (on Keyboarding) and I thought I´d try one more time to find a nice tool to remap the keyboard.
See, when you use non-english keyboards you tend to start wondering about why would you need to press Ctll-Alt and 2 just to type the @ char, while you have keys mapped to symbols you never use: the spanish keyboard, for example, has keys mapped to º, ª, ç, Ç, and so-called "dead-keys" so you can press them and then type a, e, i, o, u and get the accented version of those chars, THREE of them we never use in spanish: `, ^ and ~; ç and Ç are only used in portuguese!
I always wanted the ability to remap these keys into characters that would be a lot more useful while coding, so I had tried several approachs before, including Chris Sells Scancode Mapper, but those only allow you to remap entire keys, they don't really allow to modify the characters that appear when you 'modify' them with Shift or Ctrl-Alt (AltGr).
Enter the Microsoft Keyboard Layout Creator (MSKLC). KLC allows you to create a new Windows keyboard layout from scratch or customize a preexisting one, and build an MSI installer for it. You can then simply install it and configure Windows to use your custom layout.

The main window presents you with the representation of a standard keyboard (if your keyboard has an L shaped enter key you can change the physical layout so it represents your keyboard in the View... Options menu).
You can then double click any key to enter the new character that should be sent to Windows when it's pressed. If you changed the state by marking "Shift" on the main window, when you do this you'll be changing the character that will be sent when Shift and that key are pressed.
You can either simply enter the new character that should be sent, or enter it's Unicode number (UTF-16 code point).

If you want to go deeper, you can expand the key properties window (by pressing the All... button), so you get access to change the normal, shift, ctrl+alt (AltGr), shift+ctrl+alt, SGCAPS, etc, and to define your own Dead-keys.

Defining a dead key is straight-forward: just enter the normal characters that should be pressed after the dead-key, and the resulting characters that should be sent.

You can preload any installed Windows keyboard layout so you don't don't forget about any essential character.
Once you've defined your own keyboard layout, you can build the installer for it (Project... Build DLL and Setup Package), and proceed to install it.

Once you have it installed, all you need to do is open Regional and Language Options in the Control Panel, and configure Windows to use your new layout.