Como posso reverter o movimento do mouse (eixo X e Y) em todo o sistema? (Win 7 x64)

26

Versão resumida

Estou procurando uma maneira de reverter os movimentos do eixo do mouse X e Y. O computador está executando o Windows 7, x64 e o Logitech SetPoint 6.32. Eu gostaria de uma correção permanente no nível do sistema; como uma modificação de driver de mouse ou um ajuste de registro. Alguém sabe de uma maneira sólida de implementar isso, ou como encontrar os valores do registro para mudar isso? Vou me contentar com muito prazer em saber como habilitar o recurso de orientação no SetPoint 6.32 para mouses, assim como trackballs.

Versão longa As pessoas parecem nunca entender por que eu gostaria disso, e eu geralmente ouço "apenas use o mouse com o lado direito para cima!" conselhos. A dislexia não é algo que pode ser curado com "apenas lendo as coisas direito". Embora eu aprecie as tentativas de ajudar, espero que algumas informações possam ajudar as pessoas a entender.

Eu tenho um usuário com uma forma incomum de dislexia, para quem os movimentos do mouse estão para trás. Se ela quiser mover o cursor para a esquerda, ela moverá o mouse para a direita. Se ela quiser que o cursor suba, ela moverá o mouse para baixo. Ela costumava segurar o mouse de cabeça para baixo, o que torna os cliques sofisticados difíceis, é péssimo para a ergonomia e torna os mouses com vários botões completamente inúteis.

Antigamente, os drivers de mouse incluíam um recurso de orientação (normalmente um balão de ar quente que você arrastou para cima para definir a orientação do movimento do mouse) que poderia ser usado para definir a relação entre o movimento do mouse e o movimento do cursor. Vários anos atrás, os drivers de mouse foram "melhorados" e esse recurso foi limitado a trackballs.

Depois de perder o recurso de orientação, ela voltou para o mouse de cabeça para baixo um pouco, até encontrar UberOptions , um ajuste para Logitech SetPoint , que habilitaria todos os recursos para todos os dispositivos apontadores. Isso incluiu o recurso de orientação. E havia muita alegria.

Agora seu mouse morreu e os mouses atuais da Logitech precisam de uma versão mais recente do SetPoint para a qual o UberOptions não tenha sido atualizado. Também vimos MAF-Mouse (o desenvolvedor indicou que a versão para Windows de 64 bits não suporta mouses USB, ainda) e Sakasa (enquanto funciona, comentários na web indicam que ele tende a quebrar aleatoriamente e muitas vezes. Também é apenas um programa em execução, portanto não em todo o sistema.).

Eu vi alguns hacks de registro muito sofisticados. Por exemplo, eu costumava usar um hack que mudaria os códigos criados pelas teclas F1-F12 quando a tecla F-Lock fosse inventada e padronizada para apertar meu teclado. Eu estou esperando que haja uma maneira de virar X e Y no registro; ou algum outro ajuste similar no nível do sistema.

Outra solução poderia ser reativar o recurso de orientação para mouses, assim como os trackballs. É muito frustrante que os drivers de dispositivos de entrada incluam a funcionalidade que precisamos desesperadamente para uma preocupação de acessibilidade, mas ela foi desativada no nome de tornar os drivers mais à prova de idiotas.

    
por Scivitri 30.03.2012 / 08:10

5 respostas

18

Não foi possível encontrar nada on-line, e imaginei que isso não seria muito difícil de fazer, então fui em frente e construí um. Requer Microsoft .NET Framework 4.0 para ser executado .

Inverter do mouse do polinômio (freeware, sob CC-BY-NC- Licença SA) - ( Link Alt )

Deixe-me saber como isso funciona para você:)

Desculpe, demorou muito, mas aqui está o código que realmente faz a inversão:

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

Acabei de retirar isso do executável com o Telerik JustDecompile, porque não tenho o código original. Você pode extrair um projeto VS inteiro com JD se precisar do código completo do aplicativo.

    
por 31.03.2012 / 01:31
9

Existe um programa chamado SakasaMouse que inverte os movimentos do mouse:

SakasaMouse is a freeware to reverse direction of mouse cursor movement in x-axis and/or y-axis.

If you move mouse to the right, the mouse pointer moves to the left.

Funciona para todos os ratos, incluindo um novo sem fio que acabamos de comprar. O único problema é que é possível voltar sem aviso prévio, o que pode ser um pouco desconcertante.

    
por 29.03.2013 / 22:10
5

Sou o autor do MAFMouse e é verdade que a versão x64 ainda não funciona com mouses USB (a versão de 32 bits funciona!). Atualmente estou ocupado demais para trabalhar nisso.

Então, minha sugestão é usar um mouse PS2 - isso funciona muito bem e em todo o sistema, mesmo para jogos.

Eu tenho muitos usuários que tiveram que usar o mouse girado 180 graus antes (com o cabo apontando para o usuário) e eles estão muito felizes com este driver. Curiosamente, todos, exceto um são mulheres:)

A instalação no Windows 7 é um pouco complicada, entre em contato comigo para mais detalhes ...

    
por 01.04.2012 / 09:14
3

Existe um interessante 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

Eu peguei daqui: link

No seu caso eu até verificaria a possibilidade de fazer algumas modificações rápidas no HW para inverter o eixo dentro do mouse.

    
por 21.04.2016 / 01:54
0

Eu também tenho a minha orientação de mouse invertida e eu costumava fazê-lo no XP com IntelliPoint 4 e um mouse PS2.

Desde a compra de um PC com o Win 7, o Intellipoint 4 não roda nele, e agora uso o Setpoint 4.8 com um mouse USB da Logitech. Na página da web uberoptions, você recebe uma lista de dispositivos compatíveis. Parece que nenhum desenvolvimento foi feito desde 2009 para novos mouses, então você precisa encontrar um mouse mais antigo. O mouse M500 ainda está disponível gratuitamente.

    
por 15.07.2012 / 14:16