Fenster angeblich geöffnet

  • Hi erkennt ihr den Fehler in diesem Skript ?

    [autoit]


    WinActivate ( "[XXX-XXX-XXX] - Messaging Window")

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

    $active = WinActive ("[XXX-XXX-XXX] - Messaging Window")

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

    MsgBox(1, "baum baum", $active)

    if $active = 1 Then
    Do
    Send("^w")
    $active = WinActive("[XXX-XXX-XXX] - Messaging Window")
    MsgBox(1, "baum baum", $active)
    Until $active = 0
    EndIf

    [/autoit]

    Also ich finde den Fehler einfach nicht er sagt mir beim 1. Mal immer das das Fenster geöffnet sei auch wenns geschlossen ist ...

    • Offizieller Beitrag

    WinActive gibt bei Erfolg 1 zurück. Darum muß ja auch beim erstenmal das Fenster als existent gemeldet werden:

    [autoit]

    WinActivate ( "[XXX-XXX-XXX] - Messaging Window") ; Fenster wird aktiviert

    $active = WinActive ("[XXX-XXX-XXX] - Messaging Window") ; da Fenster aktiv, $active = 1

    MsgBox(1, "baum baum", $active)

    [/autoit]
  • ja aber wie soll ich das denn sonst machen wenn ich WinExist eingebe, noch bevor das Fenster aufgerufen wird bekomme ich auch 1 zurück obwohl da kein Fenster ist ...

    das war was ich zuerst probiert hatte übrigens hast du recht, wenn des WinActivate deaktiviert wird, bekomme ich da ne 0

  • und was mach ich wenn ich da ne 13 zurück bekomme ? :schild4:

    edit: wenn ich des WinActivate deaktiviere erhalte ich ne 5 (alles nicht aufgeführte Werte :(

    Einmal editiert, zuletzt von tuxasus (4. Dezember 2006 um 21:20)

    • Offizieller Beitrag

    Manno, RTFM

    da steht doch alles ganz klar:

    Zitat

    1 = Window exists
    2 = Window is visible
    4 = Windows is enabled
    8 = Window is active

    Also:
    13 = 8 + 4 + 1 (Window exist AND Window enable AND Window active)
    5 = 4 + 1 (Window exist AND Window enable)

    Also machs mal so:

    [autoit]

    $state = WinGetState("[XXX-XXX-XXX] - Messaging Window") ; wenns nicht existiert = 0
    If $state <> 0 Then
    Do
    Send("^w")
    $state = WinGetState("[XXX-XXX-XXX] - Messaging Window")
    MsgBox(1, "baum baum", $state)
    Until $state = 0
    EndIf

    [/autoit]

    Aber verrate mir mal, warum das "Send("^w")" in der Do - Until -Schleife laufen soll. Soll doch das Fenster beenden - und klappt das nicht immer, dass es in der Schleife ggf. wiederholt werden muss?

  • ok mal kurz was zu meinem Skript:

    ich habe QIP (https://autoit.de/www.qip.ru) als Messenger für ICQ und bin zusätlich noch in der Feuerwehr, ist auch ganz toll ich weiß und nein ich erzähl das nicht um anzugeben sondern weil ich ein Programm schreiben möchte, welches auf Knopfdruck automatisch an alle aktiven Gesprächsfenster die Nachricht "Habe einen Einsatz" sendet und anschließend den PC herrunter fährt oder zumindestens in den Stand-by Modus.

    Des soll das dieses Skript erfüllen prinzipiell ja auch nicht so schwer das ganze zu verwirklich wenn da nicht dieses tolle Gesprächsfenster ist ... und zwar macht er für alle Gespräche 1 Fenster auf mit Unterfenstern (wie jeder Browser) nur macht es bei Autoit Windows Info keinen Unterschied ob ich das Fenster von Max oder von Uli auf habe nur der sichtbare Text ist untschiedlich.

    Meine Umsetzung ist jetzt so gedacht: er schickt den Text und drück dann strg + w um das aktuelle gespräch zu ändern, dadurch lande ich automatisch beim nächsten offnen Gesprächsfenster und des macht der dann so lange bis des alle Gesprächsfenster bekommen haben (das Fenster halt zu ist) und anschließend fährt er noch den PC in den Standby (das letzte ist noch nicht umgesetzt)

    Achso des muss ich addieren, dachte der gibt mir ne Meldung raus, die einfach nicht existiert ... aber das machts jetzt nicht wirklcih besser, weil das Fenster ja nicht existieren tut zumindestens nicht unter alt+tab und auch nicht im TaskManager

    • Offizieller Beitrag

    Also mit WinGetState() bekommst du keine Rückmeldung?
    Wenn ich richtig verstanden habe, werden mit Strg+W die einzelnen Gesprächsfenster beendet und somit zum Schluss auch die Anwendung.
    Dann versuch doch mal folgendes:

    [autoit]

    $process = "qip.exe" ; musst mal schauen,welcher Prozeßname das ist
    While ProcessExists($process)
    #cs So könnte deine Abmeldung aussehen
    Send("Muss DRINGEND weg!")
    Send("{ENTER}") ; ich nehme an, dass auch bei QIP mit ENTER abgesendet wird
    #ce
    Send("^w")
    WEnd
    Shutdown(9)

    [/autoit]

    Edit: Shutdown fehlte noch ;)

  • das Problem bei ProcessExist ist, dass nicht die komplette Anwendung geschlossen wird sondern nur das Gesprächsfenster und bei den Prozessen gibt es ja keinen exta Prozess fürs Gesprächsfenster sondern nur das gesamte Programm qip

    Mit WinGetState() bekomm ich halt die Rückmeldung, dass das Fenster geöffnet sei ...

    Ich beende durch strg+w nur die Gesprächfenster, die Anwendung lässt sich nicht über strg+w beenden, deshab geht wohl ProcessExists nicht

    aber danke für den Versuch :)

    • Offizieller Beitrag

    Wieviele Gesprächsfenster hast du max. offen 10, 15 ?
    Laß doch einfach eine zählergesteurte Schleife laufen.
    Sende z.B. 10x "Tschüß, muss weg" STRG+w und anschließend fährst du den PC runter.
    Sicher nicht der eleganteste Weg - aber wenn sonst nichts geht ist es besser als nix. ;)

  • hatte ich schon versucht nur das Problem hierbei ist, dass er sich verfängt wenn im Hintergrund noch andere Programme laufen, wie z.B. Word und das Formular noch gespeichert werden muss dann sendet er nämlich strg+w schreibt dann die message und drückt auf enter und das bei allen dokumenten => alles was geschrieben wurde ist weg weil er alles auf den selben Dateinamen schreibt ...

    nicht so toll ...

    • Offizieller Beitrag

    Vorschlag:
    Lass doch so ablaufen wenn du weg musst
    - alle Pozesse auflisten

    [autoit]

    $list = ProcessList()

    [/autoit]


    - alle Prozesse (ausser den Systemprozessen ;) und QIP) beenden

    [autoit]

    ProcessClose("prozess_X_Y.exe")

    [/autoit]


    - Fenster QIP aktivieren
    - wenn du jetzt deine Nachricht und STRG+w sendest, geht das an QIP
    - das ganze n-mal und dann shutdown