ChildWindows von einem MainWindow finden

  • Hallo,

    ich habe ein kleines Problem!

    Ich hab mit "WinGetHandle" das Handle eines Fensters erhalten. Nun ist es ja so das Anwedungen unter Windows meinst auch noch ChildFenster ( Unterfenster ) haben. Diese besitzen auch wiederum ein Handle. Gibt es ne Möglichkeit sich die Unterfenster eines Elternfensters anzeigen zu lassen um deren Handle zu bekommen?

    Sozusagen das ich mit einem Handle was ich habe nach den Unterfenstern suchen kann?

    Danke schonmal im voraus!

    Grüße SouthsideDevil

  • Hi

    Möglicherweise gibts da schon eine bessere Lösung!?
    Meine sieht jedenfalls so aus:

    [autoit]

    #include <WinAPI.au3>
    #include <Array.au3>

    [/autoit][autoit][/autoit][autoit]

    $hGui = GUICreate("GUI1")
    GUISetState(@SW_SHOW, $hGui)
    $hCHild1 = GUICreate("Child 1", -1, -1, -1, -1, -1, -1, $hGui)
    GUISetState(@SW_SHOW, $hCHild1)
    $hCHild2 = GUICreate("Child 2", -1, -1, -1, -1, -1, -1, $hCHild1)
    GUISetState(@SW_SHOW, $hCHild2)
    $hCHild3 = GUICreate("Child 3", -1, -1, -1, -1, -1, -1, $hCHild2)
    GUISetState(@SW_SHOW, $hCHild3)
    $hWndParent = WinGetHandle($hGui)

    [/autoit][autoit][/autoit][autoit]

    $aFirstLevelChildren = _WinGetFirstLevelChildren($hWndParent)
    $aAllChildren = _WinGetAllChildren($hWndParent)
    _ArrayDisplay($aFirstLevelChildren,"First Level Children")
    _ArrayDisplay($aAllChildren,"All Children")

    [/autoit][autoit][/autoit][autoit]

    Func _WinGetFirstLevelChildren($hWnd = 0)
    Local $aWinlist = WinList()
    Local $aRet[1][2], $iCnt = 0
    For $i = 1 To $aWinlist[0][0]
    If _WinAPI_GetParent($aWinlist[$i][1]) = $hWnd Then
    $iCnt += 1
    ReDim $aRet[$iCnt + 1][2]
    $aRet[$iCnt][0] = $aWinlist[$i][0]
    $aRet[$iCnt][1] = $aWinlist[$i][1]
    EndIf
    Next
    $aRet[0][0] = $iCnt
    Return $aRet
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _WinGetAllChildren($hWnd = 0)
    Local $aWinlist = WinList()
    ReDim $aWinlist[$aWinlist[0][0] + 1][3]
    Local $aRet[1][2], $iCnt = 0
    For $i = 1 To $aWinlist[0][0]
    $aWinlist[$i][2] = _WinAPI_GetParent($aWinlist[$i][1])
    Next
    _WinGetAllChildrenRecursive($aWinlist, $hWnd, $iCnt, $aRet)
    $aRet[0][0] = $iCnt
    Return $aRet
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _WinGetAllChildrenRecursive($aWinlist, $hWnd, ByRef $iCnt, ByRef $aRet)
    If Not IsArray($aWinlist) Then Return -1
    For $i = 1 To $aWinlist[0][0]
    If $aWinlist[$i][2] = $hWnd And $aWinlist[$i][0] <> "Default IME" Then
    $iCnt += 1
    ReDim $aRet[$iCnt + 1][2]
    $aRet[$iCnt][0] = $aWinlist[$i][0]
    $aRet[$iCnt][1] = $aWinlist[$i][1]
    _WinGetAllChildrenRecursive($aWinlist, $aWinlist[$i][1], $iCnt, $aRet)
    EndIf
    Next
    EndFunc

    [/autoit]

    lgE