Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I use my mouse with both hands and like to switch back and forth for comfort reasons. However, this is made difficult by needing to go through about a zillion layers of menus to swap the buttons each time. Is there an easy way to create a single keyboard shortcut that would swap my left and right mouse button?

Edit: My OS is Windows 7.

share|improve this question

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

share|improve this answer

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
share|improve this answer

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

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

share|improve this answer

I dunno about a keyboard shortcut but you can make two reg files that do what's described here. Just click and away you go.

If you really want to get nuts with it, set up an AutoHotkey script that triggers the reg files

share|improve this answer
    
That’s no good, simply changing the registry entry has no effect; the buttons remain unchanged. You would need to reboot or log out and back in for them to take effect. – Synetech Jan 5 '14 at 5:56

Have you looked at:

http://www.autohotkey.com/board/topic/44468-eithermouse-059-multiple-mice-individual-settings/

This allows you to swap buttons from your sys tray, and also allows you to have two mice simultaneously.

share|improve this answer
    
This would be more helpful if you had included a script to do it. Otherwise this is better as a comment. – Synetech Jan 5 '14 at 5:56

I like to avoid using random exe files when possible, here is a AutoHotKey solution based on the keyboard solution previously mentioned.

Make a shortcut at called c:\mouse.ink that opens the mouse settings.

Use this AHK script:

#a::
Run c:\mouse
sleep 250
send {Space}
Send {Enter}
return
share|improve this answer
    
The exe is just a compiled AutoIt script (similar to AutoHotkey). Instead of the exe, you could run the au3. – Mica Apr 12 '14 at 5:46

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!

share|improve this answer

As mivk mentioned, this is straight forward and working like a charm. This is what mivk mentioned

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

Now you may create a folder called C:\Program Files\swapmouse and copy the swapmouse.exe to the newly created folder.

Now create a shortcut for this swapmouse.exe file on your desktop.

Under the property of the shortcut file, add a shortcut key, in this case, I used "Ctrl + Alt + S" and apply.

Now everytime you press "Ctrl + Alt + S" the mouse button will be swapped.

There is no dependency on the mouse to change the mouse button anymore.

share|improve this answer
1  
Welcome to Super User! This duplicates another answer and adds no new content. Please don't post an answer unless you actually have something new to contribute. – DavidPostill Feb 28 at 18:30

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.