Hilfe bei der Konvertierung einer AutoHotkey Funktion

  • Hallo zusammen,

    Ich möchte gern eine Liste von _echten_ Fenstern erhalten ohne irgendwelche "unnütze" Einträge.
    Für AutoHotkey nutze ich schon seit längerer Zeit die Folgende:

    Ich hab nun versucht, sie auf AutoIt zu portieren, aber ich bin mit den BitAND Funtionen nicht vertraut (und frage mich, ob ich die überhaupt nutzen muss).

    Mein "Versuch":

    Allerdings erhalte ich praktisch jedes "Fenster", auch wenn es keines ist, was man anklicken könnte.

    Könnte jemand mal drüberschauen und Fehler ausbessern?

    Danke sehr!

  • Ich finde die Zusammenstellung der Kriterien für eine Auswahl von "richtigen" Fenstern bisschen skurril.
    Damit das deutlicher wird welche Kombinationen zu dieser Auswahl gehören habe ich die logische Verknüpfung mal in Form von If-Verzweigungen auseinander genommen um etwas deutlicher zu machen was gemeint ist:

    [autoit]

    #include <WinAPI.au3>
    #include <WindowsConstants.au3>

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

    Local $var = WinList()
    For $i = 1 To $var[0][0]
    If Not IsWindow($var[$i][1]) Then ContinueLoop
    ConsoleWrite($var[$i][0] & @CRLF)
    Next

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

    Func IsWindow($hwnd)
    Local $exStyle = _WinAPI_GetWindowLong($hwnd, $GWL_EXSTYLE)
    If @error Then Return SetError(1, _WinAPI_GetLastError(), _WinAPI_GetLastErrorMessage())

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

    If (Not _WinAPI_GetWindow($hwnd, $GW_OWNER)) And _ ; Wenn Fenster kein "Unterfenster" eines anderen Fensters ist sondern "eigenständig"
    (Not BitAND($exStyle, $WS_EX_TOOLWINDOW)) Then ; Dann darf der Stil dieses "eigenständigen" Fensters nicht WS_EX_TOOLWINDOW enthalten
    Return True
    ElseIf BitAND($exStyle, $WS_EX_APPWINDOW) Then ; Ansonsten (also wenn es ein Unterfenster ist) dann darf WS_EX_APPWINDOW nicht gesetzt sein
    Return True
    Else
    Return False
    EndIf
    ;~ Return ((Not _WinAPI_GetWindow($hwnd, $GW_OWNER) And (Not BitAND($exStyle, $WS_EX_TOOLWINDOW))) Or BitAND($exStyle, $WS_EX_APPWINDOW)) ? 1 : 0
    EndFunc

    [/autoit]
  • Zitat

    Ich finde die Zusammenstellung der Kriterien für eine Auswahl von "richtigen" Fenstern bisschen skurril.

    Ich prinzipiell auch, aber im Zusammenspiel mit der "WinGet" Funktion funktioniert es unter AHK absolut perfekt.

    Herzlichen Dank für deine Anpassung an AutoIt!

    LG,
    highend