Динамическое изменение скорости мыши

Ребят, у меня есть Winforms приложение C# с панелью внутри формы. Что я хочу сделать, так это всякий раз, когда указатель мыши входит в эту панель, я хочу замедлить скорость движения мыши на 50%. Как только указатель перемещается за пределы этой панели, я хочу, чтобы скорость мыши возобновила нормальную скорость 100%. Как я могу сделать это на С#?


person Icemanind    schedule 28.05.2010    source источник


Ответы (3)


Эта статья может помочь

Вот код из статьи:

using System;
using System.Runtime.InteropServices;

namespace MouseSpeedSwitcher
{
    class Program
    {
        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)
        {
            SystemParametersInfo(
                SPI_SETMOUSESPEED, 
                0, 
                uint.Parse(args[0]), 
                0);
        }
    }
}
person Hannoun Yassir    schedule 28.05.2010
comment
+1 за статью. Для icemanind: просто вызовите функцию, указанную в этой статье, на событиях Enter и Leave, медленнее при входе в элемент управления и быстрее при выходе из элемента управления, и все должно работать. - person Mike Webb; 28.05.2010
comment
Идеально. Спасибо за помощь! - person Icemanind; 28.05.2010

Поскольку было не очень понятно, как использовать код из ответов, я нашел более лаконичное решение для изменения скорости мыши. Добавьте этот код в класс, где вы хотите изменить скорость:

[DllImport("user32.dll", CharSet = CharSet.Auto),]
public static extern int SystemParametersInfo(uint uiAction, uint uiParam, uint pvParam, uint fWinIni);

А затем вызовите SystemParametersInfo с требуемой скоростью мыши:

//SPEED is an integer value between 0 and 20. 10 is the default.
SystemParametersInfo(113,0,SPEED,0);

Не забудьте добавить using System.Runtime.InteropServices; Кредиты.

person Creek Drop    schedule 27.12.2020

person    schedule
comment
Привет, Меградж, у меня такое же требование, но я хочу медленно перемещать курсор мыши по рабочему столу (я хочу изменить скорость). Я использую SetCursorPos Win32 API для установки курсора в нужную точку. Можете ли вы объяснить больше, чтобы достичь этого? - person user1915370; 09.08.2018
comment
public static extern int SystemParametersInfo( int uAction, int uParam, IntPtr lpvParam, int fuWinIni ) Надсистемная функция Извлекает или устанавливает значение одного из общесистемных параметров. Эта функция также может обновлять профиль пользователя при установке параметра. Чтобы получить доступ к этой функции/методу, нам нужно импортировать DllImport(user32.dll) uAction: - Здесь мы передаем константу операции управления, в моем случае я передаю ниже константу SPI_SETMOUSESPEED для установки/изменения скорости курсора мыши SPI_GETMOUSESPEED для получения системной скорости курсора мыши - person user8851697; 16.08.2018
comment
uParam: параметр, использование и формат которого зависят от запрашиваемого или устанавливаемого системного параметра. Дополнительные сведения об общесистемных параметрах см. в описании параметра uiAction. Если не указано иное, для этого параметра необходимо указать ноль. lpvParam-: Параметр, использование и формат которого зависят от запрашиваемого или устанавливаемого системного параметра. Дополнительные сведения об общесистемных параметрах см. в описании параметра uiAction. Если не указано иное, вы должны указать NULL для этого параметра. Сведения о типе данных PVOID см. в разделе Типы данных Windows. - person user8851697; 16.08.2018
comment
GetDefaults () — этот метод я использовал для получения текущей скорости курсора мыши в системе и сохранения в переменной. Если я хочу восстановить старое значение, я могу использовать сохраненную скорость курсора мыши. SetMouseSpeed ​​(int intSpeed) — этот метод я использовал для установки скорости курсора мыши в системе. SetDefaults() — этот метод я использовал для восстановления скорости курсора мыши в системе. - person user8851697; 16.08.2018
comment
@user1915370 user1915370, пожалуйста, прочитайте все детали, которые я прокомментировал выше. Тем не менее у вас есть какие-либо сомнения, пожалуйста, не стесняйтесь спрашивать - person user8851697; 16.08.2018