WinWaitAuswahl...drehe mich im Kreise...

  • Hallo, liebe AutoIt-Gemeinde,
    heute nur mal ein winziges Problem (für die Profis), bei dem ich aber der Lösung kein Stück näher komme. Ganz vereinfacht soll ein Update von MBAM (http://www.malwarebytes.org/mbam.php) durchgeführt werden, allerdings so, das man es auch sieht und die Auswertung liest. Klappt relativ gut, nur mein Problem ist die Meldung von MBAM, die entweder lautet, das die Datenbank aktualisiert wurde oder das man bereits die aktuellste Datenbank verwendet. Und hier weiß ich momentan nicht, wie ich es abfrage, das beide Meldungen erscheinen können. (Version mit "or" Zeile 17 geht so nicht...). Bekomme es nur, das es bei einer klappt und der anderen wartet Programm ewig - logisch, da ja entsprechende Meldung nicht auftaucht.... Hatte ursprünglich nur die Winwait-Befehle genommen, aber da die Update-Zeitdauer verschieden ist, dachte ich, es geht mit der Progressbar-Abfrage besser (falls die richtig ist....). Bitte also um einen Gedankenanstoß, das auslesen per Autoit-Info-Tool hat mir auch noch keine Geistesblitze beschert, leider.....

    Hier noch das Script (inkl. Auto-It-Infotool-Daten):

    Spoiler anzeigen
    [autoit]

    #include <ProgressConstants.au3>
    #include <SendMessage.au3>
    $ProgressHandle = ControlGetHandle("Fenstertitel","","msctls_progress321") ; Handle zur 1. Progressbar des Fensters "Fenstertitel" holen
    $progressbarPOS = _SendMessage($ProgressHandle,$PBM_GETPOS)

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

    $Mbam="""M:\Program Files\Malwarebytes' Anti-Malware\mbam.exe"" /UPDATE"

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

    Run($Mbam)
    WinWaitActive("Malwarebytes' Anti-Malware Aktualisierung","")
    $ProgressHandle = ControlGetHandle("Malwarebytes' Anti-Malware Aktualisierung","","msctls_progress321") ; Handle zur 1. Progressbar des Fensters "Fenstertitel" holen
    $progressbarPOS = _SendMessage($ProgressHandle,$PBM_GETPOS)

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

    Do
    MsgBox(1,"Info",$progressbarPOS,5);=1 = am Ende?
    Until $progressbarPOS="1"

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

    ;WinWait("Malwarebytes' Anti-Malware","Die Datenbank") Or WinWait("Malwarebytes' Anti-Malware","Die Datenbank")

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

    $MbamInfo=ControlGetText("Malwarebytes' Anti-Malware","","[CLASS:Static; INSTANCE:2]")
    ControlClick("Malwarebytes' Anti-Malware","","[CLASS:Button; INSTANCE:1]")
    msgbox(1,"Info",$MbamInfo,10)
    exit

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

    #cs
    >>>> Window <<<< msgbox update ok
    Title: Malwarebytes' Anti-Malware
    Class: #32770
    Position: 378, 123
    Size: 461, 119
    Style: 0x94C801C5
    ExStyle: 0x00010101
    Handle: 0x000D05A2

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

    >>>> Control <<<<
    Class: Static
    Instance: 2
    ClassnameNN: Static2
    Name:
    Advanced (Class): [CLASS:Static; INSTANCE:2]
    ID: 65535
    Text: Die Datenbank wurde erfolgreich von Version 5462 auf Version 5703 aktualisiert.
    Position: 62, 20
    Size: 387, 15
    ControlClick Coords: 149, 9
    Style: 0x50022080
    ExStyle: 0x00000004
    Handle: 0x001E05E0

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

    >>>> Mouse <<<<
    Position: 592, 174
    Cursor ID: 0
    Color: 0xD4D0C8

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

    ? EIgentliches Aktualisierungsding:
    >>>> Window <<<<
    Title: Malwarebytes' Anti-Malware Aktualisierung
    Class: ThunderRT6FormDC
    Position: 478, 289
    Size: 324, 222
    Style: 0x1EC80000
    ExStyle: 0x00000100
    Handle: 0x000607B2

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

    event.
    >>>> Window <<<<
    Title: Malwarebytes' Anti-Malware Aktualisierung
    Class: ThunderRT6FormDC
    Position: 478, 289
    Size: 324, 222
    Style: 0x1EC80000
    ExStyle: 0x00000100
    Handle: 0x000607B2

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

    >>>> Control <<<<
    Class: ThunderRT6PictureBoxDC
    Instance: 1
    ClassnameNN: ThunderRT6PictureBoxDC1
    Name:
    Advanced (Class): [CLASS:ThunderRT6PictureBoxDC; INSTANCE:1]
    =Lade herunter: 5,88 MB [100%].
    wenn Verbinde mit dem Server und msgbox Sie verwenden die aktuelle Datenbankversion - dann eben erst aktualisiert...
    #ce

    [/autoit]


    Wie immer danke im Voraus und allen ein schönes WE!
    Manne363.

    Einmal editiert, zuletzt von Manne363 (12. Februar 2011 um 20:21)

  • Hallo <Manne363,

    teste einmal dieses Skript:

    Spoiler anzeigen
    [autoit]

    #include <ProgressConstants.au3>
    #include <SendMessage.au3>
    $ProgressHandle = ControlGetHandle("Fenstertitel", "", "msctls_progress321") ; Handle zur 1. Progressbar des Fensters "Fenstertitel" holen
    $progressbarPOS = _SendMessage($ProgressHandle, $PBM_GETPOS)

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

    $Mbam = """M:\Program Files\Malwarebytes' Anti-Malware\mbam.exe"" /UPDATE"

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

    Run($Mbam)
    WinWaitActive("Malwarebytes' Anti-Malware Aktualisierung", "")
    $ProgressHandle = ControlGetHandle("Malwarebytes' Anti-Malware Aktualisierung", "", "msctls_progress321") ; Handle zur 1. Progressbar des Fensters "Fenstertitel" holen
    $progressbarPOS = _SendMessage($ProgressHandle, $PBM_GETPOS)

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

    Do
    MsgBox(1, "Info", $progressbarPOS, 5);=1 = am Ende?
    Until $progressbarPOS = "1"

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

    do
    if WinWait("Malwarebytes' Anti-Malware","Die Datenbank",5) Then ExitLoop
    if WinWait("Malwarebytes' Anti-Malware","Die Datenbank",5) Then ExitLoop
    until#

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

    $MbamInfo = ControlGetText("Malwarebytes' Anti-Malware", "", "[CLASS:Static; INSTANCE:2]")
    ControlClick("Malwarebytes' Anti-Malware", "", "[CLASS:Button; INSTANCE:1]")
    MsgBox(1, "Info", $MbamInfo, 10)
    Exit

    [/autoit]

    mfg autoBert

  • Hallo, lieber autoBert,
    erstmal Danke für rasche Antwort. Allerdings läuft Dein Scripts so nicht und da ich leider Deinen Gedanken ab Zeile 18 nicht mehr folgen kann, habe ich da auch nix daran geändert....
    Danke trotzdem.
    GLG
    Manne363.

  • Hallo manne363,

    der Gedanke war den TimeOut-Parameter von WinWait zu benutzen. Leider hat sich ein # hinter das Until gemoggelt und dabei die 1 gelöscht.

    Es geht aber noch schöner:

    Spoiler anzeigen
    [autoit]

    #include <ProgressConstants.au3>
    #include <SendMessage.au3>
    $ProgressHandle = ControlGetHandle("Fenstertitel", "", "msctls_progress321") ; Handle zur 1. Progressbar des Fensters "Fenstertitel" holen
    $progressbarPOS = _SendMessage($ProgressHandle, $PBM_GETPOS)

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

    $Mbam = """M:\Program Files\Malwarebytes' Anti-Malware\mbam.exe"" /UPDATE"

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

    Run($Mbam)
    WinWaitActive("Malwarebytes' Anti-Malware Aktualisierung", "")
    $ProgressHandle = ControlGetHandle("Malwarebytes' Anti-Malware Aktualisierung", "", "msctls_progress321") ; Handle zur 1. Progressbar des Fensters "Fenstertitel" holen
    $progressbarPOS = _SendMessage($ProgressHandle, $PBM_GETPOS)

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

    Do
    MsgBox(1, "Info", $progressbarPOS, 5);=1 = am Ende?
    Until $progressbarPOS = "1"

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

    do
    if WinExists("Malwarebytes' Anti-Malware","Die Datenbank wurde erfolgreich") Then ExitLoop
    if WinExists("Malwarebytes' Anti-Malware","Die Datenbank wurde nicht",5) Then ExitLoop
    until 1

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

    $MbamInfo = ControlGetText("Malwarebytes' Anti-Malware", "", "[CLASS:Static; INSTANCE:2]")
    ControlClick("Malwarebytes' Anti-Malware", "", "[CLASS:Button; INSTANCE:1]")
    MsgBox(1, "Info", $MbamInfo, 10)
    Exit

    [/autoit]

    diesmal hoffentlich ohne Tippfehler,

    Edit: Fenstertitel/Text musst du auf die 2 unterschiedlichen Melungen anpassen
    mfg autoBert

    Einmal editiert, zuletzt von autoBert (11. Februar 2011 um 16:52)

  • Vielleicht ist es eine Hilfe, wenn du die Meldungen ausliest und je nach dem reagierst. Also wenn Datenbank update verfügbar, dann...und/oder wenn Datenbank bereits auf dem neusten Stand, dann...
    Weil die Meldung "Sie verwenden die aktuellste Datenbank-Version." kann man z.B. mit dem Info Tool, aus der erscheinenden Msgbox auslesen.

    Wenn das nicht dein Anliegen ist, dann habe ich dein Problem nicht ganz verstanden.

  • Hallo, lieber autoBert, hallo, lieber Straigt-up,

    Danke Euch mal wieder. autoBert - funktioniert nicht, sondern wird eine Endlosschleife, wenn Datenbank aktualisiert wird., Wenn nicht, funktioniert es.
    @Straight-up: Naja, das Problem ist vorher, während des Updates!! Wenn die Datenbank bereits aktuell ist, funktioniert Script - wenn aber die Datenbank aktualisiert wurde, geht Script nach Meldung von MBAM (Die Datenbank wurde von ... auf .. aktualisiert) nicht weiter..... Und genau da habe ich wohl den Denkfehler.....

    Die MessageBox auslesen, wenn diese erscheint, mache ich ja bereits, klappt aber auch nur, wenn Datenbank bereits aktuell ist.
    Bitte also wieder um HILFE!!!!
    Danke im Voraus
    Manne363.

  • Halo Manne363,

    da die Fenstertitel der Messageboxen ja identisch sind kannst du es so machen:

    Spoiler anzeigen
    [autoit]

    #include <ProgressConstants.au3>
    #include <SendMessage.au3>
    $ProgressHandle = ControlGetHandle("Fenstertitel", "", "msctls_progress321") ; Handle zur 1. Progressbar des Fensters "Fenstertitel" holen
    $progressbarPOS = _SendMessage($ProgressHandle, $PBM_GETPOS)

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

    ;$Mbam = """M:\Program Files\Malwarebytes' Anti-Malware\mbam.exe"" /UPDATE"
    $Mbam = """C:\Programme\Malwarebytes' Anti-Malware\mbam.exe"" /UPDATE"

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

    Run($Mbam)
    WinWaitActive("Malwarebytes' Anti-Malware Aktualisierung", "")
    $ProgressHandle = ControlGetHandle("Malwarebytes' Anti-Malware Aktualisierung", "", "msctls_progress321") ; Handle zur 1. Progressbar des Fensters "Fenstertitel" holen
    $progressbarPOS = _SendMessage($ProgressHandle, $PBM_GETPOS)

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

    Sleep(5000) ;da die Progressbar 1 auch schon vorher 1* erscheint

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

    Do
    $progressbarPOS = _SendMessage($ProgressHandle, $PBM_GETPOS)
    MsgBox(1, "Info", $progressbarPOS, 5);=1 = am Ende?
    Until ($progressbarPOS = "1") or WinExists("Malwarebytes' Anti-Malware","")

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

    WinWaitActive("Malwarebytes' Anti-Malware","")
    $MbamInfo = ControlGetText("Malwarebytes' Anti-Malware", "", "[CLASS:Static; INSTANCE:2]")
    ControlClick("Malwarebytes' Anti-Malware", "", "[CLASS:Button; INSTANCE:1]")
    MsgBox(1, "Info", $MbamInfo, 10)
    Exit

    [/autoit]

    die Abbruchbdeingung für die Progressbarschleife habe ich verändert, da die Verbindung zum Server ja auch misslingen kann,

    mfg autoBert

  • Hallo, Ihr Lieben,
    und erneut danke, autoBert, allerdings funktioniert auch diese Version nicht korrekt, leider. Ist aber nicht tragisch, da ich meinen Fehler heute entdeckt habe - die Abfrage der ProgressBar ist mhmmm sagen wir mal freundlich nicht perfekt...... ;(
    Habe aber eine andere Version, die ich mittlerweile auf 3 PC getestet habe und die immer klappt - auch wenn die Abfrage-Bedingung nicht sonderlich elegant ist und vorsichtshalber per BlockInput abgesichert wird... ABER SIE FUNKTIONIERT (ganz stolz guckender Anfänger ^^ ), auch wenn es bestimmt noch schöner und effektiver ginge. Stelle deshalb Status auf gelöst, nicht ohne mich nochmals zu bedanken und ein riesiges Lob an das effektive Forum zu senden.
    Ach ja und hier noch das Script:

    Spoiler anzeigen
    [autoit]

    BlockInput(1)
    ;$Mbam = """M:\Program Files\Malwarebytes' Anti-Malware\mbam.exe"" /UPDATE"
    $Mbam = """C:\Programme\Malwarebytes' Anti-Malware\mbam.exe"" /UPDATE"

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

    $PID = ProcessExists("mbam.exe")
    If $PID Then ProcessClose($PID)
    Run($Mbam)
    WinWaitActive("Malwarebytes' Anti-Malware Aktualisierung", "")

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

    Do
    Until WinWaitNotActive("Malwarebytes' Anti-Malware Aktualisierung", "");
    sleep(3000)

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

    $MbamInfo = ControlGetText("Malwarebytes' Anti-Malware", "", "[CLASS:Static; INSTANCE:2]")
    ControlClick("Malwarebytes' Anti-Malware", "", "[CLASS:Button; INSTANCE:1]")
    BlockInput(0)
    MsgBox(1, "MyInfo", $MbamInfo, 10)
    Exit

    [/autoit]


    Also, danke nochmals, allen ein schönes WE und GLG
    Manne363