2012-03-30 06:10:10 +0000 2012-03-30 06:10:10 +0000
27
27

Wie kann ich die Mausbewegung (X- & Y-Achse) systemweit umkehren? (Win 7 x64)

Kurzversion

Ich suche nach einer Möglichkeit, die Bewegungen der X- und Y-Mausachse umzukehren. Auf dem Computer läuft Windows 7, x64 und Logitech SetPoint 6.32. Ich würde gerne eine dauerhafte Lösung auf Systemebene finden, z. B. eine Änderung des Maustreibers oder eine Änderung der Registry. Kennt jemand eine solide Methode, dies zu implementieren, oder weiß, wie man die Registrierungswerte findet, um dies zu ändern? Ich gebe mich gerne damit zufrieden, wie man die Orientierungsfunktion in SetPoint 6.32 sowohl für Mäuse als auch für Trackballs aktivieren kann.

Lange Version Die Leute scheinen nie zu verstehen, warum ich das möchte, und ich höre häufig den Ratschlag “Benutzen Sie die Maus einfach mit der rechten Seite nach oben!”. Legasthenie ist nicht etwas, das geheilt werden kann, indem man “die Dinge einfach richtig liest”. Obwohl ich die Versuche zu helfen sehr schätze, hoffe ich, dass einige Hintergrundinformationen helfen, die Leute zu verstehen.

Ich habe eine Benutzerin mit einer ungewöhnlichen Form von Legasthenie, für die Mausbewegungen rückwärts laufen. Wenn sie ihren Cursor nach links bewegen will, bewegt sie die Maus nach rechts. Wenn sie den Cursor nach oben bewegen will, bewegt sie die Maus nach unten. Früher hielt sie ihre Maus verkehrt herum, was anspruchsvolles Klicken erschwert, schrecklich für die Ergonomie ist und Mäuse mit mehreren Tasten völlig unbrauchbar macht.

Früher enthielten Maustreiber eine Ausrichtungsfunktion (typischerweise ein Heißluftballon, den man nach oben zog, um die Ausrichtung der Mausbewegung festzulegen), mit der man das Verhältnis zwischen Mausbewegung und Cursorbewegung einstellen konnte. Vor einigen Jahren wurden die Maustreiber “verbessert” und diese Funktion ist seitdem auf Trackballs beschränkt.

Nachdem sie die Orientierungsfunktion verloren hatte, kehrte sie für eine Weile zur umgedrehten Mausbewegung zurück, bis sie UberOptions fand, einen Tweak für Logitech SetPoint , der alle Funktionen für alle Zeigegeräte aktivieren würde. Dazu gehörte auch die Orientierungsfunktion. Und es gab viel Jubel.

Nun ist ihre Maus gestorben, und aktuelle Logitech-Mäuse benötigen eine neuere Version von SetPoint, für die UberOptions nicht aktualisiert wurde. Wir haben auch MAF-Mouse (der Entwickler gab an, dass die Version für 64-Bit-Windows noch keine USB-Mäuse unterstützt) und Sakasa (es funktioniert zwar, aber Kommentare im Web deuten darauf hin, dass es dazu neigt, zufällig und oft abzubrechen. Es ist auch nur ein laufendes Programm, also nicht systemweit.).

Ich habe einige sehr ausgeklügelte Registry-Hacks gesehen. Ich habe z.B. mal einen Hack benutzt, der die Codes, die von den Tasten F1-F12 erzeugt wurden, geändert hat, als die F-Lock-Taste erfunden wurde und standardmäßig meine Tastatur vermasselt hat. Ich hoffe, dass es einen Weg gibt, X und Y in der Registry umzudrehen; oder irgendeine andere, ähnliche, systemnahe Änderung.

Eine andere Lösung könnte sein, die Ausrichtungsfunktion für Mäuse und Trackballs wieder zu aktivieren. Es ist sehr frustrierend, dass die Treiber für Eingabegeräte die Funktionalität enthalten, die wir aus Gründen der Barrierefreiheit dringend benötigen, aber sie wurde deaktiviert, um die Treiber idiotensicherer zu machen.

Antworten (5)

18
18
18
2012-03-30 23:31:51 +0000

Konnte nichts online finden, und ich dachte, dies sollte nicht zu schwer zu machen sein, so ging ich voran und baute eine selbst. Benötigt Microsoft .NET Framework 4.0 , um zu laufen. Polynomial’s Mouse Inverter (Freeware, unter CC-BY-NC-SA Lizenz) - Alt Link )

Lassen Sie mich wissen, wie es bei Ihnen funktioniert :)


Tut mir leid, dass es so lange gedauert hat, aber hier ist der Code, der die Invertierung tatsächlich durchführt:

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;
}

Ich habe das einfach mit Telerik JustDecompile aus der ausführbaren Datei herausgezogen, weil ich den Originalcode nicht habe. Sie können ein ganzes VS-Projekt mit JD extrahieren, wenn Sie den vollständigen Anwendungscode benötigen.

10
10
10
2013-03-29 21:10:55 +0000

Es gibt ein Programm namens SakasaMouse , das die Mausbewegungen umkehrt:

SakasaMouse ist eine Freeware zum Umkehren der Bewegungsrichtung des Mauszeigers in der x-Achse und/oder y-Achse.

Wenn Sie die Maus nach rechts bewegen, bewegt sich der Mauszeiger nach links.

Es funktioniert bei jeder Maus, auch bei einer neuen, gerade gekauften kabellosen Maus. Das einzige Problem dabei ist, dass sie ohne Vorwarnung zurückschalten kann, was ein wenig beunruhigend sein kann.

5
5
5
2012-04-01 07:14:25 +0000

Ich bin der Autor von MAFMouse und es stimmt, dass die x64-Version noch nicht mit USB-Mäusen funktioniert (die 32-Bit-Version schon!). Ich bin derzeit zu beschäftigt, um daran zu arbeiten.

Mein Vorschlag ist also, eine PS2-Maus zu verwenden - das funktioniert sehr gut und systemweit, auch für Spiele.

Ich habe viele Benutzer, die vorher die Maus um 180 Grad gedreht verwenden mussten (mit dem Kabel zum Benutzer zeigend) und sie sind sehr glücklich mit diesem Treiber. Interessanterweise sind alle bis auf einen eine Frau :)

Die Installation unter Windows 7 ist ein wenig kompliziert, bitte kontaktieren Sie mich für Details…

3
3
3
2016-04-20 23:54:18 +0000

Es gibt ein interessantes Invert-Mouse-AHK-Skript:

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

Ich habe es von hier https://autohotkey.com/board/topic/17828-invert-mouse-axis/

In Ihrem Fall würde ich sogar die Möglichkeit prüfen, einige schnelle HW-Modifikation zu tun, um die Achse innerhalb der Maus zu invertieren.

0
0
0
2012-07-15 12:16:41 +0000

Auch bei mir ist die Mausausrichtung umgekehrt und ich habe das früher unter XP mit Intellipoint 4 und einer PS2-Maus gemacht.

Seit ich einen Win 7 PC gekauft habe, läuft Intellipoint 4 darauf nicht mehr, und so benutze ich jetzt Setpoint 4.8 mit einer Logitech USB-Maus. Auf der uberoptions-Webseite gibt es eine Liste der unterstützten Geräte. Es scheint, dass seit etwa 2009 keine neuen Mäuse mehr entwickelt werden, also müssen Sie eine ältere Maus finden. Die M500-Maus ist noch frei verfügbar.