C#程序更改鼠标灵敏度

时间:2018-09-17 10:19:11

标签: c# windows performance unity3d mouse

我的目标是创建一个小软件,以动态更改鼠标的鼠标速度。我想为其创建一个.dll,然后插入到我的Unity项目中,以让播放器选择鼠标的灵敏度。

在我的研究中,我发现此topic的代码如下:

public const UInt32 SPI_SETMOUSESPEED = 0x0071;

    [DllImport("User32.dll")]
    static extern Boolean SystemParametersInfo(
        UInt32 uiAction,
        UInt32 uiParam,
        UInt32 pvParam,
        UInt32 fWinIni);

    static void Main(string[] args)
    {
        for (int i = 0; i < args.Length; i++)
        {
            System.Console.WriteLine("Arg[{0}] = [{1}]", i, args[i]);
        }

        SystemParametersInfo(
            SPI_SETMOUSESPEED,
            0,
            uint.Parse(args[0]),
            0);
    }

但是,当我尝试在Visual Studio中使用此代码时,出现此错误:

  

System.IndexOutOfRangeException:'索引在数组的边界之外。'

我尝试使用断点,但这不起作用,而且我不明白arg [0]中发生了什么。

我是Pur C#的新手,我想知道是否必须创建窗口或处理输入才能使程序正常工作。

谢谢:)

1 个答案:

答案 0 :(得分:1)

似乎您已将此代码添加到控制台应用程序。传递到get方法中的string args[]参数是从命令行获取的参数数组。

例如,在以下命令行中:Main()C:\> setmousespeed.exe 25将包含单个字符串值args"25"行将字符串转换为整数。

要在Unity应用程序中使用此方法,应将代码转换为可公开访问的方法。下面是一个示例。

uint.Parse(args[0])

一旦导入到Unity中,则可以按如下方式调用上述代码:

public static class Utility
{
    public const UInt32 SPI_SETMOUSESPEED = 0x0071;

    [DllImport("User32.dll")]
    static extern Boolean SystemParametersInfo(
        UInt32 uiAction,
        UInt32 uiParam,
        UInt32 pvParam,
        UInt32 fWinIni);

    public static void SetMouseSpeed(unit speed)
    {
        for (int i = 0; i < args.Length; i++)
        {
            System.Console.WriteLine("Arg[{0}] = [{1}]", i, args[i]);
        }

        SystemParametersInfo(
            SPI_SETMOUSESPEED,
            0,
            speed,
            0);
    }
}

要导入到Unity中,您还应该将此代码添加到Library(DLL)项目中,但是我认为这不在此问题的范围之内。