opendownloadfolderbutton - TotalCommander

  • Zitat von loshombre

    Also Hombres,
    (Vor lauter Scripte hab ich beinahe vergessen, wat für geile Sachen es mtw. in der Sammlung gibt!)


    Hallo,
    habe gerade mal das Script "opendownloadfolderbutton" installiert. Funktioniert auch bestens.
    Wenn man auf den Button klickt, wird über den "Explorer" der Ordner mit Inhalt angezeigt. So soll es wohl sein.

    Da der Explorer aber nicht zu meinem Lieblings-Dateimanager zählt - arbeite schon lange mit dem TotalCommander (von Ghisler),

    Daher meine Frage: lässt es sich bewerkstelligen, mit diesem Button statt dessen den TCommander zu öffnen? :-???

    (bin gelernter Betriebsschlosser, versuche auch die richtigen Schrauben zu verdrehen :) )

    Gruß,
    D. Büssen

    Firefox 126.0 + Nightly 128 (WIN 10 - 64 bit)

  • Das Script, so wie ich dat sehe, greift auf den Fuchs eigenen DM zu und auf dem Kram aus den "Einstellungen". Wenn du da also auf "Durchsuchen" gehst, müsste auch bei dir der Win Explorer aufgehen, weil das die Systembasis ist. Wenn dat so ist und ich hier nicht den kompletten Blödsinn schreibe, wird es mit dem TotalCommander wohl nix werden.

  • Ansonsten ist der Ansatz die Zeile 54. Dort wird anscheinend mittels folder.reveal(); der Dateimanager des Systems (unter WinXP finde ich auf die Schnelle keine Möglichkeit, das Standardprogramm für "Dateimanager zu setzen) gestartet.


    Aus "externalapplications" könnte man evtl. etwas klauen, sodass ein "file" (Pfad zum Totalcommander) initialisiert wird. Danach einen Process mit file initialisieren und anschließend starten, dabei den Downloadpfad als Argument übergeben. Grob also so etwas als Bastelvorlage (wird bestimmt nicht funktionieren):

    Code
    //folder.reveal();  - dies ist die erwähnte Zeile 54; als Orientierung habe ich die mal dringelassen, aber deaktiviert
    var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile);
    file.initWithPath('C:\\Programme\\totalcommander\\TOTALCMD.EXE');
    var process = Cc['@mozilla.org/process/util;1'].getService(Ci.nsIProcess);
    process.init(file);
    process.run(false, folder, 0);
  • Zitat von Mithrandir

    Ansonsten ist der Ansatz die Zeile 54. Dort wird anscheinend mittels folder.reveal(); der Dateimanager des Systems (unter WinXP finde ich auf die Schnelle keine Möglichkeit, das Standardprogramm für "Dateimanager zu setzen) gestartet.


    Hallo Mithrandir,
    der 1. Versuch hat gleich auf Anhieb geklappt, musste nur den Pfad C:\\Totalcmd\\Totalcmd.exe anpassen.
    Deinen Script habe ich in die Zeile 54 ff eingefügt. Danach Neustart (mit Cacheleerung), Aufruf "Download Ordner öffnen" - >>>>>> es öffnete sich tatsächlich der TotalCommander. :klasse:

    Nächster Versuch:
    [Blockierte Grafik: http://s14.directupload.net/images/111214/fyka7vow.jpg]

    Aber--- nachdem ich in meiner Not "Neustart mit Cacheleerung" betätigt habe, war im nächsten Versuch der TCommaner wieder voll da. Nur der 2. und fortlaufende Versuche erzeugen die o.g. Fehlermeldung.

    Das ist doch schon mal ein Teilerfolg! Vorerst vielen Dank für deine Mühe!

    Gruß,
    D. Büssen

    Firefox 126.0 + Nightly 128 (WIN 10 - 64 bit)

  • Öffnet der TotalCommander auch mit dem richtigen Verzeichnis? Falls nein, s. unten.

    Ich habe mal nach "NS_ERROR_ALREADY_INITIALIZED" gesucht. Ändere die "var process-Zeile" bitte mal von

    Code
    var process = Cc['@mozilla.org/process/util;1'].getService(Ci.nsIProcess);


    in:

    Code
    var process = Cc['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess);

    Gefunden unter http://forums.mozillazine.org/viewtopic.php?…989f01#p6968755


    Falls der Totalcommander nicht immer den Download-Ordner öffnet, sondern irgendeinen Ordner, ändere Zeile #44 von

    Code
    folder = pref.getComplexValue("browser.download.dir", Components.interfaces.nsILocalFile);


    in

    Code
    folder = pref.getCharPref("browser.download.dir", Components.interfaces.nsILocalFile);

    An anderer Stelle (s. "// Users are manually pointing out a directory to save to") steht auch noch einmal "getComplexValue" - das dann auch durch "getCharPref" ersetzen.

  • Zitat von Mithrandir

    Öffnet der TotalCommander auch mit dem richtigen Verzeichnis? Falls nein, s. unten.


    Hallo Mithrandir,
    der TC öffnet noch nicht mit dem richtigen Verzeichnis, aber nach Änderung mit deinen Vorschlägen öffnet er jetzt zumindest ohne Fehlermeldung! :klasse:

    Zitat

    An anderer Stelle (s. "// Users are manually pointing out a directory to save to") steht auch noch einmal "getComplexValue" - das dann auch durch "getCharPref" ersetzen.


    Habe ebenfalls die Zeile 49 wie vorgegeben abgeändert, vielleicht schaffen wir es auch noch mit dem richtigen "Ordner öffnen" ?

    In Zeile 49 stand: folder = pref.getCharPref("browser.download.lastdir", Components.interfaces.nsILocalFile); - habe "lastdir" in "dir" geändert?

    Der Pfad lautet bei mir: C:\Users\Dieter Buessen\Downloads\*.*

    Vielen Dank für deine Mühe! :)

    Gruß,
    D. Büssen

    Firefox 126.0 + Nightly 128 (WIN 10 - 64 bit)

  • Mache die Änderung von "lastdir in "dir" rückgängig. Zeile 49 also so:

    Code
    folder = pref.getCharPref("browser.download.lastDir", Components.interfaces.nsILocalFile);

    Wenn's dann immer noch nicht geht:
    Kontrolliere, welcher Wert in about:config bei "browser.download.useDownloadDir" steht. Danach "browser.download.folderList" kontrollieren - je nach Wert musst du bei den einzelnen case-Zweigen (in Zeile 30,35,42, bzw. else (vom if kommend) in 47, falls browser.download.useDownloadDir = False ist ) nachschauen, wie dort "folder" ermittelt wird. Lasse dir evtl. nach der Zuweisung von "folder" den Wert mittels

    Code
    alert("Ich bin in Zweig x: "+folder);


    anzeigen (das alert-Zeugs also unter anderem in Zeile 34 einfügen, das "break" danach in Zeile 35 ...). Für "x" setzt du etwas ein, mit dem du switch-Zweige unterscheiden kannst.

    Wenn's völlig nervt, setze folder hardcodiert ein. (iih)

  • Zitat von Mithrandir

    Mache die Änderung von "lastdir in "dir" rückgängig. Zeile 49 also so:

    Code
    folder = pref.getCharPref("browser.download.lastDir", Components.interfaces.nsILocalFile);


    Die Änderung habe ich erst gemacht, nachdem der Aufruf funktionierte, weil ich dachte, es müsse da auch nur "dir" stehen.

    Zitat

    Wenn's dann immer noch nicht geht:
    Kontrolliere, welcher Wert in about:config bei "browser.download.useDownloadDir" steht. Danach "browser.download.folderList" kontrollieren - je nach Wert musst du bei den einzelnen case-Zweigen


    Also, bei "browser.download.useDownloadDir" steht: boolean true
    bei "browser.download.folderList" steht: integer 1

    Zitat

    (in Zeile 30,35,42, bzw. else (vom if kommend) in 47, falls browser.download.useDownloadDir = False ist ) nachschauen, wie dort "folder" ermittelt wird. Lasse dir evtl. nach der Zuweisung von "folder" den Wert mittels

    Code
    alert("Ich bin in Zweig x: "+folder);


    anzeigen (das alert-Zeugs also unter anderem in Zeile 34 einfügen, das "break" danach in Zeile 35 ...). Für "x" setzt du etwas ein, mit dem du switch-Zweige unterscheiden kannst.

    Wenn's völlig nervt, setze folder hardcodiert ein. (iih)


    Damit komme ich erst mal nicht mit klar, bin noch "AZUBI", hänge dir mal meine "Scriptdatei" an.

  • Der Anhang [Edit]war eben[/Edit] nicht dabei. Ist aber auch nicht so schlimm. Du wirst somit im Zweig

    Code
    case 1: // the downloads folder
    					var dm = Components.classes["@mozilla.org/download-manager;1"]
    					   .getService(Components.interfaces.nsIDownloadManager);
    
    
    					folder = dm.userDownloadsDirectory;
    
    					break;

    landen. Ändere den mal in:

    Code
    case 1: // the downloads folder
    					var dm = Components.classes["@mozilla.org/download-manager;1"]
    					   .getService(Components.interfaces.nsIDownloadManager);
    
    
    					folder = dm.userDownloadsDirectory;
    					alert(folder);
    					break;

    (also alert vor das break). Wenn dann nach Neustart und erneutem Klick eine Msgbox kommt, habe ich richtig gelegen. In der Msgbox sollte der von dir weiter oben angegebene Pfad stehen. Falls das nicht so ist, müsste man überlegen, wie man aus folder = dm.userDownloadsDirectory; den normalen Text bekommt.

  • Zitat von Mithrandir

    Der Anhang [Edit]war eben[/Edit] nicht dabei. Ist aber auch nicht so schlimm.


    Nun ist die Datei angehängt. (s.o.)

    Zitat

    (also alert vor das break). Wenn dann nach Neustart und erneutem Klick eine Msgbox kommt, habe ich richtig gelegen. In der Msgbox sollte der von dir weiter oben angegebene Pfad stehen. Falls das nicht so ist, müsste man überlegen, wie man aus folder = dm.userDownloadsDirectory; den normalen Text bekommt.

    hier nun die Msgbox:
    [Blockierte Grafik: http://s7.directupload.net/images/111215/ct3e6emp.jpg] Nach Klick auf "ok" öffnet derTC.

    Komme ganz schön ins Schwitzen!! :oops:

    PS: Ich muss mich erst mal einen Augenblick hinlegen! Bis dann!

    Gruß,
    D. Büssen

    Firefox 126.0 + Nightly 128 (WIN 10 - 64 bit)

  • Ich glaube, jetzt habe ich es.

    Folgende Bereiche müssen außerdem geändert werden: (.path hinter dm.userDownloadsDirectory)

    Code
    case 1: // the downloads folder
    					var dm = Components.classes["@mozilla.org/download-manager;1"]
    					   .getService(Components.interfaces.nsIDownloadManager);
    					folder = dm.userDownloadsDirectory.path;
    					break;


    und dann noch (process erwartet ein Array):

    Code
    var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile);
    					file.initWithPath('C:\\Totalcmd\\Totalcmd.exe');
    					var process = Cc['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess);
    					process.init(file);
    					var arguments=[folder];
    					process.run(false, arguments, arguments.length);


    Sicherheitshalber noch einmal als Anhang.


    Edit 2002Andreas....habe auf euren Wunsch hin daraus mal einen eigenen Thread gemacht.

  • Zitat von Mithrandir

    Ich glaube, jetzt habe ich es.


    Hallo Mithrandir,
    dein letzter Feinschliff brachte auch den gewünschten Erfolg! :klasse:
    Da nun eine eigener Thread rausgeschnitten wurde, werden auch die Leser
    nunmehr nicht weiter genervt - da es ja ein "Sonderwunsch" von mir war!

    Also, vielen, vielen Dank für die Geduld bei deinem Mitwirken! :)

    Gruß,
    D. Büssen

    Firefox 126.0 + Nightly 128 (WIN 10 - 64 bit)

  • Hallo Mithrandir.
    Auch von mir vielen Dank. Habe das Script für mich, angepasst, da ich den
    FreeCommander verwende. Funktioniert prima. Also nochmals vielen Dank.

    Endor

    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0
    OS: Windows 10 pro 64 bit und Windows 10 Home 64 bit
    Meine Scripte Sammlung: https://github.com/Endor8/userChrome.js
    Kein Support per PN. Fragen bitte im Forum stellen!

  • Hallo D. und Endor,

    fein und bitte. Dann hat sich unsere Hartnäckigkeit ja gelohnt. Diesen Thread habe ich nun in der ReadMe des Skriptes (https://github.com/ardiman/userCh…oadfolderbutton) vermerkt.

  • Zitat von loshombre

    Ich kann zwar nix, .....

    Und das soll ich wirklich glauben Meister? :wink:
    Was würden wir hier ohne loshombre wohl so alles zusammen schrauben....

    Endor

    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0
    OS: Windows 10 pro 64 bit und Windows 10 Home 64 bit
    Meine Scripte Sammlung: https://github.com/Endor8/userChrome.js
    Kein Support per PN. Fragen bitte im Forum stellen!

  • Hallo Boersenfeger
    Was möchtest Du da genau geändert haben?
    Meinst Du, dass sich, Profil Ordner, Chrome Ordner usw. in Totalcommander öffnen?
    Endor

    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0
    OS: Windows 10 pro 64 bit und Windows 10 Home 64 bit
    Meine Scripte Sammlung: https://github.com/Endor8/userChrome.js
    Kein Support per PN. Fragen bitte im Forum stellen!

  • Ganz genau...
    Habe mal probiert:

    Zitat

    Zeile 68 var file = Components.classes["@http://mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
    Zeile 69 file.initWithPath('E:\\Total Commander\\Totalcmd.exe');

    Das klappt aber nicht, vermutlich wegen dem Leerzeichen bei Total Commander!?