すみません。返信が遅くなりました。
おっしゃる通り、FindWindowExを使うとできました!
サンプルを作ってみたので置いておきます。
// Buttonだけを検出するサンプル
#uselib "user32.dll"
#func FindWindowEx "FindWindowExA" sptr,sptr,sptr,sptr
#cfunc FindWindow "FindWindowA" sptr,sptr
#func GetClassName "GetClassNameA" int,var,int
#func GetWindowText "GetWindowTextA" int, var, int
// ウィンドウ初期化
screen 0,640,480,0, ginfo_dispx/2-320, ginfo_dispy/2-240
title "Buttonだけを検出する"
// 取得する対象のウィンドウを作成
screen 1,360,200,0, 0, 0
title "Buttonだけを検出する(対象)"
objsize ginfo_winx,23
dim a
sdim b,256
button "ボタン1",*lab
mesbox b
button "ボタン2",*lab
listbox a,0,"a"
button "ボタン3",*lab
*lab
gsel 0 ;メインウィンドウに操作先を戻す
// mesbox設置
font "MSゴシック",16
objmode 2
sdim mainMes,5000
mesbox mainMes,ginfo_winx,ginfo_winy,4
notesel mainMes
// 親ウィンドウのハンドル取得
wh = FindWindow(0,"Buttonだけを検出する(対象)") //
noteadd "親hwnd : "+str(wh)+"\n"
// メイン
sdim class,256 // クラス名
sdim wt,256 // タイトル
sdim buf,256 // 汎用
dim count // 検出数カウンタ
repeat
if cnt==0{ ; 初回は0
FindWindowEx wh,0,"Button",0
}else{ ; 以降は戻り値
FindWindowEx wh,retWh,"Button",0
}
retWh = stat
if retWh{
GetClassName retWh,class,256 // クラス名取得
if count<=9{
buf = "00"+str(count)
}else:if count<=99{
buf = "00"+str(count)
}else{
buf = ""+str(count)
}
GetWindowText retWh,wt,256 // タイトル取得
noteadd buf+".Class : "+str(class) // クラス名追加
noteadd " "+"hwnd : "+retWh // ハンドル追加
noteadd " "+"title : "+wt // タイトル追加
noteadd ""
count++
}else{
// 戻り値が0なら終了
break
}
loop
// 検出数情報追加
noteadd "検出数 : "+str(count),1
// mesbox更新
objprm 0,mainMes
ありがとうございました!