Verzeichnis rekursiv durchlaufen und Ordnerbild setzen

  • Hallo!

    Ich möchte ein Verzeichnis rekursiv durchlaufen, und wenn eine "front.jpeg" gefunden wird, soll diese als Ordnerbild gesetzt werden.

    Folgendes habe ich schon geschafft (Quick And Dirty):

    Spoiler anzeigen
    [autoit]


    #Include <File.au3>

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

    Func doSomeMysticStuffForFerdi($path)
    $dirs = _FileListToArray($path)

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

    If Not IsArray($dirs) Then
    Return
    EndIf

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

    For $i = 1 To $dirs[0]
    $thisFolder = $path & "\" & $dirs[$i]

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

    IF FileExists($thisFolder & "\front.jpeg") Then
    ; folder-id von $thisFolder herausfinden und die welt ist wunderbar ...
    ; RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\Bags\--folder-id--\Shell", "Logo", "REG_SZ", $thisFolder & "\front.jpeg")
    EndIf

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

    doSomeMysticStuffForFerdi($thisFolder)
    Next
    EndFunc

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

    ; Script starten
    $userInput = FileSelectFolder("Es werden auch die Unterordner berücksichtigt.", "")

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

    If Not $userInput = "" Then
    doSomeMysticStuffForFerdi($userInput)
    EndIf

    [/autoit]

    Hat jemand eine Idee wie ich das am Besten anstelle. Ich arbeite übrigens erst seit wenigen Stunden mit AutoIt ... :)

    //EDIT Boar, ich kann schon gar nicht mehr richtig schreiben. Es wird Zeit für's Bettchen ...

    3 Mal editiert, zuletzt von Plastofix (10. Juni 2009 um 23:49)

  • Hallo PlastoFix,

    herzlich willkommen im Forum. Meines Wissens nach kann für die Ordneransicht nur ein Icon aus einer DLL einem Ordner zugewiesen werden. Dazu schreibt Windows in das entsprechende Verzeichnis eine Datei namens Desktop.ini bzw. nimmt Einträge für das Icon in eine bereits bestehende auf z.b.:

    Code
    [.ShellClassInfo]
    IconFile=%SystemRoot%\system32\SHELL32.dll
    
    
    IconIndex=13

    Du kannst dieses File mit IniWrite erstellen bzw. ändern.
    Für die Miniaturansicht kannst du auch aus Icons (andere Bilder?) aus einer Datei zuweisen, da gehe ich davon aus, dass der Wert in der Registry eingetragen. Hier müsstest du dann RegWrite nehmen, schau dir mal am besten beides in der Hilfe an.

    Viel Spass mit AutoIt wünscht (Auto)Bert

    Edit: steht tatsächlich in der Registry Auszug davon

    Code
    Windows Registry Editor Version 5.00
    
    
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\Bags\OrdnerNr\Shell]
    "FolderType"="Documents"
    "Logo"="C:\\Dokumente und Einstellungen\\Bert\\Eigene Dateien\\AutoBert.ico"


    Wie man allerdings diese OrdnerNr (bei mir eine 3stellige Zahl) ermittelt weis ich nicht

    3 Mal editiert, zuletzt von AutoBert (10. Juni 2009 um 14:25)

  • Den Logo Eintrag in der Registrierung hatte ich auch beim Revers Engineering gefunden; weiß aber auch nicht, wie man an die entsprechenden Nummern gelangt. Ich komme leider auch nicht aus der Windows-Programmierung.

    Wüsste vielleicht jemand, woher man diese Nummer bekommt? Kann ja eigentlich keine Zauberei sein ... :(

    Gruß,
    Daniel

    PS: AutoIt ist echt super ... besonders für so faule Menschen wie mich. :D

  • Hallo PlastoFix,

    Zitat

    PS: AutoIt ist echt super ... besonders für so faule Menschen wie mich.

    Ja viele Erfindungen wurden aus Bequemlichkeit gemacht.

    @all würde mich auch sehr interessieren an welchen Orten im Registry-Dschungel die Verknüpfungen für diese Aktion gespeichert werden (müssen mehrere sein siehe #2)
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    mfg (Auto)Bert

  • Eventuell sollte man sich doch auf die Tastatureingabe-Variante beschrenken. Ich habe jedenfalls keine Lösung für das Problem mit den unbekannten Ordnernummern gefunden.

    Kann mir bitte mal jemand dabei helfen?

    [autoit]


    _RunDOS("explorer " & $thisFolder)
    Send("!a")

    [/autoit]

    Das ALT+A zeigt keine Wirkung.

  • Ich bin nun zu folgender Lösung gekommen:

    Spoiler anzeigen
    [autoit]


    #Include <File.au3>

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

    Func doSomeMysticStuffForFerdi($path)
    $dirs = _FileListToArray($path)

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

    If Not IsArray($dirs) Then
    Return
    EndIf

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

    For $i = 1 To $dirs[0]
    $thisFolder = $path & "\" & $dirs[$i]

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

    IF FileExists($thisFolder & "\front.jpeg") Then
    ; folder-id von $thisFolder herausfinden und die welt ist wunderbar ...
    ; RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\Bags\--folder-id--\Shell", "Logo", "REG_SZ", $thisFolder & "\front.jpeg")

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

    ; langsam, aber geht ...
    Run("explorer.exe /root, " & $thisFolder)
    Sleep(500)
    Send("!a p")
    Sleep(500)
    Send("!a !n front.jpeg")
    Sleep(500)
    Send("{ENTER}{ENTER}")
    Sleep(500)
    Send("!{F4}")
    EndIf

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

    doSomeMysticStuffForFerdi($thisFolder)
    Next
    EndFunc

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

    ; Script starten
    $userInput = FileSelectFolder("Es werden auch die Unterordner berücksichtigt.", "")

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

    If Not $userInput = "" Then
    doSomeMysticStuffForFerdi($userInput)
    EndIf

    [/autoit]

    Funktioniert erstmal ... :pinch:

  • habe auch nochmal geschaut:

    Code
    [.ShellClassInfo]
    IconFile=%USERPROFILE%\Desktop\foobar.ico
    IconIndex=0

    das kommt in die Desktop.ini und diese kommt in das verzeichnis, was bearbeitet werden soll.
    Die desktop ini ist versteckt

    Gruß
    GerhardSchr


    PS: wie man dateien mit AutoIt "versteckt", weiß ich nicht :)

    //edit: ah mit FileSetAttrib geht das

    //edit: eventuell kann man ja auch ".\foobar.ico" schreiben

    Einmal editiert, zuletzt von GerhardSchr (7. September 2009 um 11:48)