23

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.

10 Answers 10

21

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.

| improve this answer | |
  • 3
    To start the exe by a keyboard shortcut: 1. Right-click on the exe and select "Create Shortcut" 2. Move the shortcut to "C:\ProgramData\Microsoft\Windows\Start Menu" or the desktop 3. Right click on the shortcut, go to the Shorcut tab and select a shortcut key – Rad Nov 21 '16 at 16:07
5

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

| improve this answer | |
3

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

| improve this answer | |
  • 5. ALT+F4 to close mouse settings window – Przemyslaw Remin Jan 2 '18 at 12:33
3

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.

| improve this answer | |
0

A few good Autohotkey suggestions here, but this one swaps the buttons in Windows directly and gives a popup notification.

It's a copy of the mouseswap Autoit script mentioned by mica.

#a::
if button = 0
    {
    DllCall("SwapMouseButton", "int", 1)
    button = 1
    SplashTextOn, 120, 30, Mouse Button, Left handed
    Sleep 600
    SplashTextOff
    }
else
    {
    DllCall("SwapMouseButton", "int", 0)
    button = 0
    SplashTextOn, 120, 30, Mouse Button, Right handed
    Sleep 600
    SplashTextOff
    }
return

A terser alternative without the popup:

Swapped := DllCall("SwapMouseButton", Int, 0)
if Swapped = 0
 DllCall("SwapMouseButton", Int, 1)
| improve this answer | |
-1

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

| 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
-1

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
| 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
-1

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.

| 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 '16 at 18:30
-1

Have you looked at: https://www.eithermouse.com/

This is a compiled autohotkey script that allows you to swap buttons from your sys tray, and also allows you to have two mice with simultaneously. I have two mice which I use to alternate between left and right hands. And this automatically changes angle of cursor and mouse button.

| 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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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