In [ offen ] Win Funktionen auch mit ProzessPid? ist genau die Lösung für dich. _ProcessGetWinEx gibt ein Array mit allen Fenstern zu einer PID zurück:
Spoiler anzeigen
#include <Array.au3>
$aWin = _ProcessGetWinEx(3952)
_ArrayDisplay($aWin)
Func _ProcessGetWinEx($ivPid, $svClass = "", $svTitle = "", $svText = "", $ivReturnOnlyFirstMatch = False)
$ivPid = ProcessExists($ivPid)
If Not $ivPid Then Return (SetError(1, 0, 0))
Local $avwArray = WinList()
Local $avRet[$avwArray[0][0]] = [0]
Local $iFound = 0
For $i = 1 To $avwArray[0][0]
$avClass = DllCall("User32.dll", "int", "GetClassName", "hwnd", $avwArray[$i][1], "str", "", "int", 4096)
If WinGetProcess($avwArray[$i][1]) = $ivPid Then
If $svClass = "" Or (IsArray($avClass) And $avClass[2] = $svClass) Then
If ($svTitle = "" Or StringInStr($avwArray[$i][0], $svTitle)) And ($svText = "" Or StringInStr(WinGetText($avwArray[$i][1]), $svText)) Then
$iFound += 1
$avRet[$iFound] = $avwArray[$i][1]
If $ivReturnOnlyFirstMatch Then
$avRet = $avRet[1]
ExitLoop
EndIf
EndIf
EndIf
EndIf
Next
ReDim $avRet[$iFound + 1]
$avRet[0]=$iFound
Return $avRet
EndFunc ;==>_ProcessGetWinEx
mfg autoBert