なんとか自己解決しました
過去ログのosakanaさんのスクリプトと
さくらさんのstdlibを切り貼りしてなんとなく出来ましたw
#include "sysval.as"
#include "gblconst.as"
#include "winapi32.as"
#uselib "kernel32.dll"
;#func CloseHandle "CloseHandle" sptr
#func GetProcessId "GetProcessId" sptr
#uselib "user32.dll"
;#func GetDesktopWindow "GetDesktopWindow"
;#func GetTopWindow "GetTopWindow" sptr
;#func GetWindowThreadProcessId "GetWindowThreadProcessId" sptr,sptr
;#func GetNextWindow "GetNextWindow" sptr,sptr ; ないもよう
;#func GetWindow "GetWindow" sptr,sptr
;#func IsWindowVisible "IsWindowVisible" sptr
;#func GetWindowLong "GetWindowLongA" sptr,sptr
#uselib "shell32.dll"
;#func ShellExecuteEx "ShellExecuteExA" sptr
/*
実行ファイル名からプロセスIDを探す
*/
#uselib "kernel32.dll"
#func CreateToolhelp32Snapshot "CreateToolhelp32Snapshot" sptr,sptr
#func Process32First "Process32First" sptr,sptr
#func Process32Next "Process32Next" sptr,sptr
;#func CloseHandle "CloseHandle" sptr
;#define SW_SHOW $00000005
#define SEE_MASK_NOCLOSEPROCESS $00000040
#define TH32CS_SNAPPROCESS $00000002
#define th32ProcessID 2
#define szExeFile 9
;#define SW_SHOW $00000005
;#define SEE_MASK_NOCLOSEPROCESS $00000040
;#define GW_HWNDNEXT $00000002
;#define GW_HWNDPREV $00000003
;#define GWL_HWNDPARENT $FFFFFFF8
;#define WM_GETTEXT $0000000D
;#define WM_GETTEXTLENGTH $0000000E
;#define WM_CLOSE $00000010
screen 0,640,250
#define hProcess 14
// 起動
filename = "hsed3.exe"
; exec filename
wait 50
// プロセスのスナップショットをとる
CreateToolhelp32Snapshot TH32CS_SNAPPROCESS, 0
if stat = -1 :stop
hsnapshot = stat
dim pe32, 74 ; PROCESSENTRY32 構造体
pe32 = 296 ; 構造体のサイズ
// スナップショットから取得
Process32First hsnapshot, varptr(pe32)
// 一致するファイル名を探す
repeat
if stat = 0 :break
dupptr exefile, varptr(pe32.szExeFile), 260, 2 ; XP以降はファイル名のみでそれ以前はフルパスらしい。
if exefile = filename { ; 小文字に変換してから調べた方が良いかも。
mes "プロセスID:" + pe32.th32ProcessID + " : " + exefile
my_pID=pe32.th32ProcessID
}
Process32Next hsnapshot, varptr(pe32)
loop
CloseHandle hsnapshot
pid_target = my_pID
; GetDesktopWindow
; GetTopWindow stat
GetTopWindow 0 ; これでも良いみたい
hw = stat
wait 50
sdim wndtxt, 256
repeat
if hw = 0 :break
IsWindowVisible hw
if stat { ; 可視状態のウィンドウ
GetWindowLong hw, GWL_HWNDPARENT
if stat = 0 { ; 親ウィンドウを持たないウィンドウ
GetWindowThreadProcessId hw, varptr(pid)
if pid = pid_target { ; 探しているプロセスIDと一致
mes "プロセスID:" + pid
mes "ウィンドウハンドル:" + hw
my_hw=hw
sendmsg hw, WM_GETTEXT, 256, varptr(wndtxt)
mes "ウィンドウタイトル:" + wndtxt
break
}
}
}
GetWindow hw, GW_HWNDNEXT ; 次のウィンドウハンドル取得
hw = stat
loop
// 実行プロセスをウィンドウハンドルから終了
; sendmsg hw, WM_CLOSE, 0, 0
mes "終了"
goto *_2nd
#ifdef __hsp30__
#ifndef __EXWINSTYLE__
#define __EXWINSTYLE__
#module
#deffunc Exobjsizepos int prm1,int prm2,int prm3,int prm4,int prm5
;*******************************************************************************
; ウィンドウのサイズ、位置を変更 (Exobjsizepos)
;
; 戻り値 : 成功 stat=1
;
; ・書式 Exobjsizepos hwnd,x,y,w,h
; ・引数 nhwnd (int) : ウィンドウハンドル
; x (int) : 0〜(0) 位置 x
; y (int) : 0〜(0) 位置 y
; w (int) : 0〜(winx) 幅
; h (int) : 0〜(winy) 高さ
; ・タイプ モジュール命令
;
;-- (NOTE) ---------------------------------------------------------------------
;
; (使用例)
; Exobjsizepos 0,100,100,400,500
;*******************************************************************************
whandle = prm1 : if whandle==0 : whandle=hwnd
x = prm2 : if x<=0 : x=0
y = prm3 : if y<=0 : y=0
w = prm4 : if w<=0 : w=ginfo(10)
h = prm5 : if h<=0 : h=ginfo(11)
MoveWindow whandle,x,y,w,h,1
return stat
#undef EDGE_RAISED
#undef EDGE_SUNKEN
#undef EDGE_ETCHED
#undef EDGE_BUMP
#undef BF_LEFT
#undef BF_TOP
#undef BF_RIGHT
#undef BF_BOTTOM
#undef BF_RECT
#undef BF_MIDDLE
#undef BF_SOFT
#undef BF_ADJUST
#undef BF_FLAT
#undef BF_MONO
#global
#endif
#endif
*_2nd
myx=ginfo(4)
myy=ginfo(7)
Exobjsizepos my_hw,myx-100,myy,800,450
うーん想像ほどカッコよくないw