TransWikia.com

How can I reverse mouse movement (X & Y axis) system-wide? (Win 7 x64)

Super User Asked by Scivitri on November 27, 2021

Short Version

I’m looking for a way to reverse the X and Y mouse axis movements. The computer is running Windows 7, x64 and Logitech SetPoint 6.32. I would like a system-level, permanent fix; such as a mouse driver modification or a registry tweak. Does anyone know of a solid way of implementing this, or how to find the registry values to change this? I’ll settle quite happily for how to enable the orientation feature in SetPoint 6.32 for mice as well as trackballs.

Long Version
People seem never to understand why I would want this, and I commonly hear “just use the mouse right-side up!” advice. Dyslexia is not something which can be cured by “just reading things right.” While I appreciate the attempts to help, I’m hoping some background may help people understand.

I have a user with an unusual form of dyslexia, for whom mouse movements are backward. If she wants to move her cursor left, she will move the mouse right. If she wants the cursor to move up, she’ll move the mouse down. She used to hold her mouse upside-down, which makes sophisticated clicking difficult, is terrible for ergonomics, and makes multi-button mice completely useless.

In olden times, mouse drivers included an orientation feature (typically a hot-air balloon you dragged upward to set the mouse movement orientation) which could be used to set the relationship between mouse movement and cursor movement. Several years ago, mouse drivers were “improved” and this feature has since been limited to trackballs.

After losing the orientation feature she went back to upside-down mousing for a bit, until finding UberOptions, a tweak for Logitech SetPoint, which would enable all features for all pointing devices. This included the orientation feature. And there was much rejoicing.

Now her mouse has died, and current Logitech mice require a newer version of SetPoint for which UberOptions has not been updated. We’ve also seen MAF-Mouse (the developer indicated the version for 64-bit Windows does not support USB mice, yet) and Sakasa (while it works, commentary on the web indicate it tends to break randomly and often. It’s also just a running program, so not system-wide.).

I have seen some very sophisticated registry hacks. For example, I used to use a hack which would change the codes created by the F1-F12 keys when the F-Lock key was invented and defaulted to screwing my keyboard up. I’m hoping there’s a way to flip X and Y in the registry; or some other, similar, system-level tweak out there.

Another solution could be re-enabling the orientation feature for mice, as well as trackballs. It’s very frustrating that input device drivers include the functionality we desperately need for an accessibilty concern, but it’s been disabled in the name of making the drivers more idiot-proof.

5 Answers

There is an interesting invert mouse AHK script:

BlockInput Mouse
SetMouseDelay -1

MouseGetPos x0, y0
SetTimer WatchMouse, 1
Return

WatchMouse:
   MouseGetPos x, y
   MouseMove 2*(x0-x), 2*(y0-y), 0, R
   MouseGetPos x0, y0
Return

!z::ExitApp

I got it from here: https://autohotkey.com/board/topic/17828-invert-mouse-axis/

In your case I would even check the possibility of doing some quick HW modification to invert the axis inside of the mouse..

Answered by tent on November 27, 2021

There's a program called SakasaMouse which reverses the mouse movements:

SakasaMouse is a freeware to reverse direction of mouse cursor movement in x-axis and/or y-axis.

If you move mouse to the right, the mouse pointer moves to the left.

It works for every mouse including a new wireless one just bought. The only problem with it is that it's liable to switch back without warning, which can be a bit disconcerting.

Answered by Fred Davis on November 27, 2021

I, too, have my mouse orientation reversed and I used to do it on XP with Intellipoint 4 and a PS2 mouse.

Since buying a Win 7 PC, Intellipoint 4 won't run on it, and so I now use Setpoint 4.8 with a Logitech USB mouse. On the uberoptions webpage it gives you a list of supported devices. It appears that no development has been done since about 2009 for new mice, so you have to find an older mouse. The M500 mouse is still freely available.

Answered by Guy Graham on November 27, 2021

I'm the author of MAFMouse and it's no longer true that the x64 version does not work with USB mice - it works very good and system-wide, even for games.

I have many users who had to use the mouse rotated by 180 degrees before (with the cable pointing to the user) and they are very happy with this driver. Interestingly all but one are women :)

Installation is a bit complicated, please contact me for details...

Answered by maf-soft on November 27, 2021

Couldn't find anything online, and I figured this shouldn't be too hard to make, so I went ahead and built one myself. Requires Microsoft .NET Framework 4.0 in order to run.

Polynomial's Mouse Inverter (freeware, under CC-BY-NC-SA license) - (Alt Link)

Let me know how it works out for you :)


Sorry this took so long, but here's the code that actually does the inversion:

internal class Inverter
{
    private Point pos = Cursor.Position;

    private bool invertX;

    private bool invertY;

    private bool running;

    private bool exit;

    public bool InvertX
    {
        get
        {
            return this.invertX;
        }
        set
        {
            this.invertX = value;
            if (this.InvertSettingsChanged != null)
            {
                this.InvertSettingsChanged(this, new EventArgs());
            }
        }
    }

    public bool InvertY
    {
        get
        {
            return this.invertY;
        }
        set
        {
            this.invertY = value;
            if (this.InvertSettingsChanged != null)
            {
                this.InvertSettingsChanged(this, new EventArgs());
            }
        }
    }

    public bool Running
    {
        get
        {
            return this.running;
        }
    }

    public Inverter(bool x, bool y)
    {
        this.invertX = x;
        this.invertY = y;
        this.pos = Cursor.Position;
    }

    private void MouseLoop()
    {
        Thread.CurrentThread.IsBackground = true;
        Thread.CurrentThread.Priority = ThreadPriority.Highest;
        while (!this.exit)
        {
            Point position = Cursor.Position;
            int right = (this.invertX ? this.pos.X - (position.X - this.pos.X) : position.X);
            if (this.invertX)
            {
                if (right < 2)
                {
                    right = 2;
                }
                if (right > Screen.FromPoint(position).Bounds.Right - 2)
                {
                    Rectangle bounds = Screen.FromPoint(position).Bounds;
                    right = bounds.Right - 2;
                }
            }
            int bottom = (this.invertY ? this.pos.Y - (position.Y - this.pos.Y) : position.Y);
            if (this.invertY)
            {
                if (bottom < 2)
                {
                    bottom = 2;
                }
                if (bottom > Screen.FromPoint(position).Bounds.Bottom - 2)
                {
                    Rectangle rectangle = Screen.FromPoint(position).Bounds;
                    bottom = rectangle.Bottom - 2;
                }
            }
            Cursor.Position = new Point(right, bottom);
            this.pos = Cursor.Position;
            Thread.Sleep(1);
        }
        this.exit = false;
    }

    public void Start()
    {
        this.pos = Cursor.Position;
        this.running = true;
        (new Thread(new ThreadStart(this.MouseLoop))).Start();
    }

    public void Stop()
    {
        this.running = false;
        this.exit = true;
    }

    public event EventHandler InvertSettingsChanged;
}

I just pulled this out of the executable with Telerik JustDecompile, because I don't have the original code. You can extract an entire VS project with JD if you need the full application code.

Answered by Polynomial on November 27, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP