Як я можу повернути рух системи миші (вісь X & Y) у всій системі? (Win 7 x64)


26

Коротка версія

Я шукаю спосіб повернути рухи осі миші X і Y. На комп'ютері працює ОС Windows 7, x64 та Logitech SetPoint 6.32. Мені б хотілося постійного виправлення на системному рівні; наприклад, модифікація драйвера миші або налаштування реєстру. Хтось знає про надійний спосіб реалізації цього, або як знайти значення реєстру, щоб змінити це? Я з задоволенням вирішуся, як увімкнути функцію орієнтації в SetPoint 6.32 як для мишей, так і трекболів.

Довга версія людей, здається, ніколи не розуміє, чому я цього хочу, і я часто чую "просто використовуйте мишу правою стороною вгору!" порада. Дислексія - це не те, що можна вилікувати, "просто читаючи речі". Хоча я високо ціную спроби допомогти, я сподіваюся, що деякий досвід може допомогти людям зрозуміти.

У мене є користувач із незвичайною формою дислексії, для якої рухи миші назад. Якщо вона хоче перемістити курсор вліво, вона перемістить мишу вправо. Якщо вона хоче, щоб курсор перемістився вгору, вона перемістить мишу вниз. Вона звичайно тримала мишу догори дном, що ускладнює витончене клацання, жахливо для ергономіки та робить мишей з кількома кнопками абсолютно марними.

У старі часи драйвери миші включали функцію орієнтації (як правило, повітряна куля, яку ви перетягували вгору, щоб встановити орієнтацію руху миші), яка могла бути використана для встановлення зв'язку між рухом миші та рухом курсору. Кілька років тому драйвери миші були «вдосконалені», і ця функція з тих пір обмежена трекболами.

Втративши функцію орієнтації, вона трохи повернулася до перевернутого мусу , поки не знайшла UberOptions , налаштування для Logitech SetPoint , яка дозволить отримати всі функції для всіх вказівних пристроїв. Сюди входила функція орієнтації. І було дуже радісно.

Тепер її миша померла, а поточним мишам Logitech потрібна нова версія SetPoint, для якої UberOptions не оновлювалася. Ми також бачили MAF-Mouse (розробник вказав, що версія для 64-розрядних Windows ще не підтримує USB-миші) та Sakasa (хоча він працює, коментарі в Інтернеті вказують на те, що він має тенденцію ламатись випадковим чином і часто. Це також просто запущена програма, тому не загальносистемна.).

Я бачив кілька дуже складних злому реєстру. Наприклад, я використовував хак, який міняв би коди, створені клавішами F1-F12, коли була винайдена клавіша F-Lock і дефолт був закручений моєю клавіатурою. Я сподіваюся, що в реєстрі є спосіб перевернути X і Y; чи якийсь інший, подібний, на системному рівні налаштування.

Іншим рішенням може стати повторне включення функції орієнтації для мишей, а також трекболів. Дуже неприємно, що драйвери пристроїв введення включають функціонал, який ми відчайдушно потребуємо для проблеми з доступністю, але це було відключено в ім'я, щоб зробити драйвери більш ідіотичними.


Моє запитання щодо електроніки для вирішення апаратного рішення: electronics.stackexchange.com/questions/29014/…
JYelton

1
FYI, я запускаю останню версію SetPoint (хоч і використовує дуже стару мишу, яка спочатку постачалася з версією SetPoint, що UberOptions підтримується за замовчуванням), і UberOptions все ще працює. Вам просто потрібно вручну змінити папку SetPoint на ту, що використовується в SetPoint 6 ( setpointP). Дивіться тут . Особисто я б хотів, щоб Logitech просто найняв розробників UberOptions. SetPoint жорстокий і робить їх клавіатури / миші майже непридатними без uberOptions.
Lèse majesté

1
@ Lèsemajesté Я повністю погоджуюся з тим, що бажаю, щоб Logitech найняв розробники UberOptions. Поки у неї стара миша працює, як ви описуєте, UberOptions не підтримує мишу, що заміняється. Мабуть, існує цілком інший SetPoint для ігрових мишей, і вона дуже прив’язана до всіх зайвих кнопок, оскільки зможе перевернути мишу та дістатись до них.
Scivitri

Відповіді:


18

Не вдалося знайти нічого в Інтернеті, і я вважав, що це не повинно бути надто важким, тому я пішов вперед і створив його сам. Для запуску потрібен Microsoft .NET Framework 4.0 .

Миша інвертор Polynomial (безкоштовно, згідно ліцензії CC-BY-NC-SA) - ( Alt Link )

Дайте мені знати, як це у вас виходить :)


Вибачте, це зайняло так багато часу, але ось код, який насправді робить інверсію:

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

Я просто витягнув це з виконуваного файлу разом з Telerik JustDecompile, тому що в мене немає оригінального коду. Ви можете витягти весь проект VS за допомогою JD, якщо вам потрібен повний код програми.


1
Дякую! Це було набагато більше зусиль, ніж я очікував! Ми перевіримо це і подивимося, як це працює на неї.
Scivitri

Нема проблем. Це створити насправді було не так складно. Після того, як я очищую її трохи і додаю кілька додаткових функцій, я вийду як відкритий код.
Поліном

Чи є шанс, що ви незабаром випустите код? Або, ви можете надіслати це мені? :)
Дірк

Щойно перекопав мій старий жорсткий диск, але, схоже, цей код був втрачений :( Якщо я знайду час, я поверну його назад із виконуваного файлу.
Поліном

1
@remyabel Основний код додано. Відпочинок можна витягнути за допомогою JustDecompile, якщо вам це потрібно.
Поліном

10

Існує програма під назвою SakasaMouse, яка обертає рухи миші:

SakasaMouse - безкоштовна програма для зворотного напрямку руху курсору миші по осі x та / або y.

Якщо ви перемістите мишу вправо, вказівник миші переміститься вліво.

Він працює для кожної миші, включаючи нову щойно придбану бездротову. Єдина проблема з цим полягає в тому, що він може переключитися назад без попередження, що може трохи занепокоїти.


Після входу в заблокований комп'ютер, курсор миші був невидимим. Трохи складно переходити до лотка завдань, щоб закрити додаток. Windows 8.1
користувач3071284

5

Я автор MAFMouse, і це правда, що версія x64 ще не працює з USB-мишами (це 32-бітова версія!). Зараз я надто зайнятий, щоб над цим працювати.

Тому я пропоную використовувати мишу PS2 - це працює дуже добре і загальносистемно, навіть для ігор.

У мене є багато користувачів, яким доводилося використовувати мишу, повернуту на 180 градусів раніше (кабель вказує на користувача), і вони дуже задоволені цим драйвером. Цікаво, що всі, крім однієї, жінки :)

Встановлення в Windows 7 трохи складніше, будь ласка, зв'яжіться зі мною для деталей ...


Якщо це не надто багато проблем, це зробить цю відповідь кориснішою для інших користувачів, якщо ви можете опублікувати інструкції або посилання на них для її встановлення в Windows 7.
Lèse majesté

1
Оскільки я не пропоную цю бета-версію для публічного завантаження, однаково інструкції з установки не допоможуть :) Складно, тому створення цих інструкцій буде певною роботою, і я спершу хочу закінчити драйвер. Якщо ви хочете допомогти з інструкціями, ласкаво просимо!
Моріц

1
@Moritz Дякую, що завітали до SE та приєдналися до дискусії! На жаль, більше не думаю, що її материнська плата навіть не має порту PS2. Вони ніби застарілі. Вона також дещо прив’язана до більш мишачих мишей, які, як правило, мають лише USB.
Scivitri

як вони можуть натискати кнопки в такому положенні?
phuclv

Важливе оновлення: я є автором MAFMouse, і зараз обмеження на 32 біти вже немає. x64 підтримується і драйвер підписаний зараз, тому встановлення набагато простіше. Він доступний за запитом (наразі не завантажується) і працює дуже добре та загальносистемно, навіть для ігор (тобто загальної інверсії осі Y). -Моріц
maf-soft

3

Є цікавий сценарій 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

Я отримав це звідси: https://autohotkey.com/board/topic/17828-invert-mouse-axis/

У вашому випадку я навіть перевірив би можливість швидкої модифікації HW, щоб перевернути вісь миші.


0

У мене теж змінилася орієнтація на мишу, і я раніше це робив у XP із Intellipoint 4 та PS2 мишкою.

З моменту придбання ПК Win 7, Intellipoint 4 не буде працювати на ньому, і тепер я використовую Setpoint 4.8 за допомогою миші Logitech USB. На веб-сторінці uberoptions він містить список підтримуваних пристроїв. Здається, що з 2009 року для нових мишей не було зроблено жодних розробок, тому вам доведеться знайти старішу мишу. Миша M500 все ще є у вільному доступі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.