Script anhalten, bis eine MsgBox existiert

  • Hi,

    ich würde gern die MsgBox solange anzeigen lassen, bis ein neues Fenster oder ein neuer Prozess existiert:

    Code
    $1 = ProcessExists ( "iexplore.exe" ) 
    MsgBox ( 0, "Test", "Das Fenster soll geöffnet bleiben, bis iexplore.exe existiert", $1 )

    So funktioniert das leider nicht. Hab auch mit Do..Until experimentiert funktioniert auch nicht. Wenn ich SplashTextOn verwende, geht das Fenster immerwieder ganz schnell auf und zu. Zum Hintergrund: Ich habe ein Programm automatisiert und bis sich die 145 MB in den Temp-Ordner kopiert haben, vergeht eine gewisse Zeit, das heißt das Script steht solange still. Deswegen möchte ich in der Zeit ein Fenster anzeigen lassen, dass gerade die Dateien kopiert werden. Bei jedem PC dauerd das ja unterschiedliche lange, deswegen "WinExists" (Setupfenster). Bis die Dateien eben kopiert sind, bleibt das Script stehen und man könnte meinen es hat sich aufgehängt. Da eine Progressbar zu kompliziert ist wollte ich nur ein Fenster solange anzeigen lassen, bis die Dateien fertig kopiert sind und das Setupfenster öffnet.

    Desweiteren wollte ich fragen wie ich ein Programmauswahlmenü erstelle, indem sich Programme, die isntalliert werden sollen anhacken lassen. Die Programme, die angehackt wurden sollten dann nach der Reihe installiert werden. Dass nach einem fertigen Setup der nächste gestartet wird, das bekomme ich denke ich hin, nur nicht wie ich ein Auswahlmenü erstelle.

    Danke,
    Gruß MasterPhil

  • Schau dir mal diese zwei Befehle an:

    [autoit]

    SplashTextOn
    SplashOff

    [/autoit]

    Mach dann einfach SplashTextOn vor dem beginn des Kopierens und SplashTextOff nach WinExist.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Danke, gute Idee!

    Hab nochmal hiermit herumexperimentiert, bekomme aber folgende Fehlermeldung: Do Statement has no matching Until Statement.

    Ich will allso die dass das ganze solange angezeigt wird, bis der process existiert. Warum zeigt er mir dann an no matchin until statement?

  • Wie wäre es so?

    Spoiler anzeigen
    [autoit]

    #Include <WinAPI.au3>
    #include <Constants.au3>

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

    _ProcessWaitProgress("iexplore.exe")

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

    Func _ProcessWaitProgress($sProcess)
    Local Const $WM_USER = 0x0400
    Local Const $PBM_SETMARQUEE = ($WM_USER + 10)
    Local Const $PBS_MARQUEE = 0x8
    ProgressOn("Warten auf Prozess", "Warten bis " & $sProcess & " existiert")
    Local $hWnd = WinWait("Warten auf Prozess")
    Local $hProgress = ControlGetHandle($hWnd, "", "msctls_progress321")
    _WinAPI_SetWindowLong($hProgress, $GWL_STYLE, BitOR(_WinAPI_GetWindowLong($hProgress, $GWL_STYLE), $PBS_MARQUEE))
    _SendMessage($hProgress, $PBM_SETMARQUEE, 1, 0)
    Do
    Sleep(10)
    Until ProcessExists($sProcess)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • So funktioniert es super, aber sobald ich versuche, das in ein Script einzubauen, bekomm ich Fehlermeldungen wie: "If" statement has no matching "EndIf" statement.:
    Func _WinAPI_GetLastError($curErr=@error, $curExt=@extended)
    oder
    "If" statement has no matching "EndIf" statement.:
    Func _WinWaitProgress($sWinWait)

    Ich will nur so eine ProgressBar, die solange angezeigt wird, bis die Dateien in Temp kopiert sind.

    Spoiler anzeigen
    [autoit]

    #RequireAdmin

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

    ;Falls der Systemtyp 64-Bit ist, wird überprüft, ob MSE bereits installiert ist

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

    BlockInput ( 1 )
    If @OSArch = "X64" Then
    If ProcessExists ( "msseces.exe" ) Then
    BlockInput ( 0 )
    MsgBox ( 0, "Microsoft Security Essentials", "Microsoft Security Essentials (x64) ist bereits installiert.", 5 )
    Exit
    EndIf
    EndIf

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

    ;Falls der Systemtyp 64-Bit ist, wird MSE installiert (Einstellungen und Updates werden ausgeführt)

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

    If @OSArch = "X64" Then
    FileInstall ( "mseinstall-x64.exe", @Tempdir & "\mseinstall-x64.exe" )
    FileInstall ( "mseinstall-x86.exe", @Tempdir & "\mseinstall-x86.exe" )
    FileInstall ( "mpam-fe.exe", @TempDir & "\mpam-fe.exe" )
    FileInstall ( "mpam-fex64.exe", @TempDir & "\mpam-fex64.exe" )
    FileInstall ( "nis_full-x64.exe", @TempDir & "\nis_full-x64.exe" )
    FileInstall ( "nis_full-x86.exe", @TempDir & "\nis_full-x86.exe" )
    BlockInput ( 0 )
    ShellExecute ( @Tempdir & "\mseinstall-x64.exe" )

    #include <WinAPI.au3>
    #include <Constants.au3>
    _WinWaitProgress("Microsoft Security Essentials")
    Func _WinWaitProgress($sWinWait)
    Local Const $WM_USER = 0x0400
    Local Const $PBM_SETMARQUEE = ($WM_USER + 10)
    Local Const $PBS_MARQUEE = 0x8
    ProgressOn("Kopieren...", "Warten bis " & $sWinWait & " bereit ist.")
    Local $hWnd = WinWait("Warten auf Prozess")
    Local $hProgress = ControlGetHandle($hWnd, "", "msctls_progress321")
    _WinAPI_SetWindowLong($hProgress, $GWL_STYLE, BitOR(_WinAPI_GetWindowLong($hProgress, $GWL_STYLE), $PBS_MARQUEE))
    _SendMessage($hProgress, $PBM_SETMARQUEE, 1, 0)
    Do
    Sleep(10)
    Until WinExists($sWinWait)
    EndFunc

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

    ControlClick ( "Microsoft Security Essentials", "Weiter >", "Button1" )
    WinWait ( "Microsoft Security Essentials", "Ich stimme zu" )
    ControlClick ( "Microsoft Security Essentials", "Ich stimme zu", "Button1" )
    WinWait ( "Microsoft Security Essentials", "Ich &möchte zurzeit nicht am Programm teilnehmen" )
    ControlCLick ( "Microsoft Security Essentials", "Ich &möchte zurzeit nicht am Programm teilnehmen", "Button2" )
    ControlClick ( "Microsoft Security Essentials", "Weiter >", "Button4" )
    WinWait ( "Microsoft Security Essentials", "Sicherheit optimieren" )
    ControlClick ( "Microsoft Security Essentials", "Weiter >", "Button2" )
    WinWait ( "Microsoft Security Essentials", "Bereit zum Installieren von Microsoft Security Essentials" )
    ControlClick ( "Microsoft Security Essentials", "Installieren >", "Button1" )
    WinWait ( "Microsoft Security Essentials", "Fertig stellen" )
    ControlClick ( "Microsoft Security Essentials", "Neueste Updates abrufen und Computer nach potenziellen Bedrohungen scannen.", "Button2" )
    ControlClick ( "Microsoft Security Essentials", "Fertig stellen", "Button1" )
    WinWait ( "Microsoft Security Essentials", "&Aktualisierung abbrechen" )
    ControlClick ( "Microsoft Security Essentials", "&Aktualisierung abbrechen", 206 )
    WinWait ( "Microsoft Security Essentials", "&Aktualisieren" )
    ShellExecute ( @TempDir & "\mpam-fex64.exe" )
    WinWaitNotActive ( "Extracting Files" )
    WinWait ( "Microsoft Security Essentials", "Computerstatus - Geschützt" )
    ShellExecute ( @TempDir & "\nis_full-x64.exe" )
    WinWaitNotActive ( "Extracting Files" )
    ControlClick ( "Microsoft Security Essentials", "Aktualisieren", "[CLASS:ATL:BUTTON; INSTANCE:2]" )
    WinWait ( "Microsoft Security Essentials", "&Aktualisieren" )
    ControlClick ( "Microsoft Security Essentials", "&Aktualisieren", "[CLASS:ATL:BUTTON; INSTANCE:12]" )
    WinWait ( "Microsoft Security Essentials", "Aktuell" )
    Send ( "!{F4}" )
    Sleep ( 3000 )
    If ProcessExists ( "opera.exe" ) Then
    ProcessClose ( "opera.exe" )
    EndIf
    If ProcessExists ( "iexplore.exe" ) Then
    ProcessClose ( "iexplore.exe" )
    EndIf
    If ProcessExists ( "firefox.exe" ) Then
    ProcessClose ( "firefox.exe" )
    EndIf
    If ProcessExists ( "chrome.exe" ) Then
    ProcessClose ( "chrome.exe" )
    EndIf
    If ProcessExists ( "safari.exe" ) Then
    ProcessClose ( "safari.exe" )
    EndIf
    BlockInput ( 0 )
    MsgBox ( 0, "Microsoft Security Essentials", "Microsoft Security Essentials (x64) wurde erfolgreich installiert.", 5 )
    FileDelete ( @Tempdir & "\mseinstall-x64.exe" )
    FileDelete ( @Tempdir & "\mseinstall-x86.exe" )
    FileDelete ( @TempDir & "\mpam-fe.exe" )
    FileDelete ( @TempDir & "\mpam-fex64.exe" )
    FileDelete ( @TempDir & "\nis_full-x64.exe" )
    FileDelete ( @TempDir & "\nis_full-x86.exe" )
    EndIf

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

    ;Falls der Systemtyp 32-Bit ist, wird überprüft, ob MSE bereits installiert ist

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

    BlockInput ( 1 )
    If @OSArch = "X86" Then
    If ProcessExists ( "msseces.exe" ) Then
    BlockInput ( 0 )
    MsgBox ( 0, "Microsoft Security Essentials", "Microsoft Security Essentials (x86) ist bereits installiert.", 5 )
    Exit
    EndIf
    EndIf

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

    ;Falls der Systemtyp 32-Bit ist, wird MSE installiert (Einstellungen und Updates werden ausgeführt)

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

    If @OSArch = "X86" Then
    FileInstall ( "mseinstall-x64.exe", @Tempdir & "\mseinstall-x64.exe" )
    FileInstall ( "mseinstall-x86.exe", @Tempdir & "\mseinstall-x86.exe" )
    FileInstall ( "mpam-fe.exe", @TempDir & "\mpam-fe.exe" )
    FileInstall ( "mpam-fex64.exe", @TempDir & "\mpam-fex64.exe" )
    FileInstall ( "nis_full-x64.exe", @TempDir & "\nis_full-x64.exe" )
    FileInstall ( "nis_full-x86.exe", @TempDir & "\nis_full-x86.exe" )
    BlockInput ( 1 )
    ShellExecute ( @Tempdir & "\mseinstall-x86.exe" )
    WinWait ( "Microsoft Security Essentials" )
    ControlClick ( "Microsoft Security Essentials", "Weiter >", "Button1" )
    WinWait ( "Microsoft Security Essentials", "Ich stimme zu" )
    ControlClick ( "Microsoft Security Essentials", "Ich stimme zu", "Button1" )
    WinWait ( "Microsoft Security Essentials", "Ich &möchte zurzeit nicht am Programm teilnehmen" )
    ControlCLick ( "Microsoft Security Essentials", "Ich &möchte zurzeit nicht am Programm teilnehmen", "Button2" )
    ControlClick ( "Microsoft Security Essentials", "Weiter >", "Button4" )
    WinWait ( "Microsoft Security Essentials", "Sicherheit optimieren" )
    ControlClick ( "Microsoft Security Essentials", "Weiter >", "Button2" )
    WinWait ( "Microsoft Security Essentials", "Bereit zum Installieren von Microsoft Security Essentials" )
    ControlClick ( "Microsoft Security Essentials", "Installieren >", "Button1" )
    WinWait ( "Microsoft Security Essentials", "Fertig stellen" )
    ControlClick ( "Microsoft Security Essentials", "Neueste Updates abrufen und Computer nach potenziellen Bedrohungen scannen.", "Button2" )
    ControlClick ( "Microsoft Security Essentials", "Fertig stellen", "Button1" )
    WinWait ( "Microsoft Security Essentials", "&Aktualisierung abbrechen" )
    ControlClick ( "Microsoft Security Essentials", "&Aktualisierung abbrechen", 206 )
    WinWait ( "Microsoft Security Essentials", "&Aktualisieren" )
    ShellExecute ( @TempDir & "\mpam-fe.exe" )
    WinWaitNotActive ( "Extracting Files" )
    WinWait ( "Microsoft Security Essentials", "Computerstatus - Geschützt" )
    ShellExecute ( @TempDir & "\nis_full-x86.exe" )
    WinWaitNotActive ( "Extracting Files" )
    ControlClick ( "Microsoft Security Essentials", "Aktualisieren", "[CLASS:ATL:BUTTON; INSTANCE:2]" )
    WinWait ( "Microsoft Security Essentials", "&Aktualisieren" )
    ControlClick ( "Microsoft Security Essentials", "&Aktualisieren", "[CLASS:ATL:BUTTON; INSTANCE:12]" )
    WinWait ( "Microsoft Security Essentials", "Aktuell" )
    Send ( "!{F4}" )
    Sleep ( 3000 )
    If ProcessExists ( "opera.exe" ) Then
    ProcessClose ( "opera.exe" )
    EndIf
    If ProcessExists ( "iexplore.exe" ) Then
    ProcessClose ( "iexplore.exe" )
    EndIf
    If ProcessExists ( "firefox.exe" ) Then
    ProcessClose ( "firefox.exe" )
    EndIf
    If ProcessExists ( "chrome.exe" ) Then
    ProcessClose ( "chrome.exe" )
    EndIf
    If ProcessExists ( "safari.exe" ) Then
    ProcessClose ( "safari.exe" )
    EndIf
    BlockInput ( 0 )
    MsgBox ( 0, "Microsoft Security Essentials", "Microsoft Security Essentials (x86) wurde erfolgreich installiert.", 5 )
    FileDelete ( @Tempdir & "\mseinstall-x64.exe" )
    FileDelete ( @Tempdir & "\mseinstall-x86.exe" )
    FileDelete ( @TempDir & "\mpam-fe.exe" )
    FileDelete ( @TempDir & "\mpam-fex64.exe" )
    FileDelete ( @TempDir & "\nis_full-x64.exe" )
    FileDelete ( @TempDir & "\nis_full-x86.exe" )
    EndIf

    [/autoit]
  • Ich würde da einen SplashText nehmen. Gebe es doch mal in der Hilfe ein...
    Eine MsgBox anhalten lassen bis ein Fenster kommt ? Da habe ich keine Lösung, bei SplashText schon...
    LG Lukas