あらやさんの方法を試してみました。
WM_MOUSEWHEELの上位ワード下位ワードに苦戦しましたが、なんとか形にできました。
SPIF_UPDATEINIFILEとSPIF_SENDCHANGEはよく分からなかったのでとりあえず付けました。
いろいろ試してみたのですが、
スクロール行数はしっかり変更されているのに関わらず、変わらず3行分しかスクロールできませんでした。
(他アプリは変更されており、コントロールパネルから見ても変更されていた)
スクリプトエディタは、スクロール行数に影響されないのでしょうか?
#include "hsedsdk.as"
#uselib "user32.dll"
#func SystemParametersInfo "SystemParametersInfoA" sptr,sptr,sptr,sptr
#func GetScrollPos"GetScrollPos" sptr,sptr
#define SPI_GETWHEELSCROLLLINES $00000068
#define SPI_SETWHEELSCROLLLINES $00000069
#define SPIF_UPDATEINIFILE $00000001
#define SPIF_SENDCHANGE $00000002
#define SB_VERT $00000001
#define WM_MOUSEWHEEL $0000020A
#define ctype MAKELONG(%1,%2) (%1) & $FFFF | (%2) << 16
#define setLine 30; 変更する位置
// 1.マウスホイールのスクロール行数を取得
dim mouseScrollLine
SystemParametersInfo SPI_GETWHEELSCROLLLINES, 0, varptr(mouseScrollLine), 0
// 2.現在のスクロールバーの位置を取得
dim scrollPos
dim edit_hwnd
dim footyId
hsed_getactfootyid footyId
hsed_getwnd edit_hwnd, HGW_EDIT, footyId
GetScrollPos edit_hwnd, SB_VERT
scrollPos = stat
// 3.2で取得した位置と変更後の位置の差をスクロール行数に設定
dim setScrollLine
setScrollLine = setLine-scrollPos
SystemParametersInfo SPI_SETWHEELSCROLLLINES, abs(setScrollLine), 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE
// 4.WM_MOUSEWHEELメッセージを送信
if setScrollLine<=-1{; 負の数なら上にスクロール
sendmsg edit_hwnd, WM_MOUSEWHEEL, MAKELONG(0,120), MAKELONG(ginfo_mx,ginfo_my)
}else{
sendmsg edit_hwnd, WM_MOUSEWHEEL, MAKELONG(0,-120), MAKELONG(ginfo_mx,ginfo_my)
}
// 5.ホイールのスクロール行数を1で取得した値に戻す
SystemParametersInfo SPI_SETWHEELSCROLLLINES, mouseScrollLine, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE