1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. HansiEdi

Beiträge von HansiEdi

  • Ordnerverzeichnis auslesen und in Array speichern, anschließendes weiterverarbeiten

    • HansiEdi
    • 18. Mai 2024 um 13:37

    Hallo!


    Moombas jetzt verstehe ich was du vor hattest.

    Ich habe nun eine kurze Überprüfung ausgeübt, das Ergebnis ist sehr interessant.

    Über die GUI vom Firefox Profilmanager kann man bei den zu erstellenden Profilen Leerzeichen nach Lust und Laune vergeben, auch mehrere in einem Profilnamen.

    Die Profile werden korrekt eingetragen und die abgespeicherten Verzeichnisse auf der Festplatte beinhalten auch die vergebenen Leerzeichen.

    Über den Kommandozeilen - Profilmanager funktioniert das hingegen leider nicht.

    Schlussendlich wird eine INI Datei angelegt, die mir alle Profile aufweist.


    Zu erwähnen ist noch, das jedes erzeugte Profil eine 8- Stellige zufallsgenerierte Buchstabenkombination enthält, gefolgt von einem Punkt und dann der Profilname, den man vergeben hat. Nachfolgend weitere Erkenntnisse die ich heruausgefunden habe.


    Mir fällt also als dritte Möglichkeit ein, die INI Datei selbst zu editieren. Man könnte die INI Datei selber aufbauen oder alle Leerzeichen der Profilnamen durch andere Zeichen ersetzen, anschließend die Ini Datei editieren und die austauschzeichen Zeichen wieder gegen Leerzeichen ersetzen. Das kann dann noch optional mit den angelegten Profilordnern wiederholt werden, dazu weiter unten mehr.


    Das ganze ist jetzt ziemlich verflixt. Etwa die Hälfte an meinen Portablen Instanzen beinhalten Leerzeichen, die ich der Übersichtshalber schon gerne in den Profilmanager mit übersiedeln möchte.

    Die Leerzeichen in den Profilordnern möchte ich auch deshalb gerne haben, da sie korrekt in meiner Dateisuchmaschine gefunden werden und nicht verdeckt bleiben.


    Auto-IT Schritte bis jetzt:

    1. GUI Profilmanager aufrufen und per AutoIT editieren (funktioniert noch nicht korrekt)

    2. Profilmanager über Kommandozeilenparameter steuern (hat Einschränkungen bezüglich Leerzeichen)

    3. weitere Möglichkeit: INI Datei mittels AutoIT aufbauen, oder Profilmanager mittels Kommandozeilenparameter bedienen, Leerzeichen durch andere Zeichen ersetzen und anschließend diese durch einlesen der INI Datei patchen, ident auch die Ordnerstruktur patchen.


    Ich werde jetzt noch ein bischen herumprobieren, vielleicht fällt mir noch etwas auf.


    Testversuche:

    Profilmanager GUI, angelegtes Profil namens "S A"

    [Profile14]
    Name=S A
    IsRelative=1
    Path=Profiles/jrqjljel.S A


    anschließendes umbenennen des Profiles "S A" in "S-A" mittels Profilmanager GUI

    [Profile14]
    Name=S-A
    IsRelative=1
    Path=Profiles/jrqjljel.S A


    Standardmäßig werden Profile in folgendes Verzeichnis abgelegt:

    %AppData%\Mozilla\Firefox\Profiles


    im konkreten fall sieht es so aus:

    %AppData%\Mozilla\Firefox\Profiles\jrqjljel.S A


    Ich habe ein Profil erstellt, und dabei ein neues Verzeichnis (nicht das standard Verzeichnis) angegeben:

    [Profile16]
    Name=Test Profil
    IsRelative=0
    Path=E:\TMP

    Was mir hierbei aufgefallen ist, die Profildateien befinden sich nun direkt in E:\TMP\ Ein Unterordner für das Profil wird nicht eigens erstellt, ich muss diesen schon selber angeben. Das erklärt nicht wieso Firefox Profilmanager diese Zufalls Buchstabenkombination vor jedem Profilnamen generiert, da sie hier den Anschein erwecken, nicht gebraucht zu werden. Das würde jetzt einiges erleichtern.


    Wenn ich ein Profil erstelle, enthält dieses zu Beginn nur eine Json Datei. Erst wenn das Profil das erste mal gestartet wird, baut Firefox den Datei und Ordnerinhalt das erste mal auf. Das kann ich auch überspringen indem ich ein bestehendes Firefoxprofil (Protable Version) dort hineinkopiere, dabei wird auch die Json Datei ersetzt, da sie mitkopiert wird.


    LG Hans

  • Ordnerverzeichnis auslesen und in Array speichern, anschließendes weiterverarbeiten

    • HansiEdi
    • 15. Mai 2024 um 01:02

    Hallo Moombas,


    Was ich erreichen möchte, grundlegend meine Erklärung von meinem anderen Post, bei dem Du und Sven mir dankend geholfen habt.

    Im Endeffekt kostet es sehr viel Zeit ein Lauffähiges Firefox Profil anzulegen. Über den Profilmanager ein Profil erstellen, anschließend dieses Profil starten und konfigurieren sowie des weiteren eine Programmverknüpfung anzulegen, die genau dieses Profil startet.

    Da war es viel einfacher eine vor-konfigurierte Portable Firefox Version parat zu haben. Eine Kopie ist schnell erstellt und der gewünschte Name als Ordnername ebenfalls vergeben.

    Es sind nun viel zu viele Kopien die ich in Laufe der Zeit erstellt habe, darum versuche ich das alles über den ProfilManager zu migrieren.

    In Zukunft werden weiterhin Profile erstellt, diese versuche ich dann ebenfalls zu automatisieren. Bsp. ein Script, das ich ausführe, das mir nur noch nach den anzulegenden Profilnamen fragt und den Rest weitgehend alleine erledigt. Aber bis da hin muss ich erst einmal kommen.


    Mir ist bekannt das mittels Koordinaten Mausklicks diese Prozedur sehr fehleranfällig wird.

    Die Firefox Commandline Optionen waren mir unbekannt, ich hatte einige Zeit gegoogelt und fand wirklich keine Alternative zum ProfilManager. Ich hatte sogar auf gut Glück mit ein paar Kommandozeilen experimentiert, eher nach dem Motto "Auf gut Glück". Da bin ich aber nicht weiter gekommen

    Die Kommandozeilenparameter sind natürlich kommentarlos vorzuziehen.

    Das die Endung der Executable fehlt, ist in der Tat wahr. Funktioniert aber trotzdem. Firefox scheint ein registrierter Systemprozess oder wie auch immer zu sein.

    Dankeschön für für den Hinweis, wie die Zeile korrekterweise heißen soll, ich habe es soeben korrigiert.

    Ich habe nun dein Script ausgeführt, leider schüttet mich Firefox mit einer Fehlermeldung zu:

    Titel: Profil nicht vorhanden

    Text: Ihr Profil "Firefox" kann nicht geladen werden. Es ist möglicherweise nicht vorhanden oder ein Zugriff ist nicht möglich.


    Korrektur: RunWait('"C:\Program Files\Mozilla Firefox\firefox" -no-remote -CreateProfile ' & $dirList[$Row] & '"')

    Ich musste das Anführungszeichen nach CreateProfile " entfernen, jetzt werden die Profilnamen übergeben. Das Anführungszeichen wäre korrekt wenn anschließend der Zielpfad für das neue Profil angehängt wird.


    Merkwürdigerweise werden aber Profilnamen ohne Leerzeichen tadellos erstellt, Namen mit Leerzeichen werden ab dieses abgekürzt. Bsp: Neuer User, es wird nur Neuer erstellt.

    Es gibt aber auch keinen Unterschied zum Windows Ausführen (Win + R". Ich werde die Tage noch einmal herumprobieren, es ist schon wieder sehr spät geworden.

    Du hast mich schon so nahe ans Ziel gebracht.


    Lg Hans

  • Ordnerverzeichnis auslesen und in Array speichern, anschließendes weiterverarbeiten

    • HansiEdi
    • 12. Mai 2024 um 15:27

    Wenn ich $startIndex = $i + 1 ; auf $startIndex = $i - 1 ; ändere, werden mir zwei Profile angelegt. Das zurück zählen ist aber auch nicht die Lösung.

    Es scheint ein Problem beim hochzählen zu geben, obwohl ich da schon weiter war und alle Einträge direkt hintereinander nach und nach eingefügt wurden.


    Schlussendlich komme ich nicht weiter und bin auch eure Hilfe angewiesen.


    AutoIt
    #include <MsgBoxConstants.au3>
    #include <WinAPIFiles.au3>
    #include <File.au3>
    #include <Array.au3>
    
    ; Verzeichnis mit den Firefox-Portable-Ordnern
    Global $firefoxPortableDir = "R:\1\"
    Global $startIndex = 1 ; Startindex für die For-Schleife
    
    ; Hotkey definieren
    HotKeySet("!e", "_ende")
    
    ; Firefox-Profilmanager öffnen
    Run("C:\Program Files\Mozilla Firefox\firefox -P")
    
    ; Warten, bis der Profilmanager geladen ist
    Sleep(5000)
    
     ; DIR-Liste erstellen und alphabetisch sortieren
        Global $dirList = _FileListToArray($firefoxPortableDir, "*", $FLTA_FOLDERS)
        _ArraySort($dirList, 1) ; 1 für aufsteigende Sortierung, 0 für absteigende Sortierung
    
    While 1
        ; Profil erstellen
        ControlClick("Firefox - Benutzerprofil wählen", "", "[CLASS:Button; INSTANCE:1]")
    
        MouseClick("left", 856, 455)
        Sleep(1000)
        MouseClick("left", 1089, 722)
        Sleep(1000)
    
    
    
        ; Alle Einträge kopieren, beginnend beim Startindex
        For $i = $startIndex To UBound($dirList) - 1
            ClipPut($dirList[$i])
            Send("^v")
    		Sleep(100) ; bei Bedarf verlängern
            MouseClick("left", 1089, 722)
    		Sleep(100) ; evtl. noch eine Verarbeitungspause
            $startIndex = $i + 1 ; Aktualisieren des Startindex für den nächsten Durchlauf
        Next
    
        ; Überprüfen, ob alle Einträge verarbeitet wurden
      ;If $profilAnzahl > UBound($dirList) Then ExitLoop
    
        ; Kurze Pause, bevor die Schleife erneut beginnt
        Sleep(3000)
    WEnd
    
    ; Diese Nachrichtenbox wird nur einmal angezeigt, wenn das Skript beendet wird
    MsgBox($MB_ICONINFORMATION, "Fertig", "Profile wurden erfolgreich erstellt!")
    
    ; Funktion zum Beenden des Skripts
    Func _ende()
        Exit
    EndFunc
    Alles anzeigen
  • Ordnerverzeichnis auslesen und in Array speichern, anschließendes weiterverarbeiten

    • HansiEdi
    • 12. Mai 2024 um 12:23

    Hallo Velted,


    vielen Dank dass du dir die Zeit genommen hast,

    Zu deiner ersten Frage, nein, ich möchte nicht im Firefox Profilmanager alle Profile auswählen.

    Antwort: Ich muss im Firefox Profilmanager eine Profilliste anhand einer Liste mit Bezeichnungen anlegen.
    Die Bezeichnungen stammen aus einer Ordnerliste, keine Dateiliste.

    Zuerst muss ich die Ordnerliste einlesen, daraus die Bezeichnungen in ein Array speichern und in den Firefox Profilmanager weiterreichen.


    Ich habe nun deine beiden Pausenzeiten, die du mir empfohlen hast in das Script übernommen, danke für den Hinweis.

    Ich wusste gar nicht das die äußere While- Schleife nichts mehr bringt, weil Startindex auf den letzten Eintrag im Array zeigt. Das ist nun sehr interessant und ist so nicht gewollt. Es soll mit dem ersten Eintrag beim einfügen angefangen werden und beim letzten Eintrag ist Schluss.

    Ich kann das nun bestätigen, es wird nur der letzte Eintrag im Array in das Clipboard kopiert und dann ist Schluss.

    Wie kann ich das korrigieren? Leider bin ich nach 2h weiterer Versuche nicht dahinter gekommen.

    AutoIt
    $startIndex = $i + 1 ;
    
    ; Ich hatte auch schon folgendes versucht. Leider auch falsch:
    $startIndex =  $startIndex + 1 ;

    LG Hans

  • Ordnerverzeichnis auslesen und in Array speichern, anschließendes weiterverarbeiten

    • HansiEdi
    • 11. Mai 2024 um 02:15

    Hallo an euch,


    ich muss ein Verzeichnis auslesen, dieses beinhaltet viele Ordner. Diese Ordnernamen muss ich weiterverarbeiten.


    Hintergrund der Geschichte:

    Ich möchte im Firefox Profilmanager viele Profile anlegen. Die Profilnamen sind bereits in Form von Ordnernamen vorliegend.


    Leider hakt es noch an mehreren Stellen im Script.

    1. Es war leider nicht möglich den Firefox Profilmanager die Buttons und Eingabebox anzuwählen. Ich musste mir damit behelfen mit AutoIT Mausklicks an der richtigen Bildschirmposition durchzuführen. Das funktioniert schon mal.

    2. Der Befehl HotKeySet wollte nicht so wirklich, ich behelfe mir vorerst indem ich nach Ablauf des Script eine 9 sekündige Pause eingefrügt habe. Wenn ich das Script im Editor mitteld F5 ausführe, funktioniert zum stoppen auch die Strg + Pause Tastenkombination. Das ist erst einmal inordnung.

    3. Die DIR Liste wird erstellt und nach Alphabet sortiert. Der Erste Eintrag im Profilmanager wird auch tadellos erstellt. Anschließend wird wieder mit der Maus navigiert und geklickt, jedoch wird nicht der nächste Ordnername eingefügt.

    Zuvor hatte die Variable zum hochzählen noch nicht in Verwendung, das war ein wirres einfügen "aller Ordnernamen" hintereinander. Nun, seit dem ich das Hochzählen über die Variable implementiert habe, geht es nach dem ersten Eintrag nicht mehr weiter.


    Gut, angefangen wird mit dem ersten Profil, bevor die DIR Liste erstellt wird, aber das bereitet hoffentlich kein Problem. Etwas wirr warr ist mein Ablauf.

    Google hat mir zwar viel weitergeholfen, aber Ihr seid immer noch die besseren.

    AutoIt
    #include <MsgBoxConstants.au3>
    #include <WinAPIFiles.au3>
    #include <File.au3>
    #include <Array.au3>
    
    ; Verzeichnis mit den Firefox-Portable-Ordnern
    Global $firefoxPortableDir = "R:\"
    Global $startIndex = 1 ; Startindex für die For-Schleife
    
    ; Hotkey definieren, funktioniert noch nicht
    HotKeySet("!e", "_ende")
    
    ; Firefox-Profilmanager öffnen
    Run("C:\Program Files\Mozilla Firefox\firefox -P")
    
    ; Warten, bis der Profilmanager geladen ist
    Sleep(5000)
    
    While 1
        ; Profil erstellen
        ControlClick("Firefox - Benutzerprofil wählen", "", "[CLASS:Button; INSTANCE:1]")
        MouseClick("left", 856, 455)
        Sleep(1000)
        MouseClick("left", 1089, 722)
        Sleep(1000)
    
        ; DIR-Liste erstellen und alphabetisch sortieren
        Global $dirList = _FileListToArray($firefoxPortableDir, "*", $FLTA_FOLDERS)
        _ArraySort($dirList, 1) ; 1 für aufsteigende Sortierung, 0 für absteigende Sortierung
    
        ; Alle Einträge kopieren, beginnend beim Startindex
        For $i = $startIndex To UBound($dirList) - 1
            ClipPut($dirList[$i])
            Send("^v")
            MouseClick("left", 1089, 722)
            $startIndex = $i + 1 ; Aktualisieren des Startindex für den nächsten Durchlauf
        Next
    
    
        ; Pause, bevor die Schleife erneut beginnt
        Sleep(9000)
    WEnd
    
    ; Abschlussmeldung wenn alle Profile erstellt wurden
    MsgBox($MB_ICONINFORMATION, "Fertig", "Profile wurden erfolgreich erstellt!")
    
    ; Funktion zum Beenden des Skripts, scheint nicht zu funktionieren
    Func _ende()
        Exit
    EndFunc
    Alles anzeigen

    Lg Hans

  • Verknüpfungen erstellen

    • HansiEdi
    • 11. Mai 2024 um 01:55

    Das ist richtig super von euch beiden, danke Sven das du mir die Korrektur vorgenommen hast.

    Es funktioniert einwandfrei.


    Zu der Hilfe von FileCreatShortcut ist mir nur folgende Hilfe bekannt, gibt es dazu noch bessere?

    Function FileCreateShortcut (autoitscript.com)


    Lg Hans

  • Verknüpfungen erstellen

    • HansiEdi
    • 10. Mai 2024 um 13:37

    Na da schau mal einer an, ich werkel da mindestens einen Tag lang herum und komme einfach nicht weiter und Ihr bastelt mir da etwas das fast fehlerfrei ist.

    Vielen lieben dank euch beiden.

    Ich hatte mir die Hilfe zu FileCreateShortcut angesehen, bin da aber irgendwie auch nicht viel weiter gekommen. Ein paar andere Beispiele haben mich wenigstens so weit gebracht wie ich gekommen bin. Ich sehe mir aber wirklich noch einmal diese Parameter dazu an und hoffe das ich doch noch durchblicke.

    Zwei kleine Fehler sind jetzt noch vorhanden

    Beispiel:

    Ziel: "C:\Program Files\Mozilla Firefox\firefox.exe" -P "3D Zeichnungen für 3D Druck" (korrekt)
    Ziel: "C:\Program Files\Mozilla Firefox\firefox.exe" -P "3D Zeichnungen für 3D Druck.lnk" (falsch)

    Ausführen in: "C:\Program Files\Mozilla Firefox" (korrekt)
    Ausführen in: "C:\Program Files\Mozilla Firefox\firefox.exe" (falsch)

    Die Überprüfung mit der Fehlermeldung finde ich schon mal gut, das gefällt mir.

    Lg Hans

  • Verknüpfungen erstellen

    • HansiEdi
    • 9. Mai 2024 um 22:28

    Hallo,

    es ist schon gut 20 Jahre her, als ich mich mit AutoIT beschäftigt hatte.

    Leider kann ich nichts mehr und benötige eure Hilfe.


    Ich möchte Programmverknüpfungen erstellen.

    Dabei müssen Ordnernamen in einem Verzeichnis ausgelesen werden. Die einzelnen Verknüpfungen tragen später die jeweiligen Ordnernamen und als zu startendes Programm wird der Ordnername als Parameteraufruf weitergegeben.


    Beispiel1:
    Name der Verknüpfungsdatei: ErsterName
    Ziel der Verknüpfung: "C:\Program Files\Mozilla Firefox\firefox.exe" -P "ErsterName"

    Beispiel2:
    Name der Verknüpfungsdatei: ZweiterName
    Ziel der Verknüpfung: "C:\Program Files\Mozilla Firefox\firefox.exe" -P "ZweiterName"


    Hintergrund dieser Aktion:

    Ich arbeite mit unzähligen portablen Versionen von Firefox.

    Ich möchte nun alle portablen Firefox Kopien als jeweiliges Profil für meine installierte Firefox Instanz anlegen.


    Der gesamte Ablauf unterteilt sich in drei Schritten.

    1. Firefox Profilmanager - neues Profil erstellen

    2. Firefox Portable Versionen bestehende Profile importieren. Da werde ich vielleicht noch herumprobieren.

    3. Startverknüpfungen erstellen


    Schritt 1 ist fast fertig, erste Versuche funktionieren schon, aber mit ein paar Problemen.

    Schritt 2 kann ich im schlimmsten fall manuell durchführen, wird mir aber auch stunden an Zeit kosten alle Profile manuell zu kopieren.

    Schritt 3 Die Programmverknüpfungen müssen automatisch erstellt werden.


    Schritt3, Erstellung der Programmverknüpfungen:

    AutoIt
    #include <FileConstants.au3>
    #include <MsgBoxConstants.au3>
    
    ;#include <WinAPIFiles.au3>
    #include <File.au3>
    #include <Array.au3>
    
    
    ; Pfad zum Firefox-Ordner
    Local $sourceFolder = "E:\Portable\Browser\Firefox\"
    
    ; Pfad zum Zielverzeichnis für die Verknüpfungsdateien
    Local $destinationFolder = "C:\Users\Hans\Desktop\Firefox Profile\"
    
    ; Liste der Unterordner im Quellverzeichnis
    Local $folders = _FileListToArray($sourceFolder, "*", $FLTA_FOLDERS)
    
    ; Firefox-Exe-Pfad
    Local $firefoxExePath = "C:\Program Files\Mozilla Firefox\firefox.exe"
    
    ; Schleife über alle Unterordner
    For $i = 1 To $folders[0]
        ; Verknüpfungsdateiname
        Local $linkName = $folders[$i]
    
        ; Ziel-Pfad für die Verknüpfung
        Local $targetPath = $firefoxExePath & ' -P "' & $linkName & '"'
    
        ; Verknüpfung erstellen
        FileCreateShortcut($targetPath, $destinationFolder & $linkName & ".lnk")
    Next
    
    MsgBox($MB_ICONINFORMATION, "Fertig", "Verknüpfungen wurden erstellt und im Zielverzeichnis abgespeichert.")
    Alles anzeigen


    Leider funktioniert das nicht wie gewünscht, an die erstellten Verknüpfungen werden Zielpfad, Parameter und Arbeitsverzeichnis nicht weitergereicht.


    Ich hoffe das Ihr mir helfen könnt.


    Edit:

    FileCreateShortcut($targetPath, $destinationFolder & $linkName & ".lnk", $sourceFolder)

    nun wird das Arbeitsverzeichnis (ausführen in:) mit abgespeichert.

    $targetPath wird nicht richtig übernommen.

    Wenn ich folgendes zum Testen angebe, wird mir der Pfad mit Parameter in die Verknüpfungsdatei gespeichert, es werden jedoch die Anführungszeichen nach der Pfadangabe und vor dem Parameter nicht mitgegeben.

    $firefoxExePath = "C:\Program Files\Mozilla Firefox\firefox.exe" & "'-P '" & "Onlineshop"

    Resultat: "C:\Program Files\Mozilla Firefox\firefox.exe -P Onlineshop"

    folgendes wäre korrekt: "C:\Program Files\Mozilla Firefox\firefox.exe" -P "Onlineshop"

    Leider komme ich nicht weiter.


    LG Hans

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™