Значения Mouse.move

Я понимаю, что Mouse.move перемещает мышь из ее текущего положения, например:

Mouse.move(100, 100);

Переместит мышь на 100 пикселей вправо и на 100 пикселей вниз.

Но на самом деле он сдвинется примерно на 150 пикселей вправо и/или на 150 пикселей вниз.

Я уже тестировал без точности/ускорения курсора, и это ничего не меняет.

Какие единицы измерения использует функция?

Я знаю о лимите 127–127 и уважаю его, но все же... когда я прошу переместить 100 100, он не перемещается на 100 100.

, 👍2


1 ответ


Лучший ответ:

2

Координаты мыши не являются пикселями. Они представляют собой пропорцию физического минимума/максимума параметров дескриптора отчета. Поскольку они не указаны в дескрипторе отчета, они считаются такими же, как логические: от -127 до 127.

Таким образом, перемещение на 100 "единиц" равно перемещению 100/(127-(-127)) от 100%, что составляет около 40%.

Но 40% чего?

Ну, 40% дюйма. Или то, что ваша ОС считает дюймом на вашем текущем экране.

В спецификации HID:

Хотя логический минимум и логический максимум (экстенты) связывают значения возвращаемое устройством, физический минимум и физический максимум дают значение этих границ, позволяя смещать и масштабировать значение отчета. Например, термометр может иметь логические размеры от 0 до 999, но физические размеры 32 и 212 градусов. Разрешение можно определить по следующему алгоритму:

if ((Physical Maximum == UNDEFINED) || (Physical Minimum == UNDEFINED) || ((Physical Maximum == 0) && (Physical Minimum == 0))) {
    Physical Maximum = Logical Maximum;
    Physical Minimum = Logical Minimum;
}

If (Unit Exponent == UNDEFINED)
    Unit Exponent = 0;

Resolution = (Logical Maximum – Logical Minimum) / ((Physical Maximum – Physical Minimum) * (10^Unit Exponent)) 

,

это имеет смысл, спасибо!, @Owow