C # программа изменения чувствительности мыши - PullRequest
0 голосов
/ 17 сентября 2018

Моя цель - создать небольшое программное обеспечение для динамического изменения скорости мыши.Я хочу создать .dll из этого файла и вставить его в свой проект Unity, чтобы дать игроку возможность выбрать чувствительность мыши.

В своем исследовании я нашел эту тему с кодомниже:

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: 'Индекс выходит за пределымассив. '

Я пытался использовать точку останова, но это не работает, и я не понимаю, что происходит в моем аргументе [0].

I'Я новичок в pur C #, и я хотел бы знать, нужно ли мне создавать окна или обрабатывать ввод, чтобы моя программа работала.

Спасибо :))

1 Ответ

0 голосов
/ 17 сентября 2018

Похоже, что вы добавили этот код в консольное приложение. Параметр 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), но я считаю, что это выходит за рамки этого вопроса.

...