msg bestätigen falls eine erscheint

  • Hallo,

    könntet ihr mir bitte einen Tipp geben, wie man eine msg-box bestätigt, für den Fall, dass sie erscheint?
    Konkret:
    Ich will eine Outlook Exchange synchronisierung automatisieren, was ich soweit auch halbwegs hinbekommen habe.
    Danach soll Outlook geschlossen werden. Manchmal erscheint aber eine msg über Synchronisationsfehler, die man aber ignorieren kann. Die msg muss aber unbedingt bestätigt werden, da Outlook sonst nicht beendet werden kann.
    Wie kann ich das machen, dass die msg eben nur dann bestätigt wird, wenn sie auch erscheint???

    Spoiler anzeigen


    Run("c:\Program Files\Cisco Systems\VPN Client\ipsecdialer.exe")
    WinSetOnTop("VPN Client - Version 4.0.1 (Rel)","", 1) ;Fenster im Vordergrund ...
    WinActivate("VPN Client - Version 4.0.1 (Rel)","") ;Fenster aktivieren ...
    WinWaitActive("VPN Client - Version 4.0.1 (Rel)","") ;warte bis Fenster Active ...
    Send("{ENTER}")
    Sleep(20000)
    Send("password")
    Sleep(2000)
    Send("{ENTER}")
    Run("c:\Program Files\Microsoft Office\Office\outlook.exe")
    Sleep(5000)
    Send("!w")
    WinWaitActive("Inbox - Microsoft Outlook","")
    Sleep(2000)
    Send("{F9}")
    ;Sleep(300000)
    Sleep(30000)
    WinSetOnTop("VPN Client - Version 4.0.1 (Rel)","", 1)
    WinActivate("VPN Client - Version 4.0.1 (Rel)","")
    WinWaitActive("VPN Client - Version 4.0.1 (Rel)","")
    Sleep(2000)
    Send("!c")
    Send("d")
    Sleep(5000)
    WinClose("VPN Client - Version 4.0.1 (Rel)","")
    Sleep(2000)
    Run("c:\Program Files\Pivotal\Relation\relation.exe")
    Sleep(2000)
    Send("{ENTER}")
    WinSetOnTop("Relationship - Mobile SQL7","", 1)
    WinActivate("Relationship - Mobile SQL7","")
    ;Sleep(300000)
    Sleep(30000)
    WinClose("Relationship - Mobile SQL7","")
    If Not WinActive("Pivotal Relationship","") Then WinActivate("Pivotal Relationship","")
    Send("{ENTER}")
    WinWaitActive("Inbox - Microsoft Outlook","")
    ; Send("{ENTER}") Einfach auf gut Glück mal Enter senden funktioniert leider nicht...
    WinClose("Inbox - Microsoft Outlook","")


    Ersuche um Nachsicht und -hilfe...

  • Hi, also wenn das Standard Controls sind, erst einmal WinWait bzw. WinExists (Titel/Text auslesen mit AutoIt Window Info Tool), controls verfügen über eine ctrlID, diese mit ControlClick ansprechen - fertig!
    Beispiel:

    [autoit]

    Global Const $S_WINTITLE = "Microsoft Outlook"
    Global Const $S_WINTEXT = "Ich will weggemacht werden!"

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

    Global $i_clicked = 0
    Do
    If WinExists($S_WINTITLE, $S_WINTEXT) Then $i_clicked = ControlClick($S_WINTITLE, $S_WINTEXT, 2)
    Sleep(50)
    Until $i_clicked

    [/autoit]


    Musst Du halt modifizieren, je nach dem ob ganz klar ist, wann die MsgBox auftauchen kann! (Stichwort AdLib)

  • Danke, hab ich jetzt so geändert:

    [autoit]

    Global Const $S_WINTITLE = "Microsoft Outlook"
    Global Const $S_WINTEXT = "Errors in background "

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

    Global $i_clicked = 0
    Do
    If WinExists($S_WINTITLE, $S_WINTEXT) Then $i_clicked = ControlClick($S_WINTITLE, $S_WINTEXT, 2)
    Sleep(50)
    Until $i_clicked
    WinActivate("Inbox - Microsoft Outlook","")
    WinWaitActive("Inbox - Microsoft Outlook","")
    WinClose("Inbox - Microsoft Outlook","")

    [/autoit]


    Jetzt lässt sich Outlook zwar schließen, aber die msg wird offenbar nicht bestätigt, die bleibt bis zuletzt am Schirm.
    Muss denn bei Global Const $S_WINTEXT = "Errors in background " der vollständige Text der msg stehen, oder reicht der Anfang?
    Übrigens: die msg erscheint wenn, dann immer am Ende des Synchronsierens.

  • Das wird durch die AutoIt-Option WinTitleMatchMode definiert (Hilfe bemühen)! Du musst natürlich auch noch die ControlID bei ControlClick anpassen! Am Besten zum Testen zwischendurch mit MsgBoxen debuggen!