祖先のハンドルを取得          <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