¿Cómo puedo invertir el movimiento del mouse (eje X e Y) en todo el sistema? (Gana 7 x64)

27

Version corta

Estoy buscando una forma de revertir los movimientos del eje del mouse X e Y. La computadora ejecuta 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 mouse 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é muy felizmente con cómo habilitar 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 comúnmente escucho "¡usa el mouse al revés!" Consejo. La dislexia no es algo que se pueda curar "simplemente leyendo las cosas bien". Si bien aprecio los intentos de ayudar, espero que algunos antecedentes puedan ayudar a las personas a comprender.

Tengo un usuario con una forma inusual de dislexia, para quien los movimientos del mouse están hacia atrás. Si quiere mover el cursor hacia la izquierda, moverá el mouse hacia la derecha. Si quiere que el cursor se mueva hacia arriba, moverá el mouse hacia abajo. Solía ​​sostener su mouse al revés, lo que dificulta el clic sofisticado, es terrible para la ergonomía y hace que los ratones con varios botones sean completamente inútiles.

En tiempos antiguos, los controladores del mouse incluían una función de orientación (generalmente un globo de aire caliente que arrastró hacia arriba para establecer la orientación del movimiento del mouse) que podría usarse para establecer la relación entre el movimiento del mouse y el movimiento del cursor. Hace varios años, los controladores del mouse fueron "mejorados" y desde entonces esta característica se ha limitado a los trackballs.

Después de perder la función de orientación, volvió a usar el mouse al revés por un momento, hasta encontrar UberOptions , un ajuste para Logitech SetPoint , que habilitaría todas las funciones para todos los dispositivos señaladores. Esto incluyó la función de orientación. Y hubo mucho regocijo.

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

He visto algunos hacks de registro muy sofisticados. Por ejemplo, solía usar un truco que cambiaría los códigos creados por las teclas F1-F12 cuando se inventó la tecla F-Lock y se omitió para atornillar mi teclado. Espero que haya una manera de voltear X e Y en el registro; o algún otro ajuste similar a nivel de sistema por ahí.

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

Scivitri
fuente
Mi pregunta relacionada con la electrónica para una solución orientada al hardware: electronics.stackexchange.com/questions/29014/…
JYelton
1
Para su información, estoy ejecutando la última versión de SetPoint (aunque utilizo un mouse muy antiguo que se envió originalmente con la versión de SetPoint que UberOptions admite de manera predeterminada), y UberOptions aún funciona. Solo tiene que cambiar manualmente la carpeta SetPoint a la utilizada en SetPoint 6 ( setpointP). Vea aquí . Personalmente, desearía que Logitech solo contratara a los desarrolladores de UberOptions. SetPoint es atroz y hace que sus teclados / ratones sean casi inutilizables sin uberOptions.
Lèse majesté
1
@ Lèsemajesté Estoy completamente de acuerdo en desear que Logitech contrate a los desarrolladores de UberOptions. Si bien tenía su mouse anterior funcionando como usted describe, el mouse de reemplazo no es compatible con UberOptions. Aparentemente, hay un SetPoint completamente diferente para los ratones de juegos, y ella está bastante unida a todos los botones adicionales, ya que puede girar su mouse y alcanzarlos.
Scivitri

Respuestas:

18

No pude encontrar nada en línea, y pensé que esto no debería ser demasiado difícil de hacer, así que seguí y construí uno yo mismo. Requiere Microsoft .NET Framework 4.0 para ejecutarse.

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

Déjame saber cómo te va :)


Lo siento, esto tomó tanto tiempo, 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. Puede extraer un proyecto VS completo con JD si necesita el código completo de la aplicación.

Polinomio
fuente
1
¡Gracias! ¡Eso fue mucho más esfuerzo de lo que esperaba! Lo probaremos y veremos cómo funciona para ella.
Scivitri
No hay problema. Realmente no fue tan difícil de crear. Después de limpiarlo un poco y agregar algunas características adicionales, lo lanzaré como código abierto.
Polinómico el
¿Hay alguna posibilidad de que publique el código pronto? ¿O me lo pueden enviar por correo? :)
Dirk
Solo busqué en mi viejo disco duro, pero parece que este código se perdió :( Si tengo tiempo, volveré a aplicar ingeniería inversa desde el ejecutable.
Polynomial
1
@remyabel Código de núcleo agregado. El descanso se puede extraer con JustDecompile si lo necesita.
Polinomial
10

Hay un programa llamado SakasaMouse que invierte los movimientos del mouse:

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

Si mueve el mouse hacia la derecha, el puntero del mouse se mueve hacia la izquierda.

Funciona para cada mouse, incluido uno inalámbrico nuevo que acaba de comprar. El único problema es que es probable que vuelva a cambiar sin previo aviso, lo que puede ser un poco desconcertante.

Fred Davis
fuente
Después de volver a iniciar sesión en una computadora bloqueada, el cursor del mouse era invisible. Fue un poco complicado navegar a la bandeja de tareas para cerrar la aplicación. Windows 8.1
usuario 3071284
5

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

Entonces, mi sugerencia es usar un mouse PS2, esto funciona muy bien y en todo el sistema, incluso para juegos.

Tengo muchos usuarios que tuvieron que usar el mouse rotados 180 grados antes (con el cable apuntando hacia el usuario) y están muy contentos con este controlador. Curiosamente, todas menos una son mujeres :)

La instalación en Windows 7 es un poco complicada, contácteme para más detalles ...

Moritz
fuente
Si no es demasiado problema, esta respuesta sería más útil para otros usuarios si pudiera publicar instrucciones o un enlace a ellos para instalarlo en Windows 7.
Lèse majesté
1
Como no ofrezco esta versión beta para descarga pública, las instrucciones de instalación por sí solas no ayudarán :) Es complicado, por lo que crear esas instrucciones será un poco de trabajo y primero quiero terminar el controlador. Si quieres ayudar con las instrucciones, ¡de nada!
Moritz
1
@ Moritz ¡Gracias por venir a SE y unirse a la discusión! Desafortunadamente, ya no creo que su placa base tenga un puerto PS2. Son un poco obsoletos. También está un poco unida a los ratones con más botones, que tienden a ser solo USB.
Scivitri
¿Cómo pueden hacer clic en los botones con esa posición?
phuclv
Actualización importante: soy el autor de MAFMouse y la restricción a 32 bits ya no existe. x64 es compatible y el controlador está firmado ahora, por lo que la instalación es mucho más fácil. Está disponible a pedido (actualmente sin descarga) y funciona muy bien y en todo el sistema, incluso para juegos (es decir, la inversión común del eje Y). -Moritz
maf-soft
3

Hay un interesante script AHK de mouse invertido:

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 obtuve desde aquí: https://autohotkey.com/board/topic/17828-invert-mouse-axis/

En su caso, incluso comprobaría la posibilidad de hacer una modificación rápida de HW para invertir el eje dentro del mouse.

tienda
fuente
0

Yo también invierto la orientación de mi mouse y solía hacerlo en XP con Intellipoint 4 y un mouse PS2.

Desde la compra de una PC con Win 7, Intellipoint 4 no se ejecutará en ella, por lo que ahora uso Setpoint 4.8 con un mouse USB Logitech. En la página web de uberoptions le ofrece una lista de dispositivos compatibles. Parece que no se ha realizado ningún desarrollo desde aproximadamente 2009 para los nuevos ratones, por lo que debe encontrar un mouse más antiguo. El mouse M500 todavía está disponible gratuitamente.

Guy Graham
fuente