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

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...

  • @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

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...

  • 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.