Come posso invertire il movimento del mouse (asse X e Y) a livello di sistema? (Win 7 x64)


27

Versione breve

Sto cercando un modo per invertire i movimenti degli assi del mouse X e Y. Il computer esegue Windows 7, x64 e Logitech SetPoint 6.32. Vorrei una correzione permanente a livello di sistema; come una modifica del driver del mouse o una modifica del registro. Qualcuno sa un modo solido di implementare questo, o come trovare i valori di registro per cambiarlo? Mi accontenterò abbastanza felicemente di come abilitare la funzione di orientamento in SetPoint 6.32 per mouse e trackball.

Versione lunga Le persone sembrano non capire mai perché lo desidererei e di solito sento "usare il mouse con il lato destro in alto!" consigli. La dislessia non è qualcosa che può essere curata "leggendo semplicemente le cose nel modo giusto". Mentre apprezzo i tentativi di aiuto, spero che alcuni retroscena possano aiutare le persone a capire.

Ho un utente con una forma insolita di dislessia, per la quale i movimenti del mouse sono arretrati. Se vuole spostare il cursore a sinistra, sposta il mouse a destra. Se vuole che il cursore si sposti verso l'alto, sposta il mouse verso il basso. Teneva il mouse capovolto, il che rende difficile fare clic sofisticato, è terribile per l'ergonomia e rende i mouse multi-pulsante completamente inutili.

In passato, i driver del mouse includevano una funzione di orientamento (in genere una mongolfiera trascinata verso l'alto per impostare l'orientamento del movimento del mouse) che poteva essere utilizzata per impostare la relazione tra movimento del mouse e movimento del cursore. Diversi anni fa, i driver del mouse sono stati "migliorati" e da allora questa funzionalità è stata limitata alle trackball.

Dopo aver perso la funzione di orientamento, è tornata per un po 'al rovescio del mouse, fino a trovare UberOptions , una modifica per Logitech SetPoint , che abilitava tutte le funzionalità per tutti i dispositivi di puntamento. Ciò includeva la funzione di orientamento. E c'era molta gioia.

Ora il suo mouse è morto e gli attuali mouse Logitech richiedono una versione più recente di SetPoint per la quale UberOptions non è stato aggiornato. Abbiamo anche visto MAF-Mouse (lo sviluppatore ha indicato che la versione per Windows a 64 bit non supporta ancora i mouse USB) e Sakasa (mentre funziona, i commenti sul web indicano che tende a rompersi casualmente e spesso. È anche solo un programma in esecuzione, quindi non a livello di sistema.).

Ho visto alcuni hack di registro molto sofisticati. Ad esempio, usavo un hack che modificava i codici creati dai tasti F1-F12 quando il tasto F-Lock è stato inventato e per impostazione predefinita ha rovinato la mia tastiera. Spero che ci sia un modo per capovolgere X e Y nel registro; o qualche altra modifica simile a livello di sistema là fuori.

Un'altra soluzione potrebbe essere la riattivazione della funzione di orientamento per topi e trackball. È molto frustrante che i driver dei dispositivi di input includano le funzionalità di cui abbiamo disperatamente bisogno per motivi di accessibilità, ma è stato disabilitato nel nome di rendere i driver più a prova di idiota.


La mia domanda
legata

1
Cordiali saluti, sto eseguendo l'ultima versione di SetPoint (anche se utilizzando un mouse molto vecchio originariamente fornito con la versione di SetPoint che UberOptions supportava per impostazione predefinita), e UberOptions funziona ancora. Devi solo cambiare manualmente la cartella SetPoint con quella usata in SetPoint 6 ( setpointP). Vedi qui . Personalmente, vorrei che Logitech assumesse già gli sviluppatori UberOptions. SetPoint è atroce e rende le loro tastiere / mouse quasi inutilizzabili senza uberOptions.
Lèse majesté,

1
@ Lèsemajesté Concordo pienamente nel desiderare che Logitech assumesse gli sviluppatori UberOptions. Mentre il tuo vecchio mouse funzionava come descritto, il mouse sostitutivo non è supportato da UberOptions. Apparentemente c'è un SetPoint completamente diverso per i mouse da gioco, ed è diventata abbastanza attaccata a tutti i pulsanti extra da quando è stata in grado di girare il mouse e raggiungerli.
Scivitri,

Risposte:


18

Non ho trovato nulla online e ho pensato che non sarebbe stato troppo difficile da realizzare, quindi sono andato avanti e ne ho costruito uno da solo. Richiede Microsoft .NET Framework 4.0 per funzionare.

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

Fammi sapere come funziona :)


Mi dispiace che ci sia voluto tanto tempo, ma ecco il codice che in realtà fa l'inversione:

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

L'ho appena estratto dall'eseguibile con Telerik JustDecompile, perché non ho il codice originale. È possibile estrarre un intero progetto VS con JD se è necessario il codice completo dell'applicazione.


1
Grazie! È stato uno sforzo molto maggiore di quanto mi aspettassi! Lo proveremo e vedremo come funziona per lei.
Scivitri,

Nessun problema. Non è stato poi così difficile da creare. Dopo averlo pulito un po 'e aggiunto alcune funzionalità extra, lo rilascerò come open source.
Polinomio

C'è qualche possibilità che tu rilasci presto il codice? Oppure, puoi inviarmelo? :)
Dirk,

Ho appena scavato il mio vecchio disco rigido, ma sembra che questo codice sia andato perso :( Se avrò tempo, lo riprogetterò dall'eseguibile.
Polynomial

1
Aggiunto il codice @remyabel Core. Il resto può essere estratto con JustDecompile se ne hai bisogno.
Polinomio

10

C'è un programma chiamato SakasaMouse che inverte i movimenti del mouse:

SakasaMouse è un software gratuito per invertire la direzione del movimento del cursore del mouse sull'asse xe / o y.

Se si sposta il mouse verso destra, il puntatore del mouse si sposta verso sinistra.

Funziona con ogni mouse, incluso uno nuovo wireless appena acquistato. L'unico problema è che può tornare indietro senza preavviso, il che può essere un po 'sconcertante.


Dopo aver effettuato nuovamente l'accesso a un computer bloccato, il cursore del mouse era invisibile. È stato un po 'complicato passare alla barra delle applicazioni per chiudere l'app. Windows 8.1
user3071284

5

Sono l'autore di MAFMouse ed è vero che la versione x64 non funziona ancora con i mouse USB (la versione a 32 bit funziona!). Al momento sono troppo occupato per lavorare su questo.

Quindi il mio consiglio è di usare un mouse PS2: funziona molto bene e in tutto il sistema, anche per i giochi.

Ho molti utenti che hanno dovuto usare il mouse ruotato di 180 gradi prima (con il cavo che punta verso l'utente) e sono molto contenti di questo driver. È interessante notare che tutte tranne una sono donne :)

L'installazione in Windows 7 è un po 'complicata, per favore contattami per i dettagli ...


Se non ci sono troppi problemi, renderebbe questa risposta più utile per gli altri utenti se potessi pubblicare istruzioni o un link per installarli su Windows 7.
Lèse majesté

1
Dal momento che non offro questa versione beta per il download pubblico, le istruzioni di installazione da sole non aiuteranno :) È complicato, quindi la creazione di quelle istruzioni richiederà un po 'di lavoro e prima voglio finire il driver. Se vuoi aiutare con le istruzioni, sei il benvenuto!
Moritz

1
@Moritz Grazie per essere venuto a SE e aver partecipato alla discussione! Sfortunatamente, non penso più che la sua scheda madre abbia anche una porta PS2. Sono un po 'obsoleti. È anche un po 'attaccata ai topi più abbottonati, che tendono ad essere solo USB.
Scivitri,

come possono fare clic sui pulsanti con quella posizione?
phuclv,

Aggiornamento importante: sono l'autore di MAFMouse e la limitazione a 32 bit non è più disponibile. x64 è supportato e il driver è firmato ora, quindi l'installazione è molto più semplice. È disponibile su richiesta (attualmente senza download) e funziona molto bene e a livello di sistema, anche per i giochi (ovvero l'inversione dell'asse Y comune). -Moritz
maf-soft

3

Esiste un interessante script AHK per il mouse invertito:

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

L'ho preso da qui: https://autohotkey.com/board/topic/17828-invert-mouse-axis/

Nel tuo caso, verificherei anche la possibilità di apportare alcune rapide modifiche HW per invertire l'asse all'interno del mouse.


0

Anch'io ho il mio orientamento del mouse invertito e lo facevo su XP con Intellipoint 4 e un mouse PS2.

Da quando ho acquistato un PC Win 7, Intellipoint 4 non funzionerà su di esso, quindi uso Setpoint 4.8 con un mouse USB Logitech. Sulla pagina web di uberoptions ti dà un elenco di dispositivi supportati. Sembra che dal 2009 non sia stato fatto alcun sviluppo per i nuovi topi, quindi è necessario trovare un mouse più vecchio. Il mouse M500 è ancora disponibile gratuitamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.