Solution 1:

As blsub6 mentioned, you can change a registry value (with a command called from a batch file):

REG ADD "HKCU\Control Panel\Mouse" /t REG_SZ /v SwapMouseButtons /d 1 /f

or

REG ADD "HKCU\Control Panel\Mouse" /t REG_SZ /v SwapMouseButtons /d 0 /f

However, you need to logout before it will take effect.

The better solution is to make a tiny .exe with C# to swap the setting, as described in the answers to this question.

Make a text file which you can call swapmouse.cs, containing this:

using System.Runtime.InteropServices;
using System;

class SwapMouse
{
    [DllImport("user32.dll")]
    public static extern Int32 SwapMouseButton(Int32 bSwap);

    static void Main(string[] args)
    {
        int rightButtonIsAlreadyPrimary = SwapMouseButton(1);
        if (rightButtonIsAlreadyPrimary != 0)
        {
            SwapMouseButton(0);  // Make the left mousebutton primary
        }
    }
}

And compile it to swapmouse.exe with this command:

"%SystemRoot%\Microsoft.NET\Framework64\v3.5\csc" swapmouse.cs

In more recent versions of .NET you may need to add /out:swapmouse.exe and /target:exe :

"[%SystemRoot%]\Microsoft.NET\Framework64\[version]\csc" /out:swapmouse.exe /target:exe swapmouse.cs

Then you just double-click that exe to swap the mouse buttons. It takes effect immediately.

Or, as rad mentions, you can create a shortcut, and define a keyboard shortcut/hotkey in the Shortcut tab of it's Properties.

Solution 2:

This is the Autohotkey version (modified/based on https://github.com/jNizM/AHK_DllCall_WinAPI/blob/master/src/Mouse%20Input%20Functions/SwapMouseButton.ahk).

; autohotkey code - mapped to F12
F12::
    buttonState := DllCall("user32.dll\SwapMouseButton", "UInt", 1)
    if buttonState <> 0
    {
        buttonState := DllCall("user32.dll\SwapMouseButton", "UInt", 0)
    }

This works fine with all Windows (including Windows 10). I usually map it to a hotkey such as "F12" key on my keyboard (using Autohotkey), and I can toggle between left and right mouse button instantly with press of a key. There's no need to muck with loading Control panel or setting registry / rebooting.

Solution 3:

Here's an app for that: http://code.google.com/p/mouseswap/

If you have AutoIt installed, here's the script to run in an au3 file:

#NoTrayIcon

HotKeySet("#a","MouseSwap")

Global $Buttons

While 1
   Sleep(50)
WEnd

Func MouseSwap()
   If $Buttons = 0 Then
      DllCall("user32.dll", "int", "SwapMouseButton", "int", 1)
      $Buttons = 1
      SplashTextOn("","E8",280,180,-1,-1,33,"Wingdings",80)
      Sleep(600)
      SplashOff()
   Else
      DllCall("user32.dll", "int", "SwapMouseButton", "int", 0)
      $Buttons = 0
      SplashTextOn("","8F",280,180,-1,-1,33,"Wingdings",80)
      Sleep(600)
      SplashOff()
   EndIf
EndFunc

Solution 4:

The better AHK code:

Run, main.cpl
Send, {Space}{Enter}

I also use mouse with both hands and also have Win7, this code works nice!

Solution 5:

Keyboard way of switching mouse buttons on Windows Vista (perhaps 7) and above:

  1. Windows Key
  2. type "mouse"
  3. Spacebar
  4. Enter

Yeah, it's 8 key presses but not too bad... I've done it a bunch