3

What I want to do (the short part of the post)

I want to switch left and right mouse button on the driver level.

That is, I want to either modify or override mouse driver in order to switch left and right mouse buttons on Windows operating system. (The solution should preferably work with Windows 7 and up.)

Why on Earth I want to do it (the long part of the post)

Terminology

For the sake of brevity and clarity, I'm going to use the following bolded terms:

  • left - left physical mouse button
  • right - right physical mouse button
  • click - a signal that is normally sent when you press left, used to e.g. select a file, click a button, drag-and-drop a window
  • menu - a signal that is normally sent when you press right, used to e.g. open a context menu
  • Win-swap - a Windows Control Panel > Mouse setting that makes left fire menu and right fire click.

The problem

I'm left handed. I use the mouse with my left hand. As a normal human being, I trigger click with my index finger and menu with my middle finger - which means I use right to click and left to menu. Normally, Win-swap would be sufficient for that - and it does work for browsers, office software, media editors, programming IDEs and the like.

Unfortunately, I'm also a gamer. Due to a peculiarity in how DirectX handles mouse buttons, quite a lot of games - regardless of whether they are high-budget releases or single-developer freeware - ignore Win-swap and (AFAIK) read button signals from the driver level.

This usually means either that (if you can't rebind mouse buttons inside the game) the whole game is basically unplayable or that (if you can rebind) navigating in-game menus requires a lot of concetration and carries a constant risk of accidentally failing to perform simple tasks.

Either way, it is rather unpleasant, irritating and making enjoying my hobby difficult, since it means I have to abandon games I'm interested.

Solutions that I tried

I bought Razer Abyssus. Both versions of its drivers are so horribly bugged that - in order to enable left-handed button layout - I need to setup a chain of Abyssus-old drivers-X-Mouse Button Control. Since Razer is supposed to be one of leaders of gaming-related peripherals, the fact they can't make drivers with basic level of usability, makes me wary of putting my trust and money in any gaming mouse.

Over the course of last 5 years, I have tried about 8 different applications (including a demo of a paid software) that were supposed to swap the buttons. Unfortuantely, none of them worked - they were either an UI overlay for Win-swap or the swap was on even shallower level than Win-swap (D-Mouse).

X-Mouse Button Control came closest, but unfortunately it doesn't actually intercept original signals, so you end up sending both click and menu when clicking either mouse button.

I also tried AutoHotKey, but simple macro along the lines of

left::right
right::left

didn't work, and the community was less than helpful. (AHK forums used to be filled with RTFM responses.)

Possible pitfalls

Reportedly, a certain brand of laptops has custom mouse menu in Control Panel that propagates Win-swap to driver level.


Thank you in advance for any answers. If you need clarification/more information, I should be able to provide them within 24 hours.

  • Insn't this switchable in the mouse control panel? – Mark Oct 4 '16 at 12:23
  • @Mark As I explicitly said in the post - it is switchable there, but it works only in non-fullscreen applications. – Dragomok Oct 4 '16 at 12:27
  • Related (but more specific) question: superuser.com/q/462547/493800 – Dragomok Jan 25 '17 at 19:24
  • Quite possibly [EitherMouse](www.eithermouse.com) would solve this problem, but I won't have time to test it with my benchmarks for a month or so. – Dragomok Jun 15 '17 at 5:09
  • 1
    I have reverted your edits. Here on Super User (and entire Stack Exchange network) most helpful solutions are marked by accepting an answer (as you already did), not linking to them in the question. The answer will be organically promoted to the top as users upvote it. – gronostaj Jul 10 '17 at 14:42
5

If you want to permanently switch the mouse buttons and software wont let you do it, then you can try to do it in hardware.

Of course, this all depends on the mouse hardware itself, but you should be able to desolder and resolder the wires connecting the mouse button's intermittent switches.

  • I like this answer. Nice lateral thinking :) – DavidPostill Oct 4 '16 at 17:09
  • I have actually wondered about doing that - however, I wasn't sure if this was possible/feasible. I guess I can commision that to some local students or electrician when I have a mice I can risk losing. Thank you. (I will still wait a bit for non-hardware solutions, though.) – Dragomok Oct 4 '16 at 19:47
2

Apparently, if you want mouse to work as intended in Windows, you go to people doing file system drivers.

Moure, a part of Ext2Fsd project, actually makes left-handed mouse work flawlessly on all of my benchmarks.

Granted, it runs in an actual window and there doesn't seem to be any way to have it automatically run at startup (or automagically mark every mouse as left-handed) changes system-wide drivers that affect all Windows users (instead of a single user), but it actually works.

If I'll find any issues during my use, I'll update this answers.

0

A remarkably unreliable workaround for the issue is using the following AutoHotKey script (works for AHK v1.1.24.02 and possibly earlier):

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

LButton::RButton
Rbutton::LButton

It fixes the issue for some games.

Unfortunately, it's not a silver bullet solution and is annoying to use, since it requires you to disable WinSwap every time you start a problematic game (and to enable it back again when you quit), because it practically breaks Windows taskbar when it's active (which also makes turning it off a bit tricky).

I'm posting it only because in the land of the blind, the one-eyed man is a king - even if he has a severe case of nyctalopia.

  • 1
    FYI, AutoHotkey will let you make program-specific bindings with #If statements and #IfWinActive, which means you should be able to enable this just when certain programs are active, and not have to disable/enable WinSwap. For example #If WinActive("ahk_exe programA.exe") || WinActive("ahk_exe programB.exe") will enable the LButton/Rbutton swap only when program A or B is the active window. – JJohnston2 Dec 16 '16 at 1:01
  • @JJohnston2 That's very useful information that will come in handy for my other scripts. Thanks. – Dragomok Dec 16 '16 at 10:07

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.