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

27

Krótka wersja

Szukam sposobu na odwrócenie ruchów osi myszy X i Y. Na komputerze działa system Windows 7, x64 i Logitech SetPoint 6.32. Chciałbym stałej poprawki na poziomie systemu; takich jak modyfikacja sterownika myszy lub modyfikacja rejestru. Czy ktoś wie o solidnym sposobie wdrożenia tego lub jak znaleźć wartości rejestru, aby to zmienić? Zadowolę się, jak włączyć funkcję orientacji w SetPoint 6.32 dla myszy, a także dla trackballów.

Długa wersja Wydaje się, że ludzie nigdy nie rozumieją, dlaczego miałbym tego chcieć, i często słyszę „po prostu użyj myszy prawą stroną do góry!” Rada. Dysleksja nie jest czymś, co można wyleczyć „po prostu czytając wszystko dobrze”. Doceniam próby pomocy, ale mam nadzieję, że pewne doświadczenia mogą pomóc ludziom zrozumieć.

Mam użytkownika z nietypową postacią dysleksji, u którego ruchy myszy są cofnięte. Jeśli chce przesunąć kursor w lewo, przesunie mysz w prawo. Jeśli chce przesunąć kursor w górę, przesunie mysz w dół. Kiedyś trzymała mysz do góry nogami, co utrudnia wyrafinowane klikanie, szkodzi ergonomii i sprawia, że ​​myszy z wieloma przyciskami są całkowicie bezużyteczne.

W dawnych czasach sterowniki myszy zawierały funkcję orientacji (zwykle balon na gorące powietrze, którą przeciągnąłeś w górę, aby ustawić orientację ruchu myszy), której można użyć do ustalenia zależności między ruchem myszy a ruchem kursora. Kilka lat temu sterowniki myszy zostały „ulepszone” i odtąd ta funkcja została ograniczona do trackballów.

Po utracie funkcji orientacji wróciła na chwilę do odwróconej myszy, dopóki nie znalazła UberOptions , poprawki dla Logitech SetPoint , która włączy wszystkie funkcje dla wszystkich urządzeń wskazujących. Obejmowało to funkcję orientacji. I było wiele radości.

Teraz jej mysz zginęła, a obecne myszy Logitech wymagają nowszej wersji SetPoint, dla której UberOptions nie zostało zaktualizowane. Widzieliśmy także MAF-Mouse (deweloper wskazał, że wersja dla 64-bitowego systemu Windows nie obsługuje jeszcze myszy USB) i Sakasa (podczas działania, komentarze w internecie wskazują, że ma tendencję do losowego i częstego łamania. Jest to również po prostu działający program, więc nie w całym systemie).

Widziałem bardzo wyrafinowane hacki rejestru. Na przykład używałem hacka, który zmieniałby kody utworzone przez klawisze F1-F12, kiedy klawisz F-Lock został wynaleziony i domyślnie zepsułem klawiaturę. Mam nadzieję, że istnieje sposób na przerzucenie X i Y w rejestrze; lub jakieś inne, podobne ulepszenie na poziomie systemu.

Innym rozwiązaniem może być ponowne włączenie funkcji orientacji myszy, a także trackballów. Bardzo frustrujące jest to, że sterowniki urządzeń wejściowych zawierają funkcjonalność, której rozpaczliwie potrzebujemy, aby uzyskać dostęp, ale została wyłączona w celu uczynienia sterowników bardziej odpornymi na idioty.

Scivitri
źródło
Moje pytanie dotyczące elektroniki dotyczące rozwiązania sprzętowego: electronics.stackexchange.com/questions/29014/…
JYelton
1
Do Twojej wiadomości używam najnowszej wersji SetPoint (choć używam bardzo starej myszy, która pierwotnie była dostarczana z wersją SetPoint obsługiwaną domyślnie przez UberOptions), a UberOptions nadal działa. Musisz tylko ręcznie zmienić folder SetPoint na folder używany w SetPoint 6 ( setpointP). Zobacz tutaj . Osobiście chciałbym, aby Logitech zatrudnił już programistów UberOptions. SetPoint jest okropny i sprawia, że ​​ich klawiatury / myszy są prawie bezużyteczne bez uberOptions.
Lèse majesté
1
@ Lèsemajesté Całkowicie zgadzam się, że Logitech zatrudni programistów UberOptions. Chociaż jej stara mysz działała zgodnie z opisem, mysz zastępcza nie jest obsługiwana przez UberOptions. Najwyraźniej istnieje zupełnie inny SetPoint dla myszy do gier, a ona jest bardzo przywiązana do wszystkich dodatkowych przycisków, ponieważ jest w stanie obrócić mysz i dosięgnąć ich.
Scivitri

Odpowiedzi:

18

Nie mogłem znaleźć niczego w Internecie i pomyślałem, że nie powinno to być zbyt trudne, więc sam zacząłem je budować. Wymaga Microsoft .NET Framework 4.0 do uruchomienia.

Polynomial's Mouse Inverter (darmowy, na licencji CC-BY-NC-SA) - ( Alt Link )

Daj mi znać, jak Ci się to udaje :)


Przepraszam, że trwało to 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.

Wielomian
źródło
1
Dziękuję Ci! To był znacznie większy wysiłek, niż się spodziewałem! Przetestujemy to i zobaczymy, jak to dla niej działa.
Scivitri,
Nie ma problemu. Naprawdę nie było tak trudno stworzyć. Po tym, jak trochę posprzątam i dodam kilka dodatkowych funkcji, wydam go jako open source.
Wielomian
Czy jest jakaś szansa, że ​​wkrótce opublikujesz kod? Czy możesz mi to wysłać pocztą? :)
Dirk
Właśnie przekopałem mój stary dysk twardy, ale wygląda na to, że ten kod został zgubiony :( Jeśli będę miał czas, zmienię jego kod z powrotem z pliku wykonywalnego.
Polynomial
1
Dodano kod @remyabel Core. Resztę można wyciągnąć za pomocą JustDecompile, jeśli jest to potrzebne.
Wielomian
10

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

SakasaMouse to darmowy program do odwracania kierunku ruchu kursora myszy w osi X i / lub Y.

Po przesunięciu myszy w prawo wskaźnik myszy przesuwa się w lewo.

Działa z każdą myszą, w tym nową, właśnie kupioną. Jedynym problemem jest to, że może się cofnąć bez ostrzeżenia, co może być nieco niepokojące.

Fred Davis
źródło
Po ponownym zalogowaniu się do zablokowanego komputera kursor myszy był niewidoczny. Nawigowanie do paska zadań w celu zamknięcia aplikacji było trochę trudne. Windows 8.1
użytkownik3071284
5

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 popracować.

Sugeruję więc użycie myszy PS2 - działa to bardzo dobrze i obejmuje cały system, nawet w przypadku gier.

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

Instalacja w systemie Windows 7 jest nieco skomplikowana, proszę o kontakt w celu uzyskania szczegółowych informacji ...

Moritz
źródło
Jeśli nie będzie to zbyt wielkim problemem, uczyni tę odpowiedź bardziej przydatną dla innych użytkowników, jeśli możesz opublikować instrukcje lub link do nich, aby zainstalować ją w systemie Windows 7.
Lèse majesté
1
Ponieważ nie oferuję tej wersji beta do publicznego pobrania, same instrukcje instalacji nie pomogą :) Jest to skomplikowane, więc utworzenie tych instrukcji będzie trochę pracy i najpierw chcę zakończyć sterownik. Jeśli chcesz pomóc w instrukcji, nie ma za co!
Moritz
1
@Moritz Dziękujemy za przybycie do SE i dołączenie do dyskusji! Niestety nie sądzę, aby jej płyta główna miała już port PS2. Są trochę przestarzałe. Jest także nieco przywiązana do bardziej przyciskających myszy, które zwykle są tylko USB.
Scivitri,
jak mogą klikać przyciski z tą pozycją?
phuclv
Ważna aktualizacja: jestem autorem MAFMouse i nie ma już ograniczenia do 32 bitów. x64 jest obsługiwany, a sterownik jest teraz podpisany, więc instalacja jest znacznie łatwiejsza. Jest dostępny na żądanie (obecnie brak pobierania) i działa bardzo dobrze i ogólnosystemowo, nawet w grach (tj. Wspólna inwersja osi Y). -Moritz
maf-soft
3

Istnieje ciekawy skrypt AHK z odwróconą myszą:

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

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

W twoim przypadku sprawdziłbym nawet możliwość szybkiej modyfikacji HW w celu odwrócenia osi wewnątrz myszy.

namiot
źródło
0

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

Od czasu zakupu komputera z systemem Windows 7 Intellipoint 4 nie będzie na nim działał, więc teraz używam Setpoint 4.8 z myszką Logitech USB. Na stronie internetowej uberoptions znajduje się lista obsługiwanych urządzeń. Wygląda na to, że od około 2009 r. Nie opracowano żadnych nowych myszy, więc musisz znaleźć starszą mysz. Mysz M500 jest nadal dostępna bezpłatnie.

Guy Graham
źródło