WinExists-Problem

  • Hallo zusammen,

    ich weiß grad nicht, wo der Fehler ist. Ich lasse beim Klick ein Window-Handle in 1 Array schreiben und möchte später prüfen, ob dieses Handle/ Fenster noch existiert. Bei dieser Prüfung kommt jedoch stehts 0 raus.

    Das adden ins Array funktioniert einwandfrei, da er auch sonst nicht in die Prüfung springen würde. Aber weder mit Handle noch mit dem Title wird das Fenster gefunden, obwohl es da ist. Wer kann mir helfen?

    Anbei der Code und 1 Screen als Proof.

    [autoit]

    If $WindowArray[0][0] > 0 Then
    For $i = $WindowArray[0][0] To 1 Step -1
    If WinExists($WindowArray[$i][1]) Then
    If $WindowArray[$i][1] <> WinGetTitle($WindowArray[$i][1]) Then WinSetTitle($WindowArray[$i][1], "", $WindowArray[$i][0])
    Else
    $test = $WindowArray[$i][1]
    ConsoleWrite($WindowArray[$i][1] & @TAB & WinExists($test) & @TAB & WinExists(WinGetTitle($test)) & @CRLF)
    _ArrayDelete($WindowArray, $i)
    $WindowArray[0][0] = UBound($WindowArray) - 1
    EndIf
    Next
    EndIf

    [/autoit]

    Ergebnis:

    [autoit]

    Window added: 0x0014085C
    0x0014085C 0 0

    [/autoit]

    Das Window added kommt aus der besagten Funktion, in der das Handle zum Array zugefügt wird. Das passiert immer, da ConsoleWrite ja nur dann angezeigt wird, wenn das Handle wieder aus dem Array gelöscht wird.

    • Offizieller Beitrag

    Das Window added kommt aus der besagten Funktion, in der das Handle zum Array zugefügt wird.


    Na dann zeig die Funktion mal her. Denn dort scheint ja der Hund begraben zu sein. Ohne zu wissen was im Array steht, kann man schlecht sagen ob deine Auswertungsfunktion funktionieren kann.

  • nein, genau da liegt er ja nicht begraben, weshalb ich den code weggelassen habe. denn wenn das array nicht gefüllt wäre, würde consolewrite nicht ausgeführt werden. und in der ausgabe von CW sieht man, dass das handle auch korrekt übergeben wurde und auch existiert (siehe autoit info tool). im grunde muss ja nur im array ein existierendes handle stehen, was der fall ist.

    meiner meinung nach kann das problem hier nicht liegen. das handle ist im array und das fenster existiert, winexists gibt aber 0 zurück, darum wird die falsche if-anweisung ausgeführt. der fehler ist winexists, nur warum???

    [autoit]

    Func ClickWindowTitle()
    $SearchHwnd = _ArraySearch($WindowArray, $WinHandle)
    If $SearchHwnd = -1 Then
    _Array2DAdd($WindowArray, $WinTitle & "|" & $WinHandle)
    ConsoleWrite(@CRLF & "Window added: " & $WinHandle & @CRLF)
    Else
    ;~ If $WindowArray[$SearchHwnd][1] <> "" Then
    _Array2DDelete($WindowArray, $SearchHwnd)
    ;~ Else
    ;~ _Array2DInsert($WindowArray, $WinTitle, $SearchHwnd)
    ;~ EndIf
    EndIf
    $WindowArray[0][0] = UBound($WindowArray) - 1
    ;~ _ArrayDisplay($WindowArray)
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Da du kein kpl. testbares Codebsp. eingestellt hast (hab keine Lust das erst zusammenzubasteln ;)) soviel:
    Du bekommst das Handle angezeigt, es ist also im Array - aber der Title stimmt nicht. Also solltest du mal vergleichen, welchen Titel du abgespeichert hast und welchen Titel das Fenster verwendet.
    WinTitleMatchMode Flag=2 könnt hilfreich sein.

  • also ich frage ja das handle ab, da liegt wohl der fehler. aber warum kann man ausgerechnet nicht in dieser funktion mit dem handle arbeiten?
    selbst so funktioniert es nicht: WinExists(WinGetTitle($WindowArray[$i][1]))

    gibt es noch eine andere möglichkeit abzufragen, ob ein fenster existiert?

    EDIT: ok, winexists nimmt natürlich das handle, grad wie folgt getestet:

    MsgBox(0, $WindowArray[$i][1], IsVisible("AutoIt 1") & @CRLF & WinExists("AutoIt 1"))

    d. h. das handle aus dem array wird nicht als solches erkannt ... aber warum?