我的目标是创建一个小软件来动态改变鼠标的鼠标速度。我想创建一个.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#的新手,我想知道我是否必须创建一个窗口或处理输入以使我的程序正常工作。
谢谢 :)
您似乎已将此代码添加到控制台应用程序中。传递到string args[]
方法的Main()
参数是从命令行获取的参数数组。
例如,在以下命令行中:C:\> setmousespeed.exe 25
,args
将包含单个字符串值"25"
。行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后,可以按如下方式调用上面的代码:
Utility.SetMouseSpeed(100);
要导入Unity,您还应该将此代码添加到库(DLL)项目中,但我认为这超出了此问题的范围。