26 (изменено: Malcev, 2018-10-02 22:56:27)

Re: AHK: Прокрутка на дробное число строк

stealzy пишет:

if (MOUSEEVENTF_WHEEL < 120 and WheelScrollLines = 3) MOUSEEVENTF_WHEEL := MOUSEEVENTF_WHEEL * k ; k ≈1.8±0.1

А откуда вы взяли эту формулу?
У меня этот код в фаерфоксе постоянно сдвигает ползунок на расстояние равное 8 посыланием wheeldown, при настройках шага в 3 линии.

f1::
loop 5
{
   PostMW(-120)
   PostMW(-72)
}
return


PostMW(delta)
{ ;http://msdn.microsoft.com/en-us/library/windows/desktop/ms645617(v=vs.85).aspx
  CoordMode, Mouse, Screen
  MouseGetPos, x, y
  Modifiers := 0x8*GetKeyState("ctrl") | 0x1*GetKeyState("lbutton") | 0x10*GetKeyState("mbutton")
              |0x2*GetKeyState("rbutton") | 0x4*GetKeyState("shift") | 0x20*GetKeyState("xbutton1")
              |0x40*GetKeyState("xbutton2")
  PostMessage, 0x20A, delta << 16 | Modifiers, y << 16 | x ,, A

27 (изменено: stealzy, 2018-10-03 00:55:05)

Re: AHK: Прокрутка на дробное число строк

Это псевдокод.
Методом тыка, после обнаружения teadrinker'ом в 24 посте.
Моя ошибка, я использовал строгое сравнение, заменить < на <=. Поправил.

   PostMW(-120-72) ; так сдвинет на 4

28 (изменено: Malcev, 2018-10-03 06:48:09)

Re: AHK: Прокрутка на дробное число строк

stealzy пишет:

Методом тыка, после обнаружения teadrinker'ом в 24 посте

Я у себя такое не наблюдаю, а вижу следующий алгоритм:

n := -727
wheel_delta := 120

f1::PostMW(n)
f2::
if (abs(n) <= wheel_delta)
   PostMW(n)
else
{
   count := floor(abs(n)/2/wheel_delta) + 1
   delta := abs(n)/n*wheel_delta
   loop % count
   {
      If (A_Index = count)
         delta := mod(n/2, wheel_delta)
      PostMW(delta)
   }
}


PostMW(delta)
{ ;http://msdn.microsoft.com/en-us/library/windows/desktop/ms645617(v=vs.85).aspx
  CoordMode, Mouse, Screen
  MouseGetPos, x, y
  Modifiers := 0x8*GetKeyState("ctrl") | 0x1*GetKeyState("lbutton") | 0x10*GetKeyState("mbutton")
              |0x2*GetKeyState("rbutton") | 0x4*GetKeyState("shift") | 0x20*GetKeyState("xbutton1")
              |0x40*GetKeyState("xbutton2")
  PostMessage, 0x20A, delta << 16 | Modifiers, y << 16 | x ,, A
}
stealzy пишет:

PostMW(-120-72) ; так сдвинет на 4

Не на 4, а на 2.4.

29

Re: AHK: Прокрутка на дробное число строк

Вы написали код, пытающийся компенсировать их хак; у меня приблизительное описание самого хака со стороны браузера.
Кстати при изменении масштаба страницы работает? А при изменении дефолтных 3 строк прокрутки в винде?

Malcev пишет:
stealzy пишет:

PostMW(-120-72) ; так сдвинет на 4

Не на 4, а на 2.4.

Вполне допускаю что у вас замена двух PostMW(-120) и PostMW(-72) на PostMW(-120-72) и приводит к изменению прокрутки с 8 до 2.4 WheelDown.
У меня же - с 8 до 4 WheelDown.
Дальнейшую дискуссию по теме считаю бессмысленной.

30 (изменено: Malcev, 2018-10-03 15:36:26)

Re: AHK: Прокрутка на дробное число строк

Почему же бесмысленной?
Вы считаете, что фаерфокс умножает на k ≈1.8±0.1, зависит от масштаба в лисе.
А у меня таких выводов нету.
Вот так у меня идет сдвиг на 4.8 линии при любом значении в реестре и масштаба в лисе.

n := 4.8

wheel_delta := 120
RegRead WheelScrollLines, HKCU\Control Panel\Desktop, WheelScrollLines
if !WheelScrollLines
   WheelScrollLines := 3
Line_Height := 120/WheelScrollLines
new_delta := Line_Height*n
f1::
f2::
if (A_ThisHotkey = "f1")
   i := -1
else
   i := 1
if (WheelScrollLines = 3) and (new_delta > wheel_delta)
   i*=2
PostMW(new_delta*i)



PostMW(delta)
{ ;http://msdn.microsoft.com/en-us/library/windows/desktop/ms645617(v=vs.85).aspx
  CoordMode, Mouse, Screen
  MouseGetPos, x, y
  Modifiers := 0x8*GetKeyState("ctrl") | 0x1*GetKeyState("lbutton") | 0x10*GetKeyState("mbutton")
              |0x2*GetKeyState("rbutton") | 0x4*GetKeyState("shift") | 0x20*GetKeyState("xbutton1")
              |0x40*GetKeyState("xbutton2")
  PostMessage, 0x20A, delta << 16 | Modifiers, y << 16 | x ,, A
}