Как установить скорость двойного щелчка системной мыши

#c# #.net-core #console-application

#c# #.net-ядро #консоль-приложение

Вопрос:

Я создаю консольное приложение Dotnet Core 3.1, в котором я хочу получить и установить скорость двойного щелчка системной мыши.

введите описание изображения здесь

Я добился успеха, чтобы получить скорость с помощью

  [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        public static extern int GetDoubleClickTime();
  

Но не удалось установить желаемые значения для того же.

Я пробовал следующие варианты, но не добился успеха

  1. SetDoubleClickTime
  • текущие системные значения равны 550, полученные из вышеуказанного метода
  • Передача 200 в качестве значения Arg1 для изменения.
  • полученный вывод приведенного ниже метода как true, но значение не изменилось

Реализация:

 [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
     static extern bool SetDoubleClickTime(uint Arg1);
  
  1. SystemParametersInfo
  • Я также пробовал с SystemParametersInfo
  • полученный вывод приведенного ниже метода как true, но значение не изменилось

Реализация:

 [DllImport("User32.dll")]
        static extern bool SystemParametersInfo(int uiAction, int uiParam, IntPtr ipParam, int fWinIni);

 var result= SystemParametersInfo(20, 200, IntPtr.Zero, 2);
  

Комментарии:

1. Просто примечание; есть некоторые ограничения на часы ОС, поэтому некоторые небольшие значения могут не работать

2. Я пробовал использовать несколько значений в диапазоне от 500 до 5000, но не получил отражения ни для одного из них

Ответ №1:

Это сработало для меня даже при значениях всего 100 мс. Вы пытались GetDoubleClickTime() после его установки проверить, действительно ли было установлено ваше значение?

 using System;
using System.Runtime.InteropServices;

class Program
{
    [DllImport("user32.dll")]
    public static extern int GetDoubleClickTime();
    [DllImport("user32.dll")]
    public static extern bool SetDoubleClickTime(uint Arg1);

    public static void Main()
    {
        var time = GetDoubleClickTime();
        Console.WriteLine(time);
        SetDoubleClickTime(4200);
        time = GetDoubleClickTime();
        Console.WriteLine(time);
    }
}
  

Комментарии:

1. Спасибо за ваш ответ. Но это не работает должным образом. вы получите примененные изменения, вызвав GetDoubleClickTime сразу после SetDoubleClickTime. Но то же значение не будет применено к странице настроек mose, которую я показал на изображении. И когда вы снова запустите свою консоль, вы поймете, что настройка не применена.

2. The user32.dll способ изменения настроек — это быстрый взлом, позволяющий сделать это без выхода из системы и перезагрузки. Фактические значения хранятся в реестре в разделе «HKCU: Панель управления Мышь», поэтому вам необходимо изменить ключ DoubleClickSpeed для сохранения. Именно оттуда страница настроек мыши берет значения.

3. Я знаю способ изменения через реестр. Но я планировал игнорировать прямое изменение реестра. Но теперь я считаю, что мне придется пойти на это. Спасибо!