Kann Autoit mit Firefox kommunizieren?

  • Hi,

    ich arbeite zur zeit an einem shutdown tool mit verschiedenen heruterfahrkriterien
    eins davon sollte sein, wenn alle downloads in Firefox abgeschlossen sind

    ich hab mal bisschen rumgebastelt aber ich glaube der code ist viel zu primitiv und auch nicht gorillaproof, da man wissen muss wie das skript arbeitet um es nutzen zu können (und nicht unerwartete shutdowns zu gesicht bekommt^^)

    Spoiler anzeigen
    [autoit]

    while 1
    if NOT WinExists("Downloads") Then
    Sleep(2000)
    WinWait("Downloads")
    MsgBox(0,"","lol")
    Exit
    Endif
    WEnd

    [/autoit]

    kann ich irgendwie anders (also nicht über den fensternamen) prüfen, ob alle downloads fertig sind? weil meine methode wirft doch einige fehler auf

  • Spoiler anzeigen
    [autoit]

    while WinExists("Downloads")
    Sleep(2000)
    WEnd

    [/autoit]

    Aber du könntest auch den Firefoxprozess überprüfen.

  • Dann habt ihr die Information ob die Fenster oder Prozess existieren, aber mehr nicht ...

    Für FireFox-Automation gibts hier ein Unterforum.

    Und der passende Befehl, der die Anzahl der aktiven Downloads in FF ausliest, lautet:

    [autoit]

    $iAnzahl = _FFSetGet('Components.classes["@mozilla.org/download-manager;1"].getService(Components.interfaces.nsIDownloadManager).activeDownloadCount;')

    [/autoit]

    Viele Grüße
    Stilgar

  • wow =O
    das mit der firefox automation wusste ich noch gar nicht
    ein klasse ding!

    sowas hab ich gesucht
    ich hab das auch gleich mal ausprobiert und mit ne messagebox mit $iAnzahl ausgeben lassen, doch die msgbox ist leer
    ich hab dann auch noch bisschen gesucht und ein skript gefunden

    Spoiler anzeigen
    [autoit]

    #region Includes
    #include <ff.au3>
    #endregion Includes

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

    $Socket = _FFConnect()

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

    If $Socket > -1 Then
    _FFOpenURL($Socket,"chrome://mozapps/content/downloads/downloads.xul")

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

    ; Variable fuer Objekt "downloadView"
    _FFSetGet($Socket,'var FF_dV = content.document.getElementById("downloadView");')

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

    ; Anzahl der Downloads
    $iDownloads = _FFSetGet($Socket,'FF_dV.itemCount;')
    MsgBox(64,"Number of Downloads",$iDownloads)

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

    If $iDownloads > 0 Then
    ; Download ID des ersten Downloads
    $iDownloadID = _FFSetGet($Socket,'FF_dV.getItemAtIndex(0).getAttribute("dlid");')
    MsgBox(64,"Download-ID, first download",$iDownloadID)

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

    ; maxBytes des ersten Downloads
    $iDownloadBytes = _FFSetGet($Socket,'FF_dV.getItemAtIndex(0).getAttribute("maxBytes");')
    MsgBox(64,"maxBytes / size, first download",$iDownloadBytes)

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

    ; ersten Download weiterlaufen lassen
    ; https://developer.mozilla.org/en/NsIDownloadManager
    _FFSetGet($Socket,'Components.classes["@mozilla.org/download-manager;1"].getService(Components.interfaces.nsIDownloadManager).resumeDownload(' & $iDownloadID &');')
    EndIf
    EndIf

    [/autoit]

    mit dem vorgefertigten geht es leider auch nicht
    es erscheint gar kein fenster

    wenn ich das skript ausführe, hab ich firefox 3.0.7 offen und ein download läuft gerade
    was mach ich falsch?

  • Das Beispiel bezieht sich auf eine ältere Version der FF.au3.
    (sieht man auch anhand der Dokumentation :P )

    Hier die aktuelle Version des Beispiels:

    Spoiler anzeigen
    [autoit]

    #region Includes
    #include <ff.au3>
    #endregion Includes

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

    If _FFConnect() Then
    _FFOpenURL("chrome://mozapps/content/downloads/downloads.xul")

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

    ; Variable fuer Objekt "downloadView"
    _FFSetGet('FF_AutoItScript.obj = content.document.getElementById("downloadView");')

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

    ; Anzahl der Downloads
    $iDownloads = _FFSetGet('FF_AutoItScript.obj.itemCount;')
    MsgBox(64,"Number of Downloads",$iDownloads)

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

    If $iDownloads > 0 Then
    ; Download ID des ersten Downloads
    $iDownloadID = _FFSetGet('FF_AutoItScript.obj.getItemAtIndex(0).getAttribute("dlid");')
    MsgBox(64,"Download-ID, first download",$iDownloadID)

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

    ; maxBytes des ersten Downloads
    $iDownloadBytes = _FFSetGet('FF_AutoItScript.obj.getItemAtIndex(0).getAttribute("maxBytes");')
    MsgBox(64,"maxBytes / size, first download",$iDownloadBytes)

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

    ; ersten Download weiterlaufen lassen
    ; https://developer.mozilla.org/en/NsIDownloadManager
    _FFSetGet('Components.classes["@mozilla.org/download-manager;1"].getService(Components.interfaces.nsIDownloadManager).resumeDownload(' & $iDownloadID &');')
    EndIf
    EndIf

    [/autoit]

    Wenn man nur auf den nsIDownloadManager zugreift, muß man das Download-Fenster nicht offen haben.

    Grüße
    Stilgar

  • der neue code funktioniert aber leider auch nicht =(
    nichts erscheint
    ich hab auch mozrepl installiert

  • So gehts wieder:

    Spoiler anzeigen
    [autoit]

    #Region Includes
    #include <ff.au3>
    #EndRegion Includes

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

    If _FFConnect() Then
    _FFOpenURL("chrome://mozapps/content/downloads/downloads.xul")

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

    _FFSetGet('FF_AutoItScript.obj = content.wrappedJSObject.document.getElementById("downloadView");')

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

    If _FFSetGet('FF_AutoItScript.obj.itemCount;') > 0 Then

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

    ; Download ID des ersten Downloads
    $iDownloadID = _FFSetGet('FF_AutoItScript.obj.getItemAtIndex(0).getAttribute("dlid");')
    MsgBox(64, "Download-ID, first download", $iDownloadID)

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

    ; maxBytes des ersten Downloads
    $iDownloadBytes = _FFSetGet('FF_AutoItScript.obj.getItemAtIndex(0).getAttribute("maxBytes");')
    MsgBox(64, "maxBytes / size, first download", $iDownloadBytes)

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

    ; ersten Download weiterlaufen lassen
    ; https://developer.mozilla.org/en/NsIDownloadManager
    _FFSetGet('Components.classes["@mozilla.org/download-manager;1"].getService(Components.interfaces.nsIDownloadManager).resumeDownload(' & $iDownloadID & ');')
    EndIf
    EndIf

    [/autoit]
  • ?(
    ich glaub ich stell mich total blöd an
    =(
    ich hab das skript genau so rauskopiert
    das skript läuft aber erst nach 2 minuten kommt eine melung in der wieder nichts steht
    ein download ist aber schon die ganze zeit aktuv :S

  • ja ist an
    ich hab mal mit ein paar msgboxen gepsielt
    ins erste if geht er rein, in das zweite aber nicht mehr
    woran kann das liegen?

  • also das addon läuft, ich kann es stoppen
    ich sehe keine console

    wie ist es wenn ich die exe kompiliere und jemanden schicken möchte? braucht er dann auch dieses addon?

  • Ich habe vergessen daß der "Output" in SciTE nicht "Console" heißt, ich habe das Ding bestimmt schon zwei Jahre nicht mehr aufgehabt :D

    Es heißt ja auch ConsoleWrite und rauskommen tuts im Output :P

    Einmal editiert, zuletzt von Stilgar (26. März 2009 um 16:45)