As far as scrolling, I've found this script to be incredibly useful (open through autohotkey):
$*RButton::
Hotkey, $*RButton Up, RButtonup, off
;KeyWait, RButton, T0.4
;If ErrorLevel = 1
;{
Hotkey, $*RButton Up, RButtonup, on
MouseGetPos, ox, oy
SetTimer, WatchTheMouse, 5
movedx := 0
movedy := 0
pixelsMoved := 0
; TrayTip, Scrolling started, Emulating scroll wheel
;}
;Else
; Send {RButton}
return
RButtonup:
Hotkey, $*RButton Up, RButtonup, off
SetTimer, WatchTheMouse, off
;TrayTip
If (pixelsMoved = 0)
{
;The mouse was not moved, send the click event
; (May want to make it PGUP or something)
Send {RButton}
Send {RButtonUp}
}
return
WatchTheMouse:
MouseGetPos, nx, ny
movedx := movedx+nx-ox
movedy := movedy+ny-oy
pixelsMoved := pixelsMoved + Abs(nx-ox) + Abs(ny-oy)
timesX := Abs(movedx) / 8
ControlGetFocus, control, A
Loop, %timesX%
{
If (movedx > 0)
{
SendMessage, 0x114, 1, 0, %control%, A ; 0x114 is WM_HSCROLL
movedx := movedx - 4
}
Else
{
SendMessage, 0x114, 0, 0, %control%, A ; 0x114 is WM_HSCROLL
movedx := movedx + 4
}
}
timesY := Abs(movedy) / 4
Loop, %timesY%
{
If (movedy > 0)
{
Click WheelDown
movedy := movedy - 4
}
Else
{
Click WheelUp
movedy := movedy + 4
}
}
MouseMove ox, oy
return
Change RButton to whatever button you prefer; the way it's set now, you hold RButton and move the ball to scroll the mouse.