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

Come posso invertire il movimento del mouse (asse X e Y) in tutto il sistema? (Win 7 x64)

Versione breve

Sto cercando un modo per invertire i movimenti degli assi X e Y del mouse. Il computer utilizza Windows 7, x64 e Logitech SetPoint 6.32. Vorrei una correzione permanente a livello di sistema, come una modifica al driver del mouse o una regolazione del registro. Qualcuno conosce un modo solido per implementare questo, o come trovare i valori di registro per cambiare questo? Mi accontento volentieri di come abilitare la funzione di orientamento in SetPoint 6.32 per i mouse e le trackball.

Versione lunga La gente sembra non capire mai perché dovrei volere questo, e sento spesso dire “basta usare il mouse a destra in su! La dislessia non è qualcosa che può essere curata da "basta leggere bene le cose”. Mentre apprezzo i tentativi di aiuto, spero che un po’ di background possa aiutare le persone a capire.

Ho un utente con una forma insolita di dislessia, per il quale i movimenti del mouse sono all'indietro. Se vuole spostare il cursore a sinistra, muove il mouse a destra. Se vuole che il cursore si sposti in alto, sposterà il mouse in basso. Aveva l'abitudine di tenere il mouse al contrario, il che rende difficile un clic sofisticato, è terribile per l'ergonomia, e rende i mouse a più pulsanti completamente inutili.

Ai vecchi tempi, i driver del mouse includevano una funzione di orientamento (tipicamente una mongolfiera che si trascinava verso l'alto per impostare l'orientamento del movimento del mouse) che poteva essere usata per impostare la relazione tra il movimento del mouse e il movimento del cursore. Diversi anni fa, i driver del mouse sono stati “migliorati” e questa caratteristica è stata limitata alle trackball.

Dopo aver perso la funzione di orientamento è tornata per un po’ al mousing capovolto, finché non ha trovato UberOptions , un tweak per Logitech SetPoint , che abilita tutte le funzioni per tutti i dispositivi di puntamento. Questo includeva la funzione di orientamento. E ci fu molta gioia.

Ora il suo mouse è morto, e gli attuali mouse Logitech richiedono una nuova versione 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 i mouse USB, ancora) e Sakasa (mentre funziona, i commenti sul web indicano che tende a rompersi a caso e spesso. È anche solo un programma in esecuzione, quindi non a livello di sistema).

Ho visto alcuni hack di registro molto sofisticati. Per esempio, usavo un hack che cambiava i codici creati dai tasti F1-F12 quando il tasto F-Lock è stato inventato e di default mi incasinava la tastiera. Spero che ci sia un modo per invertire X e Y nel registro; o qualche altro tweak simile a livello di sistema.

Un'altra soluzione potrebbe essere quella di riattivare la funzione di orientamento per i mouse e le trackball. È molto frustrante che i driver dei dispositivi di input includano la funzionalità di cui abbiamo disperatamente bisogno per una questione di accessibilità, ma è stata disabilitata in nome della necessità di rendere i driver più a prova di idiota.

Risposte (5)

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

Non sono riuscito a trovare niente online, e ho pensato che non dovrebbe essere troppo difficile da fare, così sono andato avanti e ne ho costruito uno da solo. Richiede Microsoft .NET Framework 4.0 per funzionare. Polynomial’s Mouse Inverter (freeware, sotto licenza CC-BY-NC-SA) - Alt Link )

Fatemi sapere come funziona per voi :)


Scusa se ci ho messo tanto, ma ecco il codice che effettivamente 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;
}

Ho appena estratto questo dall'eseguibile con Telerik JustDecompile, perché non ho il codice originale. Puoi estrarre un intero progetto VS con JD se hai bisogno del codice completo dell'applicazione.

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

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

SakasaMouse è un freeware per invertire la direzione del movimento del cursore del mouse sull'asse x e/o sull'asse y.

Se muovi il mouse a destra, il puntatore del mouse si sposta a sinistra.

Funziona per tutti i mouse, compreso uno nuovo senza fili appena comprato. L'unico problema è che rischia di tornare indietro senza preavviso, il che può essere un po’ sconcertante.

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

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

Quindi il mio suggerimento è di usare un mouse PS2 - questo funziona molto bene e a livello di sistema, anche per i giochi.

Ho molti utenti che prima dovevano usare il mouse ruotato di 180 gradi (con il cavo che punta verso l'utente) e sono molto felici con questo driver. È interessante notare che tutti tranne uno sono donne :)

L'installazione in Windows 7 è un po’ complicata, contattatemi per i dettagli…

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

C'è un interessante script AHK per invertire il mouse:

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 controllerei anche la possibilità di fare qualche veloce modifica HW per invertire l'asse dentro il mouse.

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

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

Da quando ho comprato un PC Win 7, Intellipoint 4 non funziona su di esso, e così ora uso Setpoint 4.8 con un mouse USB Logitech. Sulla pagina web di uberoptions ti dà una lista di dispositivi supportati. Sembra che non sia stato fatto alcuno sviluppo dal 2009 circa per i nuovi mouse, quindi dovete trovare un mouse più vecchio. Il mouse M500 è ancora disponibile gratuitamente.