Here's an AHK script that gives basic, vertical hand tool functionality when holding CAPS + right mouse button + dragging. It should work for all programs that use mousewheel up/down to scroll up/down. Change the sensitivity through the xsens variable in the code if needed. It's very limited though: no horizontal scrolling, no drag hand icon. So if you already have a mouse with a scrollwheel then it's not so very useful. Still it lets you do long scrolls a bit faster and with more "flow" I think.
By the way, Easy Window Dragging (that I built this upon) is extremely useful - try it anyone who hasn't yet.
; Easy Window Scrolling
; adapted from Easy Window Dragging
; http://www.autohotkey.com/docs/scripts/EasyWindowDrag.htm
CapsLock & RButton::
CoordMode, Mouse ; Switch to screen/absolute coordinates.
MouseGetPos, EWD_MouseStartX, EWD_MouseStartY, EWD_MouseWin
WinGetPos, EWD_OriginalPosX, EWD_OriginalPosY,,, ahk_id %EWD_MouseWin%
SetTimer, EWD_WatchMouse, 10 ; Track the mouse as the user drags it.
xsens = 20 ;<------- change sensitivity here if needed
return
EWD_WatchMouse:
GetKeyState, EWD_RButtonState, RButton, P
if EWD_RButtonState = U ; Button has been released, so drag is complete.
{
SetTimer, EWD_WatchMouse, off
return
}
; Otherwise, scroll to match the change in mouse coordinates
; caused by the user having dragged the mouse:
CoordMode, Mouse
MouseGetPos, EWD_MouseX, EWD_MouseY
ychange := EWD_MouseStartY - EWD_MouseY
SetWinDelay, -1 ; Makes the below move faster/smoother.
if ychange > %xsens%
SendInput {WheelDown}
if ychange < -%xsens%
SendInput {WheelUp}
EWD_MouseStartX := EWD_MouseX ; Update for the next timer-call to this subroutine.
EWD_MouseStartY := EWD_MouseY
return