Aktion ausführen beim beenden eines Skriptes (FF.au3, MozRepl)

  • Hallo liebe Community,

    ich habe ein kleines Problem, dass in der Hilfe so nicht angesprochen wird (ich habe es zumindest nicht gefunden).
    Ich habe ein paar Skripte, die mit dem Firefox arbeiten sollen. Das machen sie auch im Großen und Ganzen.
    Nun kommt es sehr oft vor, wenn mehrere Skripte gleichzeitig laufen, das jedes Skript (wie es soll) eine neue Instanz des Firefox öffnet aber sich nicht immer mit MozRepl verbindet und wieder aus geht. Das Firefox Fenster aber offen lässt.
    Die Programme haben keine GUI sondern nur das übliche Trayicon.

    Nun möchte ich, wenn sich das Programm (warum auch immer) beendet, den Firefox den es geöffnet hat mit schließt.
    Ich habe bei den Programmen an das Ende "_FFQuit()" gesetzt, das funktioniert aber auch nur, wenn das Script sich erfolgreich per MozRepl mit dem gestarteten Firefox verbinden konnte.

    Hat da einer von euch eine Idee, wie man AutoIt sagen kann, dass es den Firefox beim beenden des Skriptes schließen soll.
    Aber auch nur den einen den es geöffnet hat und nicht alle bzw. einen anderen.

    Vielen Dank für eure Hilfe :)


    Gruß
    Crusoe

    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte :P

    Einmal editiert, zuletzt von Crusoe (25. August 2011 um 00:27)

  • Ich würde da an deiner Stelle mit speraten portablen FF Instanzen arbeiten und dabei auch darauf achten, dass mehrere Instanzen erlaubt sind. Vorteile:

    - Du kannst jeder FF & Mozrepl Instanz eigene Ports zuweisen, was deine Verbindungsprobleme beheben sollte
    - Du hast seperate FF Prozesse die auch problemlos beendet werden können (normalerweis gibt es nur 1 FF Prozess mit mehreren Fenstern)
    - Du kannst Updates abstellen und zumindestens für deine vorkonfigurierten Script FF Instanzen darauf vertrauen, dass sie auch in Jahren noch kompatibel zum Script sind, was beim Haupt FF den du auch zum browsen verwendest nicht empfehlenswert ist


    Grundsätzlich kann man Fenster aber immer mit

    [autoit]

    winclose()

    [/autoit]

    schliessen. Dafür benötigst du aber einen eindeutigen Fenstertitel.

  • Hallo misterspeed,

    danke für die schnelle Antwort.

    Damit ich jeder Instanz einen seperaten Port zuweisen kann, muss ich dann x verschiedene mobile FF Versionen haben, damit ich bei jeder den MozRepl Port ändern kann. Oder geht das per script wenn ich dem sage, dass es eine neue Instanz starten soll?

    Dein Lösungsvorschlag erklärt nämlich auch, warum das unter Linux funktioniert hat (mit wine). Da wurden nämlich tatsächlich x Firefüchse geöffnet.
    Nun da ich auf Win7 32Bit umgestiegen bin, ist es nur eine Instanz und ich kann (dank variabler Fenster- und Tabnamen) das ganze nur schwer kontrollieren.

    Und wenn ich immer eine neue Instanz nutze (und die Verbindung mit MozRepl klappt), dann greift auch der "_FFQuit()" Befehl wieder.
    Aber vielleicht kannst du mir noch was zu der weiter oben erwähnten Portfrage sagen :)
    Irgendwie bin ich mit Google nicht schlau geworden, oder ich bin zu doof zum fragen... :P

    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte :P

  • Hallo,

    warum gibst Du nicht bei _FFStart unterschiedliche Portnummern an oder ist denn eine Kontrolle mit _FFWindowSelect bzw. _FFTabSelect möglich?

    Möglich wäre evtl auch eine Kontrolle über unterschiedliche Sockets (siehe _FFConnect und $_FF_GLOBAL_SOCKET) was aber nur innerhalb Programmes Sinn macht.

    Alternativ zu _FFQuit gibt es _FFWindowClose - das schließt nur das aktuelle Fenster.

    Grüße
    Stilgar

  • Hallo Stilgar,

    wenn das mit dem Portnummern beim Start funktioniert? Ich wusste nicht, dass man den Port beim start durch das AutoIt Script beeinflussen kann. Eine zuverlässige Kontrolle mit "_FFWindowSelect" und "_FFTabSelect" ist nicht möglich, man kann es rudimentär aber es funktioniert auf Dauer nicht, alles schon probiert.

    Wenn "_FFWindowClose" gewährleistet, dass auch nur das Fenster geschlossen wird, welches durch das Skript geöffnet wurde, dann ist das kein Problem... Aber einige Probleme, sollten sich ja dirch die Nutzung unterschiedlicher Ports beheben lassen.
    Ich hoffe doch mal, dass AutoIt nicht über verschiedene Instanzen des FF funktioniert, da ja auch jede Instanz einen seperaten Port benutzt.

    Aber danke für die Tipps, ich werde sie beherzigen und in jedem Fall berichten. Ich komme aber erst im Laufe der Tage dazu eure Ratschläge und Hilfestellungen umzusetzen.

    Ich bin jedefalls erstmal dankbar, dass man überhaupt brauchbare Antworten bekommt. Und nicht mit "bei mir gehts" oder "benutzt Google" oder "lass es wenn du dich nicht damit auskennst" geantwortet wird...


    Gruß
    Crusoe

    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte :P

  • Damit ich jeder Instanz einen seperaten Port zuweisen kann, muss ich dann x verschiedene mobile FF Versionen haben, damit ich bei jeder den MozRepl Port ändern kann.

    Das war jedenfalls mein Gedanke. Also wirklich mehrere voneinander unabhängige portable ordner mit jeweils eigenem Mozrepl welche alle auf verschiedenen Ports lauschen.

    Der Vorschlag beruht aber auf der Annahme, dass grundsätzlich nur eine gleichzeitige Verbindung mit mozrepl hergestellt werden kann. Das habe ich jedenfalls aus deinen connection Probs geschlossen und auch selbst hatte ich das schonmal mit 2 instanzen meines Scriptes die zeitgleich auf Mozrepl zugreifen sollten. Wirklich ausgetestet habe ich das ganze aber nie, stattdessen habe ich dafür gesorgt, dass die eine Scriptinstanz wartet bis die andere fertig ist und FF beendet wurde.

    Theoretisch sollte es jedenfalls keine Komplikationen mehr geben wenn man mit zwei oder mehren unabhängigen FF Portables arbeitet.

    Ob es auch möglich ist einer einzigen FF/Mozrepl Instanz eine ganze Portrange zuzuweisen um multiple connects ohne Komplikationen zu ermöglichen weiß ich nicht, das wäre dann natürlich die schönere Variante.

    EDIT: Mehr als einen Port kann man offenbar nicht zuweisen, steht danach jedenfalls nur noch eine 0 im Feld...

    Einmal editiert, zuletzt von misterspeed (20. August 2011 um 22:30)

  • Hallo zusammen,

    habe es jetzt hinbekommen und wollte es veröffentlichen, falls jemand ein ähnliches Problem haben sollte...
    Danke an misterspeed für den Tipp mit den mehreren Instanzen, nur mit dem mobilen FF hat es nicht ganz geklappt, bzw. es war dann nicht mehr nötig.
    So habe ich es nun gelöst:

    [autoit]

    _FFStart("http://www.autohe.de/", "Gruppe1", 2+8, False, "127.0.0.1", 4243)

    [/autoit][autoit]

    _FFStart("http://www.autoshe.de/", "Gruppe2", 2+8, False, "127.0.0.1", 4244)

    [/autoit][autoit]

    _FFStart("http://www.autoit.de/", "Gruppe3", 2+8, False, "127.0.0.1", 4245)

    [/autoit]


    Jetzt können alle drei Firefüchse gleichzeitig laufen, pfuschen sich nicht gegenseitig dazwischen und ich kann mit dem Profil "default" unabhängig surfen, da dieses ja auf den standard MozRepl Port 4242 hört.
    Quasi habe ich jetzt vier Profile im Firefox und jedes hat das MozRepl AddOn bekommen, welches jeweils auf einem anderen Port lauscht und so völlig unabhängig gesteuert und mit "_FFQuit" geschlossen wird :thumbup:

    Ja ich weiß, für euch Experten kein Problem, aber für mich ist es eine kleine Revolution :P
    Also nochmal ein dickes Dankeschön an misterspeed und Stilgar :thumbup:


    Gruß
    Crusoe

    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte :P

  • Ahja, also wenn man multiple Profile verwendet hat jedes Profil eigene Addons? Das wusste ich nicht... dann werd ich das vllt bei mir auch mal so umstellen :)

    PS: Bei der Portable muss man zunächst noch eine ini ins richtige Verzeichnis kopieren in der multiple Instanzen erlaubt sind (siehe webseite von portableapps), ausserdem darf/kann die ffstart Funktion nicht benutzt werden, sondern der Start muss per run und anschliessendem _ffconnect erfolgen. Aber die Profillösung ist natürlich sowieso die bessere Variante.

  • Hallo misterspeed,

    eine kaputte Uhr geht eben auch zwei Mal am Tag richtig, was für ein Glück für mich :D
    Ja das wäre ja auch blöd, wenn jedes Profil sich die AddOns teilen müsste.
    Das wäre ja wie wenn ein Windows PC mit mehreren Konten nicht in Lage wäre, seinen Benutzern seperat Programme und Einstellungen anzubieten.
    Die Portable Version hat natürlich die von dir beschriebenen Vorteile und es hätte schon seinen Reiz, wenn ich das alles auf einen USB Stick packen könnte und dann an jedem beliebigen PC (Rechte vorrausgesetzt) ausführen könnte...
    Aber das ist mir im Moment zu viel Arbeit, da müsste ich jetzt fast 30 Programme umschreiben.
    Aktuell habe ich die ja auf die drei Profile verteilt und jedes Profil arbeitet diese gleichzeitig sequenziell ab.
    Ich bin total begeistert... Seit zwei Tagen kein einziger Fehler :D


    Gruß
    Crusoe

    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte :P