Как стать автором
Обновить

Повышенная точность установки указателя мыши в играх

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров3.4K

Статья про настройку "Повышенная точность установки указателя" в панели управления Windows, почему она мешает в играх, но может быть удобной для работы с окнами и приложениями, и как программно автоматизировать её переключение с помощью короткого кода на C#.

Для динамичных игр особенно важна точность управления мышью, вернее равномерность и предсказуемость передвижения прицела, чтобы наведение на цель могло быть отработано рефлекторно. Для этого некоторые пользователи отключают настройку "Повышенная точность установки указателя" (Enhance Pointer Precision в англоязычной версии системы), доступную в панели управления Windows.

При этом, отключение настройки приводит к тому, что снижается удобство работы с окнами и приложениями. Либо указатель движется очень быстро и становится труднее попадать в мелкие кнопки, либо, при снижении настройки скорости, увеличивается ход руки и начинает не хватать пространства коврика.

Эту настройку иногда называют ускорением мыши, но, технически, это не ускорение, а нелинейное преобразование смещения сенсора мыши относительно коврика в смещение указателя в экранном пространстве, при этом коэффициент преобразования зависит от скорости. Таким образом, отключение настройки делает преобразование смещения линейным.

Постоянно отключать эту настройку, например для игр, и затем включать обратно - неудобно. И довольно странно, что такой опции не существует в свойствах ярлыка, например на вкладке "совместимость".

Существуют утилиты для автоматизации данного действия, но они более громоздкие, чем мне хотелось, поэтому набросал свой минималистичный и простой вариант решения на C#:

создаем файл EnhancePointerPrecisionSwitch.cs

using System;
using System.Runtime.InteropServices;

namespace EnhancePointerPrecisionSwitch
{
    internal static class Program
    {
        enum SPIF { NONE = 0x00, SPIF_UPDATEINIFILE = 0x01, SPIF_SENDCHANGE = 0x02 }
        const UInt32 SPI_GETMOUSE = 0x0003, SPI_SETMOUSE = 0x0004;

        [DllImport("user32.dll", EntryPoint = "SystemParametersInfo", SetLastError = true)]
        static extern bool SystemParametersInfo(uint action, uint param, IntPtr vparam, SPIF fWinIni);

        [STAThread]
        static void Main(string[] args)
        {
            int[] mouseParams = new int[3];
            GCHandle gch = GCHandle.Alloc(mouseParams, GCHandleType.Pinned);
            SystemParametersInfo(SPI_GETMOUSE, 0, gch.AddrOfPinnedObject(), SPIF.NONE);
            if (Array.IndexOf(args, "on") >= 0) mouseParams[2] = 1;
            if (Array.IndexOf(args, "off") >= 0) mouseParams[2] = 0;
            if (Array.IndexOf(args, "toggle") >= 0) mouseParams[2] = mouseParams[2] == 0 ? 1 : 0;
            SystemParametersInfo(SPI_SETMOUSE, 0, gch.AddrOfPinnedObject(), (Array.IndexOf(args, "permanent") >= 0) ? SPIF.SPIF_UPDATEINIFILE : SPIF.SPIF_SENDCHANGE);
            gch.Free();
        }
    }
}

этот код можно собрать с помощью csc из предустановленного в системе .NET Framework 4.x через командную строку

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /target:winexe EnhancePointerPrecisionSwitch.cs

получаем exe файл размером около 5 KB, принимающий аргументы командной строки:
on - включает точность установки указателя
off - выключает
toggle - переключает
permanent - значение остается после перезагрузки (применяется с одним из вышеперечисленных аргументов, функциональность этого параметра может зависеть от версии и настроек ОС)

Пример использования:

создаём bat файл с примерно таким содержимым:

C:\Programs\EnhancePointerPrecisionSwitch\EnhancePointerPrecisionSwitch.exe off
START /WAIT C:\games\Quake3\quake3.exe +connect server:port
C:\Programs\EnhancePointerPrecisionSwitch\EnhancePointerPrecisionSwitch.exe on

И запускаем игру уже через него.

Файлы EnhancePointerPrecisionSwitch.cs и compile.bat можно также взять здесь.

Теги:
Хабы:
Всего голосов 5: ↑5 и ↓0+7
Комментарии3

Публикации

Истории

Работа

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань