WM_MOUSEWHEEL(0x020A)を送ってやればスクロールできるみたいです。
書式は sendmsg ハンドル, 0x020A, s<<16, (y<<16 | x) という形式で、
sはスクロール量(下方向は負、上方向は正の値)、xとyはマウスカーソルの
ディスプレイ座標です。スクロール量と、メッセージを送る間隔を変えれば
スクロール速度が変わります。
マウス座標は、とりあえずウィンドウの中心にあることにしていますが、
インラインフレームを持つページでマウスがインラインフレーム上にあると
フレーム内がスクロールされるので、マウスの位置は重要です。
#uselib "user32"
#cfunc FindWindow "FindWindowA" var,int
#cfunc FindWindowEx "FindWindowExA" sptr,sptr,sptr,sptr
#func GetWindowRect "GetWindowRect" sptr,sptr
IEClass="IEFrame"
URL="http://www.yahoo.co.jp" //表示するサイト
screen 0,640,480
button gosub "起動",*exec_
stop
*exec_
newcom objIE, "InternetExplorer.Application"
IEhwnd=FindWindow(IEClass,0) //起動したIEのハンドルを取得
mes "IEのhwndは"+IEhwnd
objIE("Visible") = 1
objIE->"Navigate" URL //サイトを表示
subhwnd = FindWindowEx(IEhwnd, 0, "Frame Tab", 0)
subhwnd = FindWindowEx(subhwnd, 0, "TabWindowClass", 0)
subhwnd = FindWindowEx(subhwnd, 0, "Shell DocObject View", 0)
while (IEChildhwnd == 0)
// こいつだけ表示が遅いようなので待つ
IEChildhwnd = FindWindowEx(subhwnd, 0, "Internet Explorer_Server", 0)
wait 1
wend
mes "IEの子ウィンドウのhwndは"+IEChildhwnd
mes ""
//テスト
mes "↓1回のスクロール量"
scrq = 120
input scrq
mes "waitの待ち時間"
wtime = 50
input wtime
button "scroll down", *scrdn
button "scroll up", *scrup
button "stop", *scrstop
stop
*scrdn
// ウィンドウの中心を割り出す
rect = 0, 0, 0, 0
GetWindowRect IEChildhwnd, varptr(rect)
center_x = (rect.0 + rect.2) / 2
center_y = (rect.1 + rect.3) / 2
repeat
sendmsg IEChildhwnd, 0x020A, (-scrq) << 16, ((center_y << 16) | center_x)
wait wtime
loop
stop
*scrup
// ウィンドウの中心を割り出す
rect = 0, 0, 0, 0
GetWindowRect IEChildhwnd, varptr(rect)
center_x = (rect.0 + rect.2) / 2
center_y = (rect.1 + rect.3) / 2
repeat
sendmsg IEChildhwnd, 0x020A, (scrq) << 16, ((center_y << 16) | center_x)
wait wtime
loop
stop
*scrstop
stop