Reagieren, _falls_ ein gewisses Fenster auftaucht. WinExists?

  • Mein Programm sollte eine Funktion aufrufen, falls ein bestimmtes Dialogfenster auftaucht.

    Ist WinExists hier richtig? Wie würde das einbauen?

  • Ich habe es wahrscheinlich falsch erklärt, entschuldigung.
    Das Programm sollte laufen, und während es läuft sollt es drauf achten ob ein bestimmtes Fenster auftaucht, und dann drauf reagieren.

    Bis her habe ich es so versucht

    [autoit]

    If WinExists( "Active Directory" , "Der ausgewählte Anmeldename des Benutzers wird in dieser Organisation bereits") Then
    MsgBox(0, "Benutzer existiert bereits", "Der Benutzername ist bereits vergeben")
    Exit
    EndIf

    [/autoit]

    Leider ohne Erfolg.

  • Ich habe das Gefühl, dass es mit einer einfachen IF - Funktion nicht getan ist. Weil dann prüft es an der Stelle, wo die Funktion dran ist, obs da ist, und wenn nicht, läuft es einfach weiter und ruft es nicht mehr auf.

    Da muss eine Schleife (und/oder sogar eine ganze Funktion) her, meine ich.

  • @datatek: das ganze packst du jetzt in ne schleife, fertig.
    wobei das script von FireFlyer auch funktionieren würde.

    [autoit]

    While WinExists("DeinFenster") = 0
    Sleep(500)
    WEnd

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

    ;hier kommt dein restlicher code

    [/autoit]
  • @ Fisch, ich meine ihr redet an dem Sinn von dem Script von datatek vorbei.
    Das Script läuft und soll ja nicht schlafen, bis das Fenster erscheint. Sondern es soll reagieren, FALLS es auftaucht.

    Richtig, datatek?

  • @datatek: das ganze packst du jetzt in ne schleife, fertig.

    Ach ja?


    @ Fisch, ich meine ihr redet an dem Sinn von dem Script von datatek vorbei.
    Das Script läuft und soll ja nicht schlafen, bis das Fenster erscheint. Sondern es soll reagieren, FALLS es auftaucht.

    Richtig, datatek?

    Das ist 100% richtig, danke.

    Wenn es nicht anders geht, könnte es auch so aussehen dass das Programm an einer bestimmten Stelle guckt ob das Fenster da ist.

    • Offizieller Beitrag

    Dann wäre schon wichtig zu wissen, was das Skript sonst so "treibt". Hat es arg zu tun ist AdlibEnable sicher die beste Lösung, ansonsten läßt sich die Abfrage sicher in das vorhandene Skript einbauen.
    Womit wir bei dem leidigen Problem sind: zu wenig Info's ;)
    Nicht nur das Problem schildern, sondern auch das Umfeld - und wenn wir wissen um was es geht, können wir gezielter helfen. (Unsere Kristallkugeln sind schon ziemlich abgenutzt :rofl: )

  • Der Skript ist sehr schlicht, und tut blos Tastatur simulieren.
    Es legt in einer Win Server 2003 Umgebung neue active directory Benutzer an.

    Dabei kann es vorkommen dass der Benutzer bereits existiert. In diesem Fall taucht ein Dialogfenster auf. Das Programm soll lediglich dieses Dialogfenster erkennen und nicht weiterlaufen.

  • Wenn es Benutzer anlegt, also mehrere, muss also schon eine vorhandene Schleife dasein? Oder nur ein Benutzer? Wenn man den Zeitpunkt besser definiert, wann das Fenster kommen könnte, könnte man sogar doch bei einer IF-Funktion bleiben.
    Warum zeigst du den Code nicht? Links und andere private Infos unkenntlich gemacht. Und schon könnte man besser helfen. ;)

  • ich würds so lösen:

    [autoit]

    AdlibEnable("_check", 250)

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

    ;dein Code

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

    Func _check()
    If WinExists("DeinTitel") Then
    ;bla
    EndIf
    EndFunc

    [/autoit]
  • Die relevante Stelle habe ich mit Comments jetzt hervorgehoben.

    [autoit]


    HotKeySet("^1", "neu")
    HotKeySet("^2", "gruppen")
    HotKeySet("^3", "schliessen")
    While 1
    Sleep(100)
    WEnd

    Func neu()


    send("!t")
    sleep(50)
    send("n")
    sleep(50)
    send("b")
    sleep(200)

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

    $vorname = InputBox("Vorname des neuen Benutzers", "Geben Sie den Vornamen des neuen Benutzers ein.", "")
    $nachname = InputBox("Nachname des neuen Benutzers", "Geben Sie den Nachnamen des neuen Benutzers ein.", "")

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

    sleep(200)

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

    ;
    ;
    If WinExists( "Active Directory" , "Der ausgewählte Anmeldename des Benutzers wird in dieser Organisation bereits") Then
    MsgBox(0, "Existiert bereits", "nutza gibbet scho, gelle?")
    Exit
    EndIf
    ;
    ;

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

    send($vorname)
    send("{TAB}")
    send("{TAB}")
    send($nachname)
    send("{TAB}")
    send("{TAB}")

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

    $voller_name = ($vorname & " " & $nachname)
    $Name_conv = StringLower(StringReplace(StringReplace(StringReplace(StringReplace($voller_name,"ü","ue"),"ö","oe"),"ä","ae"),"ß","ss"))
    $Name_split = StringSplit($Name_conv, " ")
    $bname = StringLeft($Name_split[1], 1) & "." & $Name_split[2]

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

    sleep(75)
    send($bname)
    sleep(75)
    Send("{ENTER}")
    sleep(75)
    send($bname)
    sleep(75)
    send("{TAB}")
    sleep(75)
    send($bname)
    sleep(75)
    send("{TAB}")
    send("{SPACE}")
    send("{TAB}")
    send("{TAB}")
    send("{SPACE}")
    send("!w")
    send("!w")
    sleep(150)
    Send("{ENTER}")

    EndFunc

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

    Func gruppen()
    send("!t")
    sleep(50)
    send("g")
    sleep(50)
    send("***********")
    sleep(50)
    send("{ENTER}")
    sleep(50)
    send("{ENTER}")
    send("!t")
    sleep(50)
    send("g")
    sleep(50)
    send("************")
    sleep(50)
    send("{ENTER}")
    sleep(50)
    send("{ENTER}")
    sleep(50)
    send("!t")
    sleep(50)
    send("g")
    sleep(50)
    send("***********")
    sleep(50)
    send("{ENTER}")
    sleep(50)
    send("{ENTER}")
    EndFunc

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

    Func schliessen()
    Exit
    EndFunc

    [/autoit]
  • ich würds so lösen:

    [autoit]

    AdlibEnable("_check", 250)

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

    ;dein Code

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

    Func _check()
    If WinExists("DeinTitel") Then
    ;bla
    EndIf
    EndFunc

    [/autoit]

    Scheint zu klappen, ich danke.