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

¿Cómo puedo invertir el movimiento del ratón (ejes X e Y) en todo el sistema? (Win 7 x64)

Versión corta

Estoy buscando una manera de invertir los movimientos del eje X e Y del ratón. El ordenador tiene Windows 7, x64 y Logitech SetPoint 6.32. Me gustaría una solución permanente a nivel de sistema, como una modificación del controlador del ratón o un ajuste del registro. ¿Alguien sabe de una manera sólida de implementar esto, o cómo encontrar los valores del registro para cambiar esto? Me conformaré con la forma de activar la función de orientación en SetPoint 6.32 para ratones y trackballs.

Versión larga La gente parece no entender nunca por qué querría esto, y suelo escuchar el consejo de “¡sólo usa el ratón hacia arriba! La dislexia no es algo que se pueda curar "simplemente leyendo las cosas bien”. Aunque aprecio los intentos de ayuda, espero que algunos antecedentes puedan ayudar a la gente a entenderlo.

Tengo un usuario con una forma inusual de dislexia, para el que los movimientos del ratón son al revés. Si quiere mover el cursor hacia la izquierda, moverá el ratón hacia la derecha. Si ella quiere que el cursor se mueva hacia arriba, ella moverá el ratón hacia abajo. Solía sujetar el ratón al revés, lo que dificulta los clics sofisticados, es terrible para la ergonomía y hace que los ratones de varios botones sean completamente inútiles.

Antiguamente, los controladores de ratón incluían una función de orientación (normalmente un globo de aire caliente que se arrastraba hacia arriba para establecer la orientación del movimiento del ratón) que podía utilizarse para establecer la relación entre el movimiento del ratón y el del cursor. Hace varios años, los controladores de ratón fueron “mejorados” y desde entonces esta función se ha limitado a los trackballs.

Después de perder la función de orientación, volvió a usar el ratón al revés durante un tiempo, hasta que encontró UberOptions , un ajuste para Logitech SetPoint , que habilitaba todas las funciones para todos los dispositivos señaladores. Esto incluía la función de orientación. Y hubo mucho regocijo.

Ahora su ratón ha muerto, y los ratones actuales de Logitech requieren una versión más nueva de SetPoint para la que UberOptions no se ha actualizado. También hemos visto MAF-Mouse (el desarrollador indicó que la versión para Windows de 64 bits no es compatible con ratones USB, todavía) y Sakasa (aunque funciona, los comentarios en la web indican que tiende a romperse al azar y con frecuencia. También es sólo un programa que se ejecuta, por lo que no es de todo el sistema).

He visto algunos hacks del registro muy sofisticados. Por ejemplo, solía usar un hack que cambiaba los códigos creados por las teclas F1-F12 cuando se inventó la tecla F-Lock y por defecto me jodía el teclado. Espero que haya una forma de cambiar X e Y en el registro; o algún otro ajuste similar a nivel de sistema.

Otra solución podría ser volver a activar la función de orientación de los ratones, así como de los trackballs. Es muy frustrante que los controladores de dispositivos de entrada incluyan la funcionalidad que necesitamos desesperadamente por una cuestión de accesibilidad, pero que se haya desactivado en nombre de hacer los controladores más a prueba de idiotas.

Respuestas (5)

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

No pude encontrar nada en línea, y pensé que esto no debería ser demasiado difícil de hacer, así que me adelanté y construí uno yo mismo. Requiere Microsoft .NET Framework 4.0 para funcionar. Polynomial’s Mouse Inverter (freeware, bajo licencia CC-BY-NC-SA) - Alt Link )

Hazme saber cómo te funciona :)

  • *

Siento que haya tardado tanto, pero aquí está el código que realmente hace la inversión:

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

Acabo de sacar esto del ejecutable con Telerik JustDecompile, porque no tengo el código original. Puedes extraer un proyecto completo de VS con JD si necesitas el código completo de la aplicación.

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

Hay un programa llamado SakasaMouse que invierte los movimientos del ratón:

SakasaMouse es un programa gratuito para invertir la dirección del movimiento del cursor del ratón en el eje x y/o en el eje y.

Si mueve el ratón hacia la derecha, el puntero del ratón se mueve hacia la izquierda.

Funciona con todos los ratones, incluido el nuevo inalámbrico que se acaba de comprar. El único problema es que puede volver a cambiar sin avisar, lo que puede ser un poco desconcertante.

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

Soy el autor de MAFMouse y es cierto que la versión x64 todavía no funciona con ratones USB (¡la versión de 32 bits sí!). Actualmente estoy demasiado ocupado para trabajar en esto.

Así que mi sugerencia es utilizar un ratón PS2 - funciona muy bien y en todo el sistema, incluso para los juegos.

Tengo muchos usuarios que antes tenían que usar el ratón girado 180 grados (con el cable apuntando al usuario) y están muy contentos con este controlador. Curiosamente todos menos uno son mujeres :)

La instalación en Windows 7 es un poco complicada, por favor póngase en contacto conmigo para más detalles…

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

Hay un interesante script de invertir el ratón AHK:

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

Lo saqué de aquí https://autohotkey.com/board/topic/17828-invert-mouse-axis/

En tu caso incluso comprobaría la posibilidad de hacer alguna modificación rápida de HW para invertir el eje dentro del ratón..

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

Yo también tengo la orientación del ratón invertida y lo hacía en XP con Intellipoint 4 y un ratón PS2.

Desde que me compré un PC con Win 7, Intellipoint 4 no funciona en él, así que ahora uso Setpoint 4.8 con un ratón USB de Logitech. En la página web de uberoptions te da una lista de dispositivos compatibles. Parece que no se ha hecho ningún desarrollo desde aproximadamente 2009 para los nuevos ratones, así que tienes que encontrar un ratón más antiguo. El ratón M500 todavía está disponible de forma gratuita.