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

Como posso inverter o movimento do rato (eixo X e Y) em todo o sistema? (Ganhe 7 x64)

Versão curta*

Estou à procura de uma forma de inverter os movimentos dos eixos X e Y do rato. O computador está a correr Windows 7, x64 e Logitech SetPoint 6.32. Gostaria de uma correcção permanente ao nível do sistema; tal como uma modificação do controlador do rato ou um ajuste do registo. Alguém sabe de uma forma sólida de implementar isto, ou como encontrar os valores de registo para alterar isto? Contentar-me-ei bastante com a forma de activar a funcionalidade de orientação no SetPoint 6.32 para ratos, bem como para bolas de pista.

** Versão Longa** As pessoas parecem nunca compreender porque é que eu quereria isto, e eu ouço normalmente conselhos de “basta usar o lado direito do rato para cima! A dislexia não é algo que possa ser curado por "apenas ler bem as coisas”. Embora aprecie as tentativas de ajudar, espero que alguns antecedentes possam ajudar as pessoas a compreender.

Tenho um utilizador com uma forma invulgar de dislexia, para quem os movimentos do rato estão atrasados. Se ela quiser mover o cursor para a esquerda, moverá o rato para a direita. Se ela quiser mover o cursor para cima, moverá o rato para baixo. Ela costumava segurar o rato de cabeça para baixo, o que dificulta os cliques sofisticados, é terrível para a ergonomia, e torna os ratos com vários botões completamente inúteis.

Em tempos antigos, os condutores de rato incluíam uma função de orientação (tipicamente um balão de ar quente arrastado para cima para definir a orientação do movimento do rato) que podia ser usada para definir a relação entre o movimento do rato e o movimento do cursor. Há vários anos, os condutores de ratos foram “melhorados” e desde então esta característica tem sido limitada às bolas de pista.

Depois de perder a funcionalidade de orientação, ela voltou a mousing de cabeça para baixo por um pouco, até encontrar UberOptions , um tweak para Logitech SetPoint , o que permitiria todas as funcionalidades para todos os dispositivos apontadores. Isto incluía a funcionalidade de orientação. E houve muito regozijo.

Agora o seu rato morreu, e os ratos actuais da Logitech requerem uma versão mais recente do SetPoint para a qual o UberOptions não foi actualizado. Vimos também MAF-Mouse (o programador indicou a versão para Windows 64-bit ainda não suporta ratos USB) e Sakasa (enquanto funciona, os comentários na web indicam que tende a quebrar aleatória e frequentemente. É também apenas um programa em execução, portanto não em todo o sistema).

tenho visto alguns hacks de registo muito sofisticados. Por exemplo, costumava usar um hack que alterava os códigos criados pelas teclas F1-F12, quando a tecla F-Lock foi inventada e usada por defeito para lixar o meu teclado. Espero que haja uma forma de inverter X e Y no registo; ou algum outro ajuste, semelhante, ao nível do sistema.

Outra solução poderia ser a reabilitar a função de orientação para ratos, bem como bolas de pista. É muito frustrante que os controladores de dispositivos de entrada incluam a funcionalidade de que precisamos desesperadamente para uma preocupação de acessibilidade, mas foi desactivada em nome de tornar os controladores mais à prova de idiotas.

Respostas (5)

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

Não consegui encontrar nada online, e achei que isto não devia ser muito difícil de fazer, por isso fui em frente e construí um eu próprio. Requer Microsoft .NET Framework 4.0 para poder funcionar. Polynomial’s Mouse Inverter (freeware, sob licença CC-BY-NC-SA) - Alt Link )

Avise-me como funciona para si :)


Desculpe esta demora, 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 tirar isto do executável com o Telerik JustDecompile, porque não tenho o código original. Pode extrair um projecto VS inteiro com JD se precisar do código de aplicação completo.

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

Há um programa chamado SakasaMouse que inverte os movimentos do rato:

SakasaMouse é um freeware para inverter a direcção do movimento do cursor do rato no eixo x e/ou no eixo y.

& > Se mover o rato para a direita, o ponteiro do rato move-se para a esquerda.

& Funciona para cada rato incluindo um novo sem fios acabado de comprar. O único problema com ele é que é susceptível de voltar sem aviso prévio, o que pode ser um pouco desconcertante.

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

Sou o autor de MAFMouse e é verdade que a versão x64 ainda não funciona com ratos USB (a versão 32 bits funciona!). Estou actualmente demasiado ocupado para trabalhar nisto.

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

Tenho muitos utilizadores que tiveram de usar o rato rodado 180 graus antes (com o cabo a apontar para o utilizador) e eles estão muito satisfeitos com este condutor. Curiosamente, todos menos uma são mulheres :)

Instalação no Windows 7 é um pouco complicado, por favor contacte-me para mais detalhes…

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

Existe um interessante script AHK de rato 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 recebi daqui https://autohotkey.com/board/topic/17828-invert-mouse-axis/

No vosso caso eu até verificaria a possibilidade de fazer alguma modificação rápida de HW para inverter o eixo dentro do rato.

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

Também eu inverti a orientação do meu rato e costumava fazê-lo em XP com Intellipoint 4 e um rato PS2.

Desde que comprei um PC Win 7, o Intellipoint 4 não funciona nele, e por isso uso agora o Setpoint 4.8 com um rato USB da Logitech. Na página web do uberoptions, ele dá-lhe uma lista de dispositivos suportados. Parece que nenhum desenvolvimento foi feito desde cerca de 2009 para novos ratos, por isso é necessário encontrar um rato mais antigo. O rato M500 ainda está disponível gratuitamente.