There's two approaches:
1) Update the Registry: I use
SharpKeys on my ThinkPad to make Alt Gr into RWin
2) Runtime remapping: I use
AutoHotkey for much of my remapping
Option (1) requires a reboot for each change, and therefore isn't overly suited for keyboard swapping.
Option (2) can be stopped, started and amended at will with no alterations to the OS configuration.
Option (2) will typically fail to operate when the current window represents a high-integrity process, being any elevated process, and any program set to run in high integrity without elevation, such as Task Manager in Windows 8 (don't know about Vista/7 here). A code-signed program placed into a correct directory (e.g. Program Files or Program Files (x86)) can talk to elevated processes, but unless AutoHotkey is now signed, all remappings are suspended when the active process is high-integrity.
Also, option (2) does not work within remote controls sessions (remotely controlling another computer), since remote control clients ignore software hooks, while option (1) works perfectly.
Which approach you choose depends on your needs.
With AutoHotkey, the following will reverse Windows and alt:
LWin::LAlt
LAlt::LWin
RWin::RAlt
RAlt::RWin
There are other oddities though, such as figuring out how to get print screen back.