サンプル用に、HSP でウィンドウとボタンを作って、キーボードの特定キーで対象ボタンを押すスクリプト。
#uselib "user32.dll"
#cfunc FindWindowEx "FindWindowExA" int,int,sptr,sptr
#define WM_LBUTTONDOWN 0x0201
#define WM_LBUTTONUP 0x0202
#define MK_LBUTTON 0x01
screen 0,800,600,0 : Title "Window制御 - EMD"
Button gosub "対象のボタン",*ButtonControl
pos 100,0 : mes "キーボードの【↓】を押すと、対象ウィンドウの対象ボタンを押します"
*main
stick ki,,0 //HSPが非アクティブでも検出するようにします。
if (ki&8) : gosub *SendControl
await 10
goto *main
*SendControl
//ウィンドウ管理リストより、操作対象のウィンドウを検索します。
TargetMainHWND = FindWindowEx(0,0,"hspwnd0","Window制御 - EMD")
if TargetMainHWND = 0 : dialog "対象のウィンドウを検索できませんでした" : return
//上記で検索されたウィンドウの中にある対象のウィンドウを検索します。
TargetButtonHWND = FindWindowEx(TargetMainHWND,0,"Button","対象のボタン")
if TargetButtonHWND = 0 : dialog "対象のウィンドウを検索できませんでした" : return
//対象のウィンドウのボタンに対して、マウス押し離しメッセージを送信
SendMsg TargetButtonHWND,WM_LBUTTONDOWN,MK_LBUTTON,0
SendMsg TargetButtonHWND,WM_LBUTTONUP,MK_LBUTTON,0
return
*ButtonControl
color rnd(255),rnd(255),rnd(255) : boxf 100,100,200,200
return
ウィンドウは必ずウィンドウクラス名とウィンドウ名のどちらかを必要とします。
そのどちらかがわからないと、制御することはできません。
また、同名のウィンドウクラスまたは同名のウィンドウ名が存在する場合、どちらが検索されるかは保証できません。