На windows 7 скрипт не работает в большинстве программ.
Я пользуюсь этим вариантом:
~*$WheelDown::
~*$WheelUp::
stringtrimleft,Wheel,A_ThisHotkey,3
keywait,%a_thishotkey%,L
if Wheell=0
return
mousegetpos,ctrlx,,win,ctrl
winget,id,id,A
if (win!=id)
{
if ctrl=
winactivate,ahk_id %win%
else
{
ControlGet,Style,Style,,%ctrl%,ahk_id %win%
if (Style & 0x00100000)
{
ControlGetPos,Xctrl,,ctrlW,,%ctrl%,ahk_id %win%
winGetPos,wx,,ww,,ahk_id %win%
ctrlxz:=ctrlx-(wx+Xctrl)
checks:=ctrlxz*100/ctrlW
if (checks>70 and checks<100)
{
if Wheel=WheelDown
loop,6
PostMessage,0x114,1,0,%ctrl%,ahk_id %win%
if Wheel=WheelUp
loop,6
PostMessage,0x114,0,0,%ctrl%,ahk_id %win%
}
else
{
if Wheel=WheelDown
PostMessage,0x115,1,0,%ctrl%,ahk_id %win%
if Wheel=WheelUp
PostMessage,0x115,0,0,%ctrl%,ahk_id %win%
}
}
else
{
if Wheel=WheelDown
PostMessage,0x115,1,0,%ctrl%,ahk_id %win%
if Wheel=WheelUp
PostMessage,0x115,0,0,%ctrl%,ahk_id %win%
}
}
}
else
{
ControlGet,Style,Style,,%ctrl%,ahk_id %id%
if (Style & 0x00100000)
{
ControlGetPos,Xctrl,,ctrlW,,%ctrl%,ahk_id %id%
winGetPos,wx,,ww,,ahk_id %id%
ctrlxz:=ctrlx-(wx+Xctrl)
checks:=ctrlxz*100/ctrlW
if (checks>70 and checks<100)
{
if Wheel=WheelDown
{
loop,6
PostMessage,0x114,1,0,%ctrl%,ahk_id %id%
PostMessage,0x115,0,0,%ctrl%,ahk_id %id%
}
if Wheel=WheelUp
{
loop,6
PostMessage,0x114,0,0,%ctrl%,ahk_id %id%
PostMessage,0x115,1,0,%ctrl%,ahk_id %id%
}
}
}
}
return
Возможно его можно оптимизировать...
Также есть возможность горизонтальной прокрутки если положение мыши в пределах 30 % от правого края контрола (не окна).
Есть только две проблемы:
1) Вращение ролика посылается и в активное окно тоже, можно конечно убрать "~*$", но тогда теряется способность нормально работать в других (некоторых) приложениях, которым нужна "чистая" передача вращения.
2) По той же причине при прокрутке горизонтальной полосы окна, окно прокручивается вверх и влево, вниз и вправо. Исправил возвратом окна вниз и вверх соответственно, но явно видны дерганья.
Если возможно исправить не убирая "~*$" буду очень благодарен.
Возможно добавить ускорение прокрутки.