Fenster / PopUp schliessen?

  • Hallo Leute,

    ich suche seit gestern eine Möglichkeit ein Fenster/PopUp zu schliessen was nach einem Programmstart angezeigt wird und ziemlich nervend ist. Schnell bin ich dabei auf AutoIt gestossen ;) dazu noch diesen >>>BEITRAG<<< und los gings :D . Das funktionierte erstmal recht gut, nun hab ich aber Blut geleckt und würde das noch ein bißchen erweitern.

    Problem ist, dass das PopUp wieder erscheint sobald die Sprache des Programms geändert wird. In Englisch heisst dieses Fenster dann Internet connection usw. Wollte gern wissen, ob es möglich ist sich auf eine andere Stelle zu konzentrieren, die bei dem PopUp immer vorhanden ist? Auch ein Hidden Text ist in dem Fenster vorhanden (siehe Bild). Vielleicht kann man das ja irgendwie aktivieren um die Meldung Programmmäßig zu deaktivieren? Das ist Ausgabe von AutoIt Window Info.

    Wenn das mit dem Hidden Text nicht geht, ist es auch nicht schlimm, gibt doch dann bestimmt einen anderen Weg, oder?
    Dank euch schonmal im Voraus :thumbup:

  • Hab es mal so probiert, scheint zu klappen... :D

    [autoit]


    Opt("WinTitleMatchMode",4)
    While 1
    If WinActive("[CLASS:#32770]", "") Then
    WinClose("[CLASS:#32770]", "")
    ExitLoop
    EndIf
    WEnd
    Exit

    [/autoit]


    Jetzt möchte ich noch das Programm starten. Lt. MyProg.lnk auf dem Desktop wird es mit einem Parameter gestartet -> MyProg.exe "myprog.ini" Hatte jetzt mal geschaut und würde es so machen...

    [autoit]


    ShellExecute( "MyProg.exe", "myprog.ini", "@ScriptDir")
    ; die MyProg.exe und myprog.ini liegen hier zusammen mit dem Script in einem Verzeichnis

    [/autoit]

    Bitte berichtigt mich wenn Ihr irgendwelche Fehler seht, Danke!

  • Das ist so nicht ganz funktionell:
    ShellExecute("MyProg.exe","myprog.ini","@ScriptDir")
    Das "@ScriptDir" muss zu @ScriptDir werden, da es sich hier um ein Macro handelt.
    Dann gibt es noch das Problem, dass für die Lauffähigkeit des Scriptes die Datei und MyProg.exe im selben Verzeichnis liegen müssen.

    Davon abgesehen ist alles korrekt. ;)

    lg chess

  • Dann gibt es noch das Problem, dass für die Lauffähigkeit des Scriptes die Datei und MyProg.exe im selben Verzeichnis liegen müssen.


    Ich sag mal, dass ist erstmal so ^ ^ beabsichtigt, da es ja X beliebig viele Möglichkeiten gibt wo das Programm stecken kann (auf C: D: ... viele Unterordner usw.). Wie man da jetzt effektiv nach Sucht weis ich (noch) nicht. Hab es noch etwas erweitert (und geändert-danke für den Hinweis)...

    [autoit]


    If FileExists(@ScriptDir & "\myprog.exe") Then
    ShellExecute(@ScriptDir & "\myprog.exe", @ScriptDir & "\myprog.ini")
    Opt("WinTitleMatchMode",4)
    While 1
    If WinActive("[CLASS:#32770]", "") Then
    WinClose("[CLASS:#32770]", "")
    ExitLoop
    EndIf
    WEnd
    Else
    If not FileExists(@ScriptDir & "\myprog.exe") Then
    MsgBox(48,"Fehler","Datei nicht gefunden.")
    EndIf
    EndIf
    Exit

    [/autoit]
  • Habe jetzt noch etwas gefunden was ich gern mit einbauen würde. Es ist auch ein Fenster was wenn es erscheint mit einem Buttonclick bestätigt werden müsste. Die Werte von dem Button sind folgende.

    Spoiler anzeigen


    >>>> Control <<<<
    Class: Button
    Instance: 1
    ClassnameNN: Button1
    Name:
    Advanced (Class): [CLASS:Button; INSTANCE:1]
    ID: 1
    Text: &JA
    Position: 9, 84
    Size: 210, 26
    ControlClick Coords: 79, 13
    Style: 0x5001000B
    ExStyle: 0x00000004
    Handle: 0x0032027A

    Dachte dann an...

    [autoit]


    If WinExists("[CLASS:#32770]", "") Then
    ControlClick("[CLASS:#32770]", "[CLASS:Button; INSTANCE:1]", "")

    [/autoit]


    ... irgendwo zw. While1 und WEnd, aber irgendwie funkts nicht so recht ?(

  • Hab mal ein bischen gelesen und probiert, aber es will einfach nicht lüppen, dass 2te. Fenster (wenn es existiert) zu bestätigen... :(

    Spoiler anzeigen


    Bei dem hier macht er weder das eine zu noch bestätigt er das andere.

    [autoit]


    If FileExists(@ScriptDir & "\myprog.exe") Then
    ShellExecute(@ScriptDir & "\myprog.exe", @ScriptDir & "\myprog.ini")
    Opt("WinTitleMatchMode",4)
    While 1
    If WinActive("[CLASS:#32770]", "") Then
    WinClose("[CLASS:#32770]","")
    EndIf
    If WinExists("[CLASS:#32770]", "") or WinActive("[CLASS:#32770]", "") Then
    ControlClick("[CLASS:#32770]", "[CLASS:Button; INSTANCE:1]", "")
    EndIf
    ExitLoop
    WEnd
    Else
    If not FileExists(@ScriptDir & "\myprog.exe") Then
    MsgBox(48,"Fehler","Datei nicht gefunden.")
    EndIf
    EndIf
    Exit

    [/autoit]


    Hab es auch schon mit Mouseclick("left") anstatt ControlClick probiert, ging aber auch nicht. Hat einer von euch noch ne Idee?

  • [autoit]


    While 1

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

    If WinActive("[CLASS:#32770]", "") Then
    WinClose("[CLASS:#32770]","")
    EndIf

    If WinExists("[CLASS:#32770]", "") or WinActive("[CLASS:#32770]", "") Then
    ControlClick("[CLASS:#32770]", "[CLASS:Button; INSTANCE:1]", "")
    EndIf

    ExitLoop ; <------ huch das gehört hier sicher nicht hin...

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

    WEnd

    [/autoit]


    Kann so ja auch nicht funktionieren... du verlässt deine Schleife ja bereits nach dem 1. Durchlauf mit dem exitloop. Da wohl kaum beide Fenster sofort nach Programmstart aufpoppen wirste das exitloop wohl sinnvollerweise in die if Bedingung zum letzten erscheinenden Fenster packen müssen.

  • Stimmt nach dem Programmstart geht erst das Eine auf (und bleibt es auch bis bestätigt/geschlossen wird) und dann das andere bis es bestätigt oder verweigert wird. Ich habe jetzt schon diverse Sachen probiert mit Teilen aus Scripten die ich im Netz gefunden habe, aber ich komme keinen Schritt voran.

    • Offizieller Beitrag

    Du solltest bei einem Fenster dieser Klasse zwingend auf weitere Erkennungsmerkmale prüfen. Denn "[CLASS:#32770]" ist eine Fensterklasse, die nicht spezifisch für dein Programm ist. Dialogboxen sind meist in dieser Fensterklasse und mit (?) VC, VB (?) erstellte Fenster wohl auch. ;)
    Du könntest z.B. über den Prozeß, der das Fenster generiert, den Fenstertitel abfragen. Bemühe mal die Suche im Forum. Dazu wurden schon Skripte gepostet.

  • BugFix
    Das mit der Fensterklasse hattest du ja hier schonmal verlinkt (hatte ich beim Suchen gefunden ;)).
    Mit dem Fenstertitel ist so ne Sache, wollte es ja eher "Multilingual" halten, weil sich beim Sprache ändern ja auch der Titel ändert. Wie krieg ich das mit dem Prozess raus? Gehn evtl. auch andere Werte wie z.B. die Fenstergröße? Weis aber immer noch nicht wohin mit dem Exitloop? Ohne ist der Rechner auf "LSD" und ausserhalb gehts nicht.

    PS: woher denn aus S-A? Grüsse aus dem SLK ;)

  • So konnte ich den Button in der DialogBox nu doch noch auslösen... :D

    [autoit]


    If WinWaitActive("[CLASS:#32770]", "") Then
    ControlClick("","","[CLASS:Button; INSTANCE:1]", "left", 1)

    [/autoit]


    Nach dem Button^ ^ kommen erneut 2 DialogBoxen auf denen man nichts machen kann. In der ersten werden Dateien entpackt und in der Zweiten wird ein Update durchgeführt. Das Update geht über den ganzen Bildschirm und kann auch nicht gestoppt werden. Muss ich die dann im Script erwähnen und wenn ja wie?

    [autoit]


    If WinWaitActive("[CLASS:#32770]", "") Then
    ...???

    [/autoit]