#c# #.net-core #console-application
#c# #.net-ядро #консоль-приложение
Вопрос:
Я создаю консольное приложение Dotnet Core 3.1, в котором я хочу получить и установить скорость двойного щелчка системной мыши.
Я добился успеха, чтобы получить скорость с помощью
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern int GetDoubleClickTime();
Но не удалось установить желаемые значения для того же.
Я пробовал следующие варианты, но не добился успеха
- SetDoubleClickTime
- текущие системные значения равны 550, полученные из вышеуказанного метода
- Передача 200 в качестве значения Arg1 для изменения.
- полученный вывод приведенного ниже метода как true, но значение не изменилось
Реализация:
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
static extern bool SetDoubleClickTime(uint Arg1);
- 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. Я знаю способ изменения через реестр. Но я планировал игнорировать прямое изменение реестра. Но теперь я считаю, что мне придется пойти на это. Спасибо!