Gecko обрабатывает особым образом:
if (MOUSEEVENTF_WHEEL <= 120 and WheelScrollLines = 3)
MOUSEEVENTF_WHEEL := MOUSEEVENTF_WHEEL * k ; k ≈1.8±0.1, зависит от масштаба в лисе
F1::Wheel(-3) ; равна прокрутке от {WheelDown} ≈ k*3 ≈ 6
F2::Wheel(-3.05) ; равна прокрутке от нажатия {Down} ≈ 3
F3::Wheel(-5.95) ; равна прокрутке от {WheelDown} ≈ 6
F4::Send {WheelDown}
Wheel(lines) {
RegRead WheelScrollLines, HKCU\Control Panel\Desktop, WheelScrollLines
LINE_HEIGHT := 120/WheelScrollLines ; LINE_HEIGHT := 40 for Edit
WHEEL_DELTA := lines*LINE_HEIGHT
DllCall("mouse_event", uint, MOUSEEVENTF_WHEEL:=0x800, int, dx:=0 ,int, dy:=0, uint, WHEEL_DELTA, int, 0)
}
В Sublime F1 будет прокручивать на 3 строки при любых значениях WheelScrollLines.
В лисе формула будет как в коде выше, но не совсем точно.
В контролах Edit значение WheelScrollLines также обозначает минимальный квант прокрутки (по умолчанию 3), но там LINE_HEIGHT := 40 не зависит от значения записи в реестре.