web-dev-qa-db-fra.com

Comment puis-je inverser le mouvement de la souris (axes X et Y) à l'échelle du système? (Win 7 x64)

Version courte

Je cherche un moyen d'inverser les mouvements des axes X et Y de la souris. L'ordinateur exécute Windows 7, x64 et Logitech SetPoint 6.32. Je voudrais un correctif permanent au niveau du système; comme une modification du pilote de la souris ou un tweak de registre. Est-ce que quelqu'un connaît un moyen solide d'implémenter cela, ou comment trouver les valeurs de registre pour changer cela? Je me contenterai volontiers de l'activation de la fonction d'orientation dans SetPoint 6.32 pour les souris et les trackballs.

Version longue Les gens ne semblent jamais comprendre pourquoi je voudrais cela, et j'entends souvent des conseils sur l'utilisation de la souris. "La dyslexie n'est pas quelque chose qui peut être guéri par" "Bien que j'apprécie les tentatives d'aide, j'espère qu'un peu de contexte aidera les gens à comprendre.} _

J'ai un utilisateur avec une forme inhabituelle de dyslexie, pour qui les mouvements de souris sont en arrière. Si elle veut déplacer son curseur à gauche, elle déplacera la souris à droite. Si elle veut que le curseur se déplace vers le haut, elle déplacera la souris vers le bas. Auparavant, elle tenait sa souris à l'envers, ce qui rend le clic sophistiqué difficile, son ergonomie est redoutable et rend les souris à plusieurs boutons totalement inutiles.

Autrefois, les pilotes de souris incluaient une fonction d'orientation (généralement une montgolfière que vous avez déplacée vers le haut pour définir l'orientation des mouvements de la souris), qui pouvait être utilisée pour définir la relation entre les mouvements de la souris et du curseur. Il y a plusieurs années, les pilotes de souris étaient "améliorés" et cette fonctionnalité a été limitée aux trackballs.

Après avoir perdu la fonctionnalité d’orientation, elle est revenue un peu à la souris à l'envers, jusqu'à ce qu'elle trouve UberOptions , un Tweak pour Logitech SetPoint , qui activerait toutes les fonctionnalités pour tous les périphériques de pointage. Cela comprenait la fonction d'orientation. Et il y avait beaucoup de joie.

Maintenant, sa souris est morte et les souris Logitech actuelles nécessitent une version plus récente de SetPoint pour laquelle UberOptions n'a pas été mise à jour. Nous avons également vu MAF-Mouse (le développeur a indiqué que la version pour Windows 64 bits ne prend pas encore en charge les souris USB) et Sakasa (tant que cela fonctionne, les commentaires sur le Web indiquent casser au hasard et souvent. C’est aussi un programme en cours, donc pas à l’échelle du système.).

J'ai vu des piratages de registre très sophistiqués. Par exemple, j’utilisais un hack qui modifiait les codes créés par les touches F1-F12 lors de l’invention de la touche F-Lock et qui consistait par défaut à visser mon clavier. J'espère qu'il y a un moyen de retourner X et Y dans le registre; ou un autre Tweak similaire, au niveau système.

Une autre solution pourrait être de réactiver la fonction d’orientation pour les souris, ainsi que les trackballs. Il est très frustrant de constater que les pilotes de périphérique d'entrée incluent la fonctionnalité dont nous avons désespérément besoin pour des raisons d'accessibilité, mais cette fonctionnalité a été désactivée dans le but de rendre les pilotes plus résistants aux idiots.

26
Scivitri

Je n'ai rien trouvé en ligne, et je me suis dit que cela ne devrait pas être trop difficile à faire, alors je suis allé de l'avant et j'en ai construit un moi-même. Requiert Microsoft .NET Framework 4.0 pour pouvoir s'exécuter.

Polynomial's Mouse Inverter (logiciel gratuit, sous licence CC-BY-NC-SA) - ( Alt Link )

Permettez-moi de savoir comment cela fonctionne pour vous :)


Désolé, cela a pris si longtemps, mais voici le code qui effectue l'inversion:

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

Je viens de tirer cela de l'exécutable avec Telerik JustDecompile, parce que je n'ai pas le code original. Vous pouvez extraire un projet VS complet avec JD si vous avez besoin du code complet de l'application.

18
Polynomial

Il existe un programme appelé SakasaMouse qui inverse les mouvements de la souris:

SakasaMouse est un logiciel gratuit pour inverser la direction du mouvement du curseur de la souris en abscisse et/ou en ordonnée.

Si vous déplacez la souris vers la droite, le pointeur de la souris se déplace vers la gauche.

Cela fonctionne pour toutes les souris, y compris une nouvelle souris sans fil récemment achetée. Le seul problème avec cela est qu'il est susceptible de revenir en arrière sans avertissement, ce qui peut être un peu déconcertant.

9
Fred Davis

Je suis l'auteur de MAFMouse et il est vrai que la version x64 ne fonctionne pas encore avec les souris USB (la version 32 bits le fait!). Je suis actuellement trop occupé pour travailler là-dessus.

Donc, ma suggestion est d'utiliser une souris PS2 - cela fonctionne très bien et à l'échelle du système, même pour les jeux.

De nombreux utilisateurs ont déjà utilisé la souris avec une rotation de 180 degrés (le câble pointant vers l'utilisateur) et ils sont très satisfaits de ce pilote. Fait intéressant, toutes les femmes sauf une sont des femmes :)

L'installation sous Windows 7 est un peu compliquée, veuillez me contacter pour plus de détails ...

5
Moritz

Il y a un script AHK de souris inverti intéressant:

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

Je l'ai eu d'ici: https://autohotkey.com/board/topic/17828-invert-mouse-axis/

Dans votre cas, je voudrais même vérifier la possibilité d'effectuer quelques modifications matérielles rapides pour inverser l'axe situé à l'intérieur de la souris.

3
tent

Moi aussi, j'ai l'orientation de la souris inversée et je le faisais auparavant sur XP avec Intellipoint 4 et une souris PS2.

Depuis l’achat d’un PC Win 7, Intellipoint 4 ne fonctionne plus, c’est pourquoi j’utilise maintenant Setpoint 4.8 avec une souris Logitech USB. Sur la page Web uberoptions, vous trouverez une liste des appareils pris en charge. Il semble qu’aucun développement n’ait été fait depuis 2009 environ pour les nouvelles souris. Il faut donc trouver une souris plus ancienne. La souris M500 est toujours disponible gratuitement.

0
Guy Graham