如何在系统范围内反转鼠标移动(X和Y轴)?(赢得7 x64)


27

简洁版本

我正在寻找一种方法来反转X和Y鼠标轴的移动。该计算机正在运行Windows 7,x64和Logitech SetPoint 6.32。我想要一个系统级别的永久修复程序;例如鼠标驱动程序修改或注册表调整。有谁知道实现此目标的可靠方法,或者如何找到注册表值来更改此目标?我将为如何在SetPoint 6.32中为鼠标以及轨迹球启用方向功能而感到非常高兴。

较长的版本 人们似乎永远都不明白为什么要这样做,而且我通常听到“只用鼠标正面朝上!” 建议。阅读障碍不能通过“正确阅读”来治愈。在感谢您尝试提供帮助的同时,我希望有一些背景可以帮助人们理解。

我有一个患有异常阅读障碍的用户,其鼠标移动向后。如果她想向左移动光标,则将鼠标向右移动。如果她希望光标向上移动,则将鼠标向下移动。她过去将鼠标上下颠倒地握住,这使复杂的点击变得困难,对人体工程学而言是可怕的,并且使多按钮鼠标完全无用。

在过去,鼠标驱动程序包含一种方向功能(通常是您向上拖动以设置鼠标移动方向的热气球),该功能可用于设置鼠标移动和光标移动之间的关系。几年前,“改进了”鼠标驱动程序,此功能此后仅限于轨迹球。

失去方向性功能后,她又倒转了一下鼠标,直到找到UberOptions,这是Logitech SetPoint的一项改进,它将为所有指针设备启用所有功能。这包括定向功能。有很多的欣喜。

现在,她的鼠标已经死了,并且当前的Logitech鼠标需要尚未更新UberOptions的SetPoint的较新版本。我们还看到了MAF-Mouse(开发人员表示64位Windows版本尚不支持USB鼠标)和Sakasa(运行时,网络上的评论表明它趋向于随机且经常中断。这也仅仅是正在运行的程序,因此不在系统范围内。)

我已经看到了一些非常复杂的注册表黑客。例如,当我发明F-Lock键并将默认情况下将键盘拧紧时,我曾经使用过一种会更改F1-F12键创建的代码的技巧。我希望有一种方法可以在注册表中翻转X和Y。或其他类似的系统级调整。

另一种解决方案是重新启用鼠标以及轨迹球的定向功能。输入设备驱动程序包含我们迫切需要的功能,这一点令人非常沮丧,但是它已被禁用,以使驱动程序更加防白痴。


我的搭配问题,关于电子的硬件头脑的解决方案:electronics.stackexchange.com/questions/29014/...
JYelton

1
仅供参考,我正在运行最新版本的SetPoint(尽管使用的是非常老的鼠标,该鼠标最初随UberOptions默认支持的SetPoint版本一起提供),并且UberOptions仍然有效。您只需手动将SetPoint文件夹更改为SetPoint 6(setpointP)中使用的文件夹。看这里。我个人希望Logitech会已经雇用UberOptions开发人员。SetPoint非常残酷,如果没有uberOptions,它们的键盘/鼠标几乎无法使用。
冒犯君主

1
@Lèsemajesté我完全同意希望Logitech雇用UberOptions开发人员。正如您所描述的,她确实可以使用旧鼠标,但是UberOptions不支持替换鼠标。显然,游戏鼠标具有完全不同的SetPoint,而且由于能够将鼠标移到上方并可以触摸到它们,因此她对所有额外的按钮都非常重视。
Scivitri

Answers:


18

在网上找不到任何东西,我认为制作起来并不难,所以我继续自己建造了一个。需要Microsoft .NET Framework 4.0才能运行。

多项式的鼠标逆变器(免费软件,根据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将其从可执行文件中删除了,因为我没有原始代码。如果需要完整的应用程序代码,则可以使用JD提取整个VS项目。


1
谢谢!这比我预期的要多得多!我们将对其进行测试,并查看它如何为她工作。
Scivitri 2012年

没问题。创建起来确实没有那么困难。在清理了一点并添加了一些额外的功能之后,我将其作为开源发布。
多项式

您是否有可能在不久的将来发布代码?或者,您可以邮寄给我吗?:)
德克(Dirk)

只是通过我的旧硬盘挖,但似乎这个代码丢失:(如果我有时间,我会反向工程从可执行回来。
多项式

1
@remyabel添加了核心代码。如果需要,可以使用JustDecompile提取其余部分。
多项式2015年

10

有一个名为SakasaMouse的程序可以反转鼠标的移动:

SakasaMouse是一个免费软件,可以在x轴和/或y轴上反转鼠标光标的移动方向。

如果向右移动鼠标,鼠标指针将向左移动。

它适用于每只鼠标,包括刚购买的新无线鼠标。唯一的问题是它很可能在没有警告的情况下切换回去,这可能会让人感到不安。


重新登录到锁定的计算机后,鼠标光标不可见。导航到任务栏以关闭应用程序有些棘手。Windows 8.1
user3071284 2015年

5

我是MAFMouse的作者,确实x64版本还不能与USB鼠标一起使用(32位版本可以!)。我目前正忙于此。

因此,我的建议是使用PS2鼠标-即使在游戏中,这种鼠标也可以很好地在整个系统上正常工作。

我有很多用户以前必须使用过旋转180度的鼠标(电缆指向用户),他们对此驱动程序感到非常满意。有趣的是,除了一个人以外,其他所有人都是妇女:)

Windows 7中的安装有点复杂,请与我联系以获取详细信息...


如果不是很麻烦,那么如果您可以发布说明或指向他们的链接以在Windows 7上安装它,则对其他用户而言,此答案将更为有用。
Lèsemajesté2012年

1
由于我不提供该Beta版本供公众下载,因此仅安装说明就无济于事:)太复杂了,因此创建这些说明将有些工作,我首先要完成驱动程序。如果您想帮助说明,欢迎您!
莫里茨

1
@Moritz感谢您来到SE,并加入讨论!不幸的是,我认为她的主板甚至都没有PS2端口。他们有点过时了。她还与更纽扣的鼠标紧密相连,这些鼠标通常仅是USB。
Scivitri 2012年

他们如何单击该位置的按钮?
phuclv 2014年

重要更新:我是MAFMouse的作者,现在对32位的限制已经消失了。支持x64并且驱动程序现在已签名,因此安装更加容易。它可应要求提供(目前尚无下载),并且在整个系统(甚至用于游戏)(即常见的Y轴反转)上都可以很好地工作。-Moritz
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 PC,因此Intellipoint 4不能在其上运行,因此我现在将Setpoint 4.8与Logitech USB鼠标一起使用。在uberoptions网页上,它提供了支持的设备列表。自2009年以来,似乎没有任何新老鼠的开发,因此您必须找到一只旧老鼠。M500鼠标仍可免费获得。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.