Firefox starten, falls er nicht bereits läuft

  • Hallo,

    ich möchte gern Folgendes machen: Wenn Firefox bereits läuft, soll damit connected werden. Dann soll ein neuer Tab erstellt werden. Wenn Firefox noch nicht läuft, soll er gestartet werden.
    Ich versuche nun dazu, den Rückgabewert von _FFConnect auszuwerten, was mir noch nicht gelingt.

    [autoit]

    #include <FF.au3>

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

    Global $verb

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

    $verb = _FFconnect(Default, Default, 3000)
    If $verb = 0 Then
    _FFStart("about.blank", Default, 2, True)
    ElseIf $verb = 1 Then
    _FFTabAdd("about.blank", True)
    Else
    MsgBox(1, "Info", "FF nicht gestartet", 2)
    EndIf

    [/autoit]


    Falls Firefox noch nicht läuft, wird er auch brav gestartet.
    Falls Firefox jedoch bereits läuft, bleibt das Script im Systray stehen und läuft nicht weiter.

    Wo habe ich jetzt den Knoten? Was mach ich da falsch?

    Gruß
    Lisa

    Einmal editiert, zuletzt von Lisa (6. April 2010 um 20:01)

  • warum so kompliziert?

    [autoit]

    If ProcessExists("firefox.exe") Then
    ShellExecute("Firefox.exe","-new-tab http://www.test.de")
    Else
    ShellExecute("Firefox.exe","-new-window http://www.test.de")
    EndIf

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • @Lev,

    da magst Du Recht haben, aber für die Problemstellung ist das eine gehbare Lösung.
    Ich weiß ja nicht, warum Sie die FF.au3 einsetzen will....

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Einfach so?

    [autoit]


    #include <FF.au3>
    _FFStart(Default,Default,2); 2 = Versuchen mit laufendem Prozess zu verbinden, wenn dies fehlschlägt, wird ein neuer Prozess gestartet
    If _FFIsConnected() Then
    _FFTabAdd("heise.de");True ist der Defaultwert und muss daher nicht angegeben werden
    Else ; Sonst... (Fehlermeldung!)
    MsgBox(64, "Ein Fehler ist aufgetreten", "Eine Verbindung mit dem Mozilla FireFox war nicht möglich!")
    EndIf

    [/autoit]
  • Hallo,

    Schnuffel:
    Interessant, das kannte ich noch gar nicht. Muss ich mal probieren, ob mir das was bringt.

    @Seldzar:
    Ja, genau, soweit bin ich schon gekommen. Der dritte Parameter auf 2 "erwzingt" den Start, wenn kein offener da ist.

    Ich hab dummerweise nicht geschrieben, warum ich das so nicht benutzen kann: Ich möchte gerne wissen, ob das Script FF geöffnet hat oder ob er vorher schon offen war. Deswegen mein Versuch, einen Rückgabewert von _FFConnect zu bekommen. Der Sinn soll sein, dass das Script am Schluss entweder den Tab schließt (und FF offen lässt) oder eben FF komplett schließt. Dazu brauch ich eben die Information.

    Mir ist da inzwischen noch was eingefallen, probier ich erstmal und melde mich dann nochmal (muss bloß dummerweise zwischendurch noch ein bisschen arbeiten ;)).

    Bis später,
    Lisa

  • Hallo,

    so, jetzt hab ich es nochmals in Ruhe probiert. Und siehe da, meine allererste Schleife oben funktioniert doch. Da hatte ich mich wohl gestern nacht schon zu sehr verrannt, hatte vorher mit nicht sichtbaren Instanzen herumprobiert, und da muss noch eine im Speicher gewesen sein, die ich übersehen habe. [Blockierte Grafik: http://www.sbrichter.de/smileys/stirnklatsch.gif]
    Jedenfalls läuft die Schleife jetzt.

    [autoit]

    #include <FF.au3>

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

    Global $verb

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

    $verb = _FFconnect(Default, Default, 3000)
    If $verb = 0 Then
    _FFStart("about.blank", Default, 2, True)
    ElseIf $verb = 1 Then
    _FFTabAdd("about.blank", True)
    Else
    MsgBox(1, "Info", "FF nicht gestartet", 2)
    EndIf

    [/autoit]

    Und der Sinn ist natürlich, dass nach dies und das gemacht wird. Am Schluss des Skripts kann dann sauber beendet werden, indem die Variable $verb abgefragt wird. War Firefox am Anfang offen, wird nur der Tab geschlossen. War FF am Anfang nicht offen, wird er geschlossen, also so:

    [autoit]

    If $verb = 0 Then
    _FFQuit()
    ElseIf $verb = 1 Then
    _FFTabClose()
    _FFDisConnect()
    EndIf

    [/autoit]


    Solange man nur mit sichtbaren Instanzen arbeitet, funktioniert es sehr gut.
    Danke, dass Ihr mir auf die Sprünge geholfen habt.

    Gruß
    Lisa

    P.S. Ich würde das Thema ja auf "closed" setzen, finde aber das Knöpfchen nicht. OK, hab's gefunden, ist nur im ersten Beitrag.