祖先のハンドルを取得 <TOP>
指定したウィンドウの祖先のハンドルを取得します。
GetAncestor 指定したウィンドウの祖先のハンドルを取得
GetParent 指定された子ウィンドウの親ウィンドウまたはオーナーウィンドウのハンドルを返す
Text1の祖先のハンドル、Text1の親のハンドル、メインフォームのハンドルを取得しています。
左:Text1の親はMainForm、Text1の祖先もMainForm。 右:MiniMiniSpy--でMainFormのハンドルを取得(&H5C035E)
'================================================================ '= 祖先のハンドルを取得
'= (GetAncestor.bas) '================================================================ #include "Windows.bi" ' 指定したウィンドウの祖先のハンドルを取得 Declare Function Api_GetAncestor& Lib "user32" Alias "GetAncestor" (ByVal hWnd&, ByVal gaFlags&) ' 指定された子ウィンドウの親ウィンドウまたはオーナーウィンドウのハンドルを返す Declare Function Api_GetParent& Lib "user32" Alias "GetParent" (ByVal hWnd&) #define GA_PARENT 1 '親ウィンドウを返す #define GA_ROOT 2 '親子関係を遡って、直近上位のトップレベルウィンドウを返す #define GA_ROOTOWNER 3 '親子関係と所有関係を遡って、所有されていないトップレベルウィンドウを返す #define vbCrLf (Chr$(13) & Chr$(10)) 'キャリッジリターンとラインフィード(\r\n) Var Shared Text1 As Object Var Shared Text2 As Object Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14 Text2.Attach GetDlgItem("Text2") : Text2.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Var hWnd1 As Long Var hWnd2 As Long Var txt As String hWnd1 = Api_GetAncestor(Text1.GethWnd, GA_ROOT) hWnd2 = Api_GetParent(Text1.GethWnd) txt = txt & "Text1の親のハンドル : &&H" & Hex$(hWnd2) & vbCrLf txt = txt & "Text1の祖先のハンドル: &&H" & Hex$(hWnd1) & vbCrLf txt = txt & "MainFormのハンドル : &&H" & Hex$(GethWnd) Text2.SetWindowText txt End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End