以前にマウス直下のGUIオブジェクトの調査サンプルを頂いて使わせてもらっていますが、
これの数値をいじれば直下にあるオブジェクトも判別できるんじゃないかと思いました。
しかし、サンプルを貰った当時に入れたコメントにウィンドウハンドルをどうのと
書いてあります。
;GUIオブジェクト調査用関数 #cfunc WindowFromPoint "WindowFromPoint" int,int #cfunc GetAncestor "GetAncestor" int,int;p2 2直近上位のトップレベルウィンドウを返す ; 3所有されていないトップレベルウィンドウを返す
※変数gmx,gmyはデスクトップ上のマウスの座標
;マウス直下の有効gui if rend=0 or rend_fr\k_btn=0 { gsel 0,0 umouse_gui=0:umouse_hwnd=0 umouse_gui =windowfrompoint(gmx,gmy) ;guiオブジェクトのハンドルを返す umouse_hwnd =getancestor(umouse_gui,2) ;p2=2:直近上位のトップレベルwindowを返す thishwnd=hwnd:actwinid=ginfo(2):umouse=0 if umouse_hwnd=thishwnd/* & actwinid=0 */: umouse=1 ;1で自windowマウス直下に有り }
もしかしたらumouse_guiに代入されるデータで入力可能なフォームがあるかどうか
判別できる???とは思ったものの、ここから先は未知の領域でした。
ただ、少し調べてみると
http://hsp.tv/play/pforum.php?mode=pastwch&num=48981のcatsさんのサンプルで、
自分で生成したオブジェクトのハンドルとを比較しているようで
マウス直下の入力可能なオブジェクトの判定は可能ではあると思うのですが、
僕はマウス直下にある文字入力可能なオブジェクト全てを判定したいのです。
でも、何とWindowFromPointの返り値を比較すればいいのかサッパリ・・・
#uselib "user32.dll" #cfunc WindowFromPoint "WindowFromPoint" int,int sdim buf,256 buf="入力してください" input buf,200,20 sInput=stat hInput=objinfo(stat,2) repeat await 30 switch WindowFromPoint(ginfo(0),ginfo(1)) case hInput if buf="入力してください":objprm sInput,"" swbreak default if buf="":objprm sInput,"入力してください" swend loop