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

Jak mogę odwrócić ruch myszy (oś X i Y) w całym systemie? (Win 7 x64)

Skrócona wersja

Szukam sposobu na odwrócenie ruchów osi X i Y myszy. Na komputerze jest zainstalowany system Windows 7, x64 i Logitech SetPoint 6.32. Chciałbym uzyskać trwałą poprawkę na poziomie systemu; taką jak modyfikacja sterownika myszy lub zmiana w rejestrze. Czy ktoś zna solidny sposób na wdrożenie tego lub jak znaleźć wartości rejestru, aby to zmienić? Zadowolę się tym, jak włączyć funkcję orientacji w SetPoint 6.32 dla myszy i trackballi.

Długa wersja Ludzie zdają się nigdy nie rozumieć, dlaczego miałbym tego chcieć i często słyszę radę “po prostu używaj myszy prawą stroną do góry!”. Dysleksja nie jest czymś, co może być wyleczone przez “po prostu czytanie rzeczy prawidłowo”. Chociaż doceniam próby pomocy, mam nadzieję, że pewne tło może pomóc ludziom zrozumieć.

Mam użytkownika z nietypową formą dysleksji, dla którego ruchy myszy są wsteczne. Jeśli chce przesunąć kursor w lewo, przesunie mysz w prawo. Jeśli chce przesunąć kursor w górę, przesunie mysz w dół. Zwykle trzymała mysz do góry nogami, co utrudnia wyrafinowane klikanie, jest okropne dla ergonomii i sprawia, że myszy wieloprzyciskowe są całkowicie bezużyteczne.

W dawnych czasach sterowniki myszy zawierały funkcję orientacji (zazwyczaj balonik z gorącym powietrzem, który przeciągałeś w górę, aby ustawić orientację ruchu myszy), której można było użyć do ustawienia relacji między ruchem myszy a ruchem kursora. Kilka lat temu sterowniki myszy zostały “ulepszone” i od tego czasu funkcja ta została ograniczona do trackballi.

Po utracie funkcji orientacji, wróciła do używania myszy do góry nogami przez jakiś czas, aż znalazła UberOptions , tweak dla Logitech SetPoint , który włączyłby wszystkie funkcje dla wszystkich urządzeń wskazujących. Obejmowało to również funkcję orientacji. I było wiele radości.

Teraz jej mysz umarła, a obecne myszy Logitech wymagają nowszej wersji SetPoint, dla której UberOptions nie zostały zaktualizowane. Widzieliśmy również MAF-Mouse (deweloper wskazał, że wersja dla 64-bitowych Windows nie obsługuje myszy USB, jeszcze) i Sakasa (chociaż działa, komentarze w sieci wskazują, że ma tendencję do losowego i częstego psucia się. Jest to również tylko działający program, więc nie jest ogólnosystemowy).

Widziałem kilka bardzo wyrafinowanych hacków rejestru. Na przykład, używałem hacka, który zmieniał kody tworzone przez klawisze F1-F12, gdy klawisz F-Lock został wynaleziony i domyślnie podkręcał moją klawiaturę. Mam nadzieję, że istnieje sposób na odwrócenie X i Y w rejestrze; lub jakiś inny, podobny, systemowy tweak tam.

Innym rozwiązaniem może być ponowne włączenie funkcji orientacji dla myszy, jak również trackballi. To bardzo frustrujące, że sterowniki urządzeń wejściowych zawierają funkcję, której desperacko potrzebujemy ze względu na dostępność, ale została ona wyłączona w imię uczynienia sterowników bardziej odpornymi na idiotyzmy.

Odpowiedzi (5)

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

Nie mogłem znaleźć nic w sieci, a pomyślałem, że to nie powinno być zbyt trudne do zrobienia, więc poszedłem naprzód i zbudowałem go sam. Wymaga Microsoft .NET Framework 4.0 do działania. Polynomial’s Mouse Inverter (freeware, na licencji CC-BY-NC-SA) - Alt Link )

Daj znać jak Ci się sprawuje :)


Przepraszam, że to trwało tak długo, ale oto kod, który faktycznie wykonuje inwersję:

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

Właśnie wyciągnąłem to z pliku wykonywalnego za pomocą Telerik JustDecompile, ponieważ nie mam oryginalnego kodu. Możesz wyodrębnić cały projekt VS za pomocą JD, jeśli potrzebujesz pełnego kodu aplikacji.

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

Istnieje program o nazwie SakasaMouse , który odwraca ruchy myszy:

SakasaMouse to freeware do odwracania kierunku ruchu kursora myszy w osi x i/lub y.

Jeśli przesuniesz mysz w prawo, wskaźnik myszy przesunie się w lewo.

Działa to dla każdej myszy, łącznie z nową bezprzewodową, którą właśnie kupiłem. Jedynym problemem z nim jest to, że może się przełączyć z powrotem bez ostrzeżenia, co może być nieco niepokojące.

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

Jestem autorem MAFMouse i to prawda, że wersja x64 nie działa jeszcze z myszami USB (wersja 32-bitowa działa!). Obecnie jestem zbyt zajęty, aby nad tym pracować.

Więc moją sugestią jest użycie myszy PS2 - działa ona bardzo dobrze i systemowo, nawet w grach.

Mam wielu użytkowników, którzy wcześniej musieli używać myszki obróconej o 180 stopni (z kablem skierowanym w stronę użytkownika) i są bardzo zadowoleni z tego sterownika. Co ciekawe, wszyscy oprócz jednego to kobiety :)

Instalacja w Windows 7 jest nieco skomplikowana, proszę o kontakt w celu uzyskania szczegółów…

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

Istnieje ciekawy skrypt invert mouse 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

Pobrałem go stąd https://autohotkey.com/board/topic/17828-invert-mouse-axis/

W Twoim przypadku sprawdziłbym nawet możliwość wykonania jakiejś szybkiej modyfikacji HW, aby odwrócić oś wewnątrz myszy….

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

Ja również mam odwróconą orientację myszy i robiłem to na XP z Intellipoint 4 i myszą PS2.

Od czasu zakupu Win 7 PC, Intellipoint 4 nie działa na nim, więc używam teraz Setpoint 4.8 z myszą Logitech USB. Na stronie uberoptions jest podana lista obsługiwanych urządzeń. Wygląda na to, że od około 2009 roku nie rozwijano nowych myszy, więc musisz znaleźć starszą mysz. Mysz M500 jest wciąż dostępna za darmo.