Я пишу приложение для Windows, которое использует SendInput для перемещения мыши без необходимости использования реальной мыши. Одна из его желаемых функций заключается в том, что он будет создавать одно и то же движение вне зависимости от того, как настроена скорость мыши пользователя (при условии, что у них не отмечена опция «Повышение точности указателя», поэтому мое приложение не должно учитывать «ускорение мыши»). «).
Я делаю это, получая настройку скорости мыши в Windows и деля ее на результат. Таким образом, если пользователь удваивает свои настройки скорости мыши, мое приложение уменьшает его вывод вдвое, и они должны отменить (если настройка скорости мыши фактически представляет множитель для скорости курсора).
Я получаю настройку скорости мыши с помощью SystemParametersInfo (SPI_GETMOUSESPEED ...), которая, согласно документации Microsoft , дает скорость в масштабе от 1 до 20.
int result;
if (SystemParametersInfo(SPI_GETMOUSESPEED, 0, &result, 0)) {
return result;
}
Проблема в том, что это значение не линейно пропорционально фактической скорости мыши с заданным вводом. Если бы это было линейно пропорционально, если данное движение мыши перемещало экранный курсор на расстояние X, удвоение установки скорости мыши и выполнение того же движения мыши должно привести к тому, что экранный курсор переместится на расстояние 2X. При вдвое уменьшении значения на экране должно появиться движение в 0,5 раза.
Но это так не работает.
Даже после того, как мое приложение делит скорость мыши на настройку скорости мыши в Windows, очень низкие настройки скорости мыши дают более медленный, чем ожидалось, вывод.
Существует ли какая-либо документация, показывающая, как сопоставить скорость мыши Windows с фактической скоростью (независимо от единиц измерения), подходящей для отмены этой настройки? Или есть лучший способ для меня учесть настройку скорости мыши пользователя или полностью игнорировать настройки мыши?
Спасибо!