Тема: AutoHotkey: автопрокрутка окна
Удобно, когда при резком "рывке" колеса мыши вверх или вниз включается автопрокрутка окна. Скрипт:
;Any mouse = Logitech Revolution
;(C)2007 by Steve Key
;Непрерывная прокрутка при быстром движении колесом мыши
;Стоп - щелчок колеса в противоположную сторону
;Что-то похожее применяется в новых мышах Logitech Revolution,
;только там используется массивное колесо и куча софта...
;Я нагло содрал пример, в помощи к программе AHK, статья Set Timer,
;называемый "Пример №3", и доработал его под свои задачи.
;Даже некоторые комментарии из него остались...
;Не знаю, нужны ли нижеследующие команды:
Process, Priority, , High
SetKeyDelay, 10, 10
#NoEnv
SendMode Input
#InstallMouseHook
Thread, interrupt, 0
;Обработка прокрутки колеса вниз
$WheelDown::
Send, {WheelDown} ;при вращении посылаем как минимум один щелчек колеса
settimer, su, off ;и останавливаем прокрутку вверх, если она запущена
; Команда SetTimer уже запущена, но прежде, чем она сработает,
; мы успеем собрать данные о количестве щелчков колеса за это время:
If md > 0
{
md += 1
Return
}
; А вот и наш первый щелчок колеса. Устанавливаем счетчик в 1
; и запускаем таймер:
md = 1
SetTimer, tmd, 20 ; Идет подсчет количества щелчков колеса...
; в течение 20 миллисекунд - выставлено опытным путем
Return
;Таймер времени, в течение которого считаются щелчки колеса вниз
tmd:
SetTimer, tmd, Off ; отключение таймера
If md > 2 ; Если колесо успело щелкнуть более двух раз (быстро крутанули)...
;то запускается таймер повтора прокрутки колеса вниз
{
;скорость прокрутки задается здесь:
settimer, sd, 100
}
; Вне зависимости от того, какое действие было выполнено, сбрасываем
; значение нашей переменной на ноль, чтобы подготовиться к следующей
; серии щелчков колеса:
md = 0
Return
;Обработка прокрутки колеса вверх
;смысл команд тот же самый, что и выше...
$WheelUp::
Send, {WheelUp}
settimer, sd, off
If mu > 0
{
mu += 1
Return
}
mu = 1
SetTimer, tmu, 28 ; Идет ожидание количества нажатий клавиш
; в течение 28 миллисекунд - выставлено опытным путем
;Время ожидания разное для прокрутки вверх и вниз, потому что
;палец (у меня средний) лучше крутит колесо "к себе", чем "от себя".
return
;Таймер времени, в течение которого считаются щелчки колеса вверх
tmu:
SetTimer, tmu, Off
If mu > 2
{
settimer, su, 100
}
mu = 0
Return
;таймер повтора прокрутки вниз
sd:
Send, {WheelDown}
return
;таймер повтора прокрутки вверх
su:
Send, {WheelUp}
return
Опубликовал Steve Key.
Недостатки: работает не во всех окнах, а в некоторых работает только после рывка колеса на заголовке окна. Прокрутка идёт рывками. Кроме того, прокрутка в вышеприведённом скрипте не останавливается, когда доходит до конца документа (например, запустив прокрутку вниз, можно получить интересный эффект, когда она дойдёт до конца документа: если нажать Ctrl+Home, не трогая мышь, документ опять начнёт сам прокручиваться вниз, и более того, если перевести курсор мыши на другое окно, то прокрутка будет действовать и там).
Несмотря на все недостатки, сама идея и реализация, несомненно, представляют интерес.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.