SATINEZ - Speed_Renamer

  • CIAO! Ich habe endlich mein "Progrämmchen" quasi fertig. Es gibt manchmal auch komisch symptome :(
    Brauche Feedback, was kann man besser machen, was ist schlecht, funktioniert es bei jedem usw.
    Was tut es?
    Also, da ich viele Dateien und Ordner zu verwalten habe, möchte ich unnötige Zeichen darin entfernen. Dies klappt wunderbar mit Autoit.
    Wie funktioniert es?

    1. Skript ausgeführt ( Es macht erstmal nichts :) )
    2. In den gewünschten Ordner per Explorer wechseln
    3. Die Taste "F9" betätigen

    ACHTUNG! Bitte nur an Testdateien testen !!!

    [autoit]

    ;~ #RequireAdmin
    #include
    #include

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

    HotKeySet("{F9}", "Rename_")

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

    While 1
    Sleep(100)
    WEnd

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

    Func Rename_()
    $dir = ControlGetText('[CLASS:CabinetWClass]','','Edit1')

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

    $array = _FileListToArray($dir)

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

    ; ===============================================================================
    ; Um die Daten in einem Listview anzuzeigen
    ;
    _ArrayDisplay($array, "")
    ; ===============================================================================

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

    For $i = 1 To UBound($array)-1

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

    FileMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringLower($array[$i]), '\h+', '_'), 1)
    $array = _FileListToArray($dir)
    FileMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringLower($array[$i]), '\_+', '_'), 1)
    $array = _FileListToArray($dir)
    FileMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringLower($array[$i]), '\(+', '('), 1)
    $array = _FileListToArray($dir)
    FileMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringLower($array[$i]), '\)+', ')'), 1)
    $array = _FileListToArray($dir)
    FileMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringLower($array[$i]), '\[+', '['), 1)
    $array = _FileListToArray($dir)
    FileMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringLower($array[$i]), '\]+', ']'), 1)
    $array = _FileListToArray($dir)
    FileMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringLower($array[$i]), '\{+', '{'), 1)
    $array = _FileListToArray($dir)
    FileMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringLower($array[$i]), '\}+', '}'), 1)
    $array = _FileListToArray($dir)
    FileMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringLower($array[$i]), '\%+', ''), 1)
    $array = _FileListToArray($dir)
    FileMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringLower($array[$i]), "\'+", ''), 1)
    $array = _FileListToArray($dir)
    FileMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringLower($array[$i]), '\,+', ''), 1)
    $array = _FileListToArray($dir)
    FileMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringLower($array[$i]), '\.+', '.'), 1)
    $array = _FileListToArray($dir)

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

    ;-------------------- Für Ordner
    DirMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringUpper($array[$i]), '\h+', '_'), 1)
    $array = _FileListToArray($dir)
    DirMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringUpper($array[$i]), '\_+', '_'), 1)
    $array = _FileListToArray($dir)
    DirMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringUpper($array[$i]), '\(+', '('), 1)
    $array = _FileListToArray($dir)
    DirMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringUpper($array[$i]), '\)+', ')'), 1)
    $array = _FileListToArray($dir)
    DirMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringUpper($array[$i]), '\[+', '['), 1)
    $array = _FileListToArray($dir)
    DirMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringUpper($array[$i]), '\]+', ']'), 1)
    $array = _FileListToArray($dir)
    DirMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringUpper($array[$i]), '\{+', '{'), 1)
    $array = _FileListToArray($dir)
    DirMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringUpper($array[$i]), '\}+', '}'), 1)
    $array = _FileListToArray($dir)
    DirMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringUpper($array[$i]), '\%+', ''), 1)
    $array = _FileListToArray($dir)
    DirMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringUpper($array[$i]), "\'+", ''), 1)
    $array = _FileListToArray($dir)
    DirMove( $dir & "\" & $array[$i], $dir & "\" & StringRegExpReplace(StringUpper($array[$i]), '\,+', ''), 1)
    $array = _FileListToArray($dir)

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

    FileSetAttrib( $array[$i], "-R-A-S-H-N-O-T")

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

    Next
    MsgBox(64, "SATINEZ - FileRenamer", "Vorgang erfolgreich abgeschlossen!")
    EndFunc

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

    Exit

    [/autoit]

    3 Mal editiert, zuletzt von satinez (28. Februar 2009 um 16:20)

  • ciao! Danke für dein Feedback.
    EDIT: Skript verändert, da war ein Fehler beim Punkt (.)

    Probier bitte mal, nach dem du einmal F9 gedrückt hast, nochmal die Taste zu betätigen.

    Was passiert?


    Meiner Meinung nach, sollte er dann alles richtig machen.
    Problem: Ich weiss nicht, warum er nicht alle RegExpReplace beim Ersten betätigen der Taste auf die Dateien anwendet :(

    EDIT2: Wie kann ich dem Skript sagen, er soll alle RegExp-Sets für alle Dateien und Ordner, in einem mal erledigen?

    Einmal editiert, zuletzt von satinez (26. Februar 2009 um 16:38)

  • Hmmmmm....also eigentlich sollte er die Dateien und Ordner immer wieder nach jedem "RegExReplace" Befehl in das Array schreiben.

    Ich mache es mit ->

    [autoit]

    $array = _FileListToArray($dir)

    [/autoit]

    Ist das falsch?

    • Offizieller Beitrag

    Ich habe Dein Script mal etwas zusammengefasst:

    Spoiler anzeigen
    [autoit]


    ;~ #RequireAdmin
    #include <Array.au3>
    #include <file.au3>

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

    HotKeySet("{F9}", "Rename_")

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

    While 1
    Sleep(100)
    WEnd

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

    Func Rename_()
    $dir = ControlGetText('[CLASS:CabinetWClass]', '', 'Edit1')
    If StringRight($dir, 1) <> '\' Then $dir &= '\'
    $array = _FileListToArray($dir)
    $target = $array
    ; ===============================================================================
    ; Um die Daten in einem Listview anzuzeigen
    ;
    _ArrayDisplay($array, "")
    ; ===============================================================================
    For $i = 1 To UBound($array) - 1
    $target[$i] = StringLower($array[$i])
    $target[$i] = StringRegExpReplace($target[$i], '\h+', '_')
    $target[$i] = StringRegExpReplace($target[$i], '\_+', '_')
    $target[$i] = StringRegExpReplace($target[$i], '\(+', '(')
    $target[$i] = StringRegExpReplace($target[$i], '\)+', ')')
    $target[$i] = StringRegExpReplace($target[$i], '\[+', '[')
    $target[$i] = StringRegExpReplace($target[$i], '\]+', ']')
    $target[$i] = StringRegExpReplace($target[$i], '\{+', '{')
    $target[$i] = StringRegExpReplace($target[$i], '\}+', '}')
    $target[$i] = StringRegExpReplace($target[$i], '\.+', '.')
    $target[$i] = StringRegExpReplace($target[$i], '\%+', '')
    $target[$i] = StringRegExpReplace($target[$i], '\,+', '')
    $target[$i] = StringRegExpReplace($target[$i], "\'+", '')
    $target[$i] = $dir & $target[$i]
    $array[$i] = $dir & $array[$i]
    If StringInStr(FileGetAttrib($array[$i]), 'D') Then
    ConsoleWrite('DirMove ' & $array[$i] & ' -> ' & $target[$i] & @CRLF)
    ;~ DirMove($array[$i], $target[$i], 0)
    Else
    ConsoleWrite('FileMove ' & $array[$i] & ' -> ' & $target[$i] & @CRLF)
    ;~ FileMove($array[$i], $target[$i], 0)
    EndIf
    Next
    MsgBox(64, "SATINEZ.NET - FileRenamer", "Vorgang erfolgreich abgeschlossen!")
    EndFunc ;==>Rename_

    [/autoit]

    Kannst Dir in der Console erstmal die Ergebnisse ansehen. Wenn alles passt, dann die auskommentierten Zeilen aktivieren.

  • Wow, danke sehr geil :) da war ich ja noch weit von entfernt ^^
    jetzt habe ich eine Frage, wie kann ich das verhindern/ändern, dass wenn eine schon vorhandene Datei/Ordner besteht, dass er mir dann ein "_(1)" und aufwärts, ans ende anhängt?
    bsp.
    [Blockierte Grafik: http://img16.imageshack.us/img16/8093/pic1o.png
    Hier müsste er eigentlich auch alles klein schreiben und die Leerzeichen mit Unterstrichen ersetzen. Doch die gleiche Datei ist ja schon vorhanden..
    Oscar : Warum hast du bei

    [autoit]

    FileMove($array[$i], $target[$i], 0)

    [/autoit]

    den Parameter 0 verwendet?

    2 Mal editiert, zuletzt von satinez (28. Februar 2009 um 17:04)

  • Hi vielen Dank :)
    Das ist mir zu kompliziert, ich mache es im moment so als übergangslösung...

    [autoit]


    If StringInStr(FileGetAttrib($array[$i]), 'D') Then

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

    ConsoleWrite(' DirMove | ' & $array[$i] & ' -> ' & StringUpper($target[$i]) & @CRLF)
    FileSetAttrib( $array[$i], "-R-A-S-H-N-O-T")
    DirMove($array[$i], StringUpper($target[$i] & "_D"), 0) ; Hängt bei jedem Ordner ans Ende "_D" an!

    [/autoit]
  • ciao

    Mein neues Problem ist, diese Applikation funktioniert leider nur auf WindowsXP. Unter windows7 und 8 leider nicht mehr.

    Hat jemand einen Tipp?

    Ich denke es liegt an

    [autoit]

    $dir = ControlGetText('[CLASS:CabinetWClass]','','Edit1')

    [/autoit]

    , dass er das nicht anprechen kann.
    Leider habe ich bis jetzt nicht herausgefunden wie ich das aktive Explorerfenster ansprechen kann.

    EDIT: Sowas habe ich gefunden, jedoch kann ich es nicht ansprechen

    [autoit]

    [CLASS:DirectUIHWND; INSTANCE:3]

    [/autoit]


    lg

  • Also so bekomme ich den Inhalt der Adressleiste des Win-Explorers ausgelesen (getestet unter Win 7 64bit)

    Spoiler anzeigen
    [autoit]

    HotKeySet("{F9}", "test")

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

    While 1
    Sleep(10)
    WEnd

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

    Func test()
    $x = ControlGetText("", "", "[CLASS:Edit; INSTANCE:1]")
    ConsoleWrite($x & @CRLF)
    EndFunc ;==>test

    [/autoit]
  • Danke, ich habe im moment Win8, und dies funzt so nicht. Werde es heute Abend auf Win7 probieren.

    Mit diesem AutoIt Window Info Tool bekomme ich doch die CLASS und die Instance.
    Jedoch funzt dies so nicht.

    Woher bekomm ich denn so Informationen?


    lg

  • Guten Morgen

    Ich habs hinbekommen, für Win7 und Win8 :)
    Der SpeedRenamer funktioniert jetzt nur auf selektierte Objekte im aktiven WinExplorer Fenster.

    Ein kleines Problem habe ich allerdings noch.

    Wenn ich eine Datei Namens : new - Text - Document.txt habe, soll diese zu ---> new_text_document.txt umbenannt werden.

    Dies funktioniert aber nur, wenn ich das Script ein 2tes mal laufen lasse!?
    Beim Ersten mal nennt er die Datei so --> new__text__document.txt

    Spoiler anzeigen
    [autoit]

    ;~ #RequireAdmin
    #include <Array.au3>

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

    HotKeySet("+!{F10}", "_End")
    HotKeySet("{F9}", "_Rename")

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

    Func _End()
    Exit
    EndFunc ;==>_End

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Rename()

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

    $hWindow = WinGetHandle("[ACTIVE]", "")

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

    $array = _ExplorerWinGetSelectedItems($hWindow)

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

    $target = $array
    ; ===============================================================================
    ; Um die Daten in einem Listview anzuzeigen
    ;
    ;~ _ArrayDisplay($array, "")
    ; ===============================================================================
    For $i = 2 To $array[0] + 1
    ;~ $target[$i] = StringLower($array[$i])

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

    $target[$i] = StringRegExpReplace($target[$i], '\h+', '_')
    $target[$i] = StringRegExpReplace($target[$i], '\_+', '_')
    $target[$i] = StringRegExpReplace($target[$i], '\(+', '(')
    $target[$i] = StringRegExpReplace($target[$i], '\)+', ')')
    $target[$i] = StringRegExpReplace($target[$i], '\[+', '[')
    $target[$i] = StringRegExpReplace($target[$i], '\]+', ']')
    $target[$i] = StringRegExpReplace($target[$i], '\{+', '{')
    $target[$i] = StringRegExpReplace($target[$i], '\}+', '}')
    $target[$i] = StringRegExpReplace($target[$i], '\.+', '_')
    $target[$i] = StringRegExpReplace($target[$i], '\%+', '')
    $target[$i] = StringRegExpReplace($target[$i], '\!+', '!')

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

    $target[$i] = StringRegExpReplace($target[$i], '\++', '')
    $target[$i] = StringRegExpReplace($target[$i], '\-+', '')

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

    $target[$i] = StringRegExpReplace($target[$i], '\,+', '')
    $target[$i] = StringRegExpReplace($target[$i], "\'+", '')
    $target[$i] = StringRegExpReplace($target[$i], "\$+", '')
    $target[$i] = StringRegExpReplace($target[$i], "\ß+", 'ss')
    $target[$i] = StringRegExpReplace($target[$i], "\-+", '_')
    $target[$i] = StringRegExpReplace($target[$i], "\^", '')
    $target[$i] = StringRegExpReplace($target[$i], "\ã¼", 'ue')
    $target[$i] = StringRegExpReplace($target[$i], "\ã¤", 'ae')
    $target[$i] = StringRegExpReplace($target[$i], "\©", '')
    $target[$i] = StringRegExpReplace($target[$i], "\´+", '')
    $target[$i] = StringRegExpReplace($target[$i], "\`+", '')
    $target[$i] = StringRegExpReplace($target[$i], "_-", '_')
    $target[$i] = StringRegExpReplace($target[$i], "-_", '_')
    $target[$i] = StringRegExpReplace($target[$i], "_-_", '_')
    $target[$i] = StringRegExpReplace($target[$i], "-_-", '_')

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

    ;~ Umlaute konvertieren!
    $target[$i] = StringRegExpReplace($target[$i], "(ä)+", 'ae')
    $target[$i] = StringRegExpReplace($target[$i], "(ö)+", 'oe')
    $target[$i] = StringRegExpReplace($target[$i], "(ü)+", 'ue')
    ;~ Konvertierte Umlaute nur einmal hintereinander anzeigen!
    $target[$i] = StringRegExpReplace($target[$i], "(ae)+", 'ae')
    $target[$i] = StringRegExpReplace($target[$i], "(oe)+", 'oe')
    $target[$i] = StringRegExpReplace($target[$i], "(ue)+", 'ue')

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

    $target[$i] = StringRegExpReplace($target[$i], "_avi", '.avi')
    $target[$i] = StringRegExpReplace($target[$i], "_au3", '.au3')
    $target[$i] = StringRegExpReplace($target[$i], "_mpg", '.mpg')
    $target[$i] = StringRegExpReplace($target[$i], "_txt", '.txt')
    $target[$i] = StringRegExpReplace($target[$i], "_mkv", '.mkv')
    $target[$i] = StringRegExpReplace($target[$i], "_wmv", '.avi')
    $target[$i] = StringRegExpReplace($target[$i], "_wma", '.mp3')
    $target[$i] = StringRegExpReplace($target[$i], "_mp3", '.mp3')
    $target[$i] = StringRegExpReplace($target[$i], "_jpg", '.jpg')
    $target[$i] = StringRegExpReplace($target[$i], "_png", '.png')
    $target[$i] = StringRegExpReplace($target[$i], "_iso", '.iso')
    $target[$i] = StringRegExpReplace($target[$i], "_img", '.img')
    $target[$i] = StringRegExpReplace($target[$i], "_ppt", '.ppt')
    $target[$i] = StringRegExpReplace($target[$i], "_pptx", '.pptx')
    $target[$i] = StringRegExpReplace($target[$i], "_vsd", '.vsd')
    $target[$i] = StringRegExpReplace($target[$i], "_doc", '.doc')
    $target[$i] = StringRegExpReplace($target[$i], "_sql", '.sql')

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

    $target[$i] = StringRegExpReplace($target[$i], "_exe", '.exe')
    $target[$i] = StringRegExpReplace($target[$i], "_tmp", '.tmp')
    $target[$i] = StringRegExpReplace($target[$i], "_xls", '.xls')

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

    $target[$i] = StringRegExpReplace($target[$i], "_xlt", '.xlt')
    $target[$i] = StringRegExpReplace($target[$i], "_java", '.java')
    $target[$i] = StringRegExpReplace($target[$i], "_mht", '.mht')
    $target[$i] = StringRegExpReplace($target[$i], "_url", '.url')
    $target[$i] = StringRegExpReplace($target[$i], "_zip", '.zip')
    $target[$i] = StringRegExpReplace($target[$i], "_msi", '.msi')
    $target[$i] = StringRegExpReplace($target[$i], "_rar", '.rar')
    $target[$i] = StringRegExpReplace($target[$i], "_pdf", '.pdf')
    $target[$i] = StringRegExpReplace($target[$i], "_htm", '.htm')
    $target[$i] = StringRegExpReplace($target[$i], "_html", '.html')
    $target[$i] = StringRegExpReplace($target[$i], "_php", '.php')
    $target[$i] = StringRegExpReplace($target[$i], "_ini", '.ini')
    $target[$i] = StringRegExpReplace($target[$i], "_m3u", '.m3u')
    $target[$i] = StringRegExpReplace($target[$i], "_eml", '.eml')
    $target[$i] = StringRegExpReplace($target[$i], "_odt", '.odt')
    $target[$i] = StringRegExpReplace($target[$i], "_bmp", '.bmp')
    $target[$i] = StringRegExpReplace($target[$i], "_rtf", '.rtf')
    $target[$i] = StringRegExpReplace($target[$i], "_mpeg", '.mpeg')
    $target[$i] = StringRegExpReplace($target[$i], "_tar_gz", '.tar.gz')
    $target[$i] = StringRegExpReplace($target[$i], "_tpl", '.tpl')
    $target[$i] = StringRegExpReplace($target[$i], "_css", '.css')
    $target[$i] = StringRegExpReplace($target[$i], "_log", '.log')

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

    ;~ MsgBox(0,"", $array[$i])
    ;~ MsgBox(0,"", $target[$i])

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

    If StringInStr(FileGetAttrib($array[$i]), 'D') Then
    ConsoleWrite(' DirMove | ' & $array[$i] & ' -> ' & StringUpper($target[$i]) & @CRLF)
    FileSetAttrib( $array[$i], "-R-A-S-H-N-O-T", 1)
    DirMove($array[$i], StringUpper($target[$i] & ""), 1) ; Hängt er bei jedem Ordner "" an!
    Else
    ConsoleWrite(' FileMove | ' & $array[$i] & ' -> ' & StringLower($target[$i]) & @CRLF)
    FileSetAttrib( $array[$i], "-R-A-S-H-N-O-T", 1)
    FileMove($array[$i], StringLower($target[$i]), 1)
    EndIf

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

    Next

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

    MsgBox(0,"", "Selected items renamed", 3)

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

    EndFunc ;==>_Rename

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

    Func _ObjectSHFolderViewFromWin($hWnd)
    If Not IsHWnd($hWnd) Then Return SetError(1,0,0)
    Local $oShell,$oShellWindows,$oIEObject,$oSHFolderView

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

    ; Shell Object
    $oShell=ObjCreate("Shell.Application")
    If Not IsObj($oShell) Then Return SetError(2,0,0)

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

    ; Get a 'ShellWindows Collection' object
    $oShellWindows = $oShell.Windows()
    If Not IsObj($oShellWindows) Then Return SetError(3,0,0)

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

    ; Iterate through the collection - each of type 'InternetExplorer' Object

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

    For $oIEObject In $oShellWindows
    If $oIEObject.HWND = $hWnd Then
    ; InternetExplorer->Document = ShellFolderView object
    $oSHFolderView=$oIEObject.Document
    If IsObj($oSHFolderView) Then Return $oSHFolderView
    Return SetError(4,0,0)
    EndIf
    Next

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

    Return SetError(-1,0,0)
    EndFunc

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

    ; ==========================================================================================================================
    ; Func _ExplorerWinGetSelectedItems($hWnd)
    ;
    ;
    ; Author: klaus.s, KaFu, Ascend4nt (consolidation & cleanup, Path name simplification)
    ; ==========================================================================================================================

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

    Func _ExplorerWinGetSelectedItems($hWnd)
    If Not IsHWnd($hWnd) Then Return SetError(1,0,'')
    Local $oSHFolderView
    Local $iSelectedItems,$iCounter=2,$aSelectedItems[2] = [0, ""]

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

    $oSHFolderView=_ObjectSHFolderViewFromWin($hWnd)
    If @error Then Return SetError(@error,0,'')

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

    ; SelectedItems = FolderItems Collection object->Count
    $iSelectedItems = $oSHFolderView.SelectedItems.Count

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

    Dim $aSelectedItems[$iSelectedItems+2] ; 2 extra -> 1 for count [0], 1 for Folder Path [1]

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

    $aSelectedItems[0]=$iSelectedItems
    ; ShellFolderView->Folder->Self as 'FolderItem'->Path
    $aSelectedItems[1]=$oSHFolderView.Folder.Self.Path

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

    ; ShellFolderView->SelectedItems = FolderItems Collection object
    $oSelectedFolderItems = $oSHFolderView.SelectedItems

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

    #cs
    ; For ALL items in an Explorer window (not just the selected ones):
    $oSelectedFolderItems = $oSHFolderView.Folder.Items
    ReDim $aSelectedItems[$oSelectedFolderItems.Count+2]
    #ce

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

    For $oFolderItem In $oSelectedFolderItems
    $aSelectedItems[$iCounter] = $oFolderItem.Path
    $iCounter += 1
    Next

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

    Return SetExtended($iCounter-2,$aSelectedItems)
    EndFunc ;==>_ExplorerWinGetSelectedItems

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

    EDIT: Die Anwendung ist aus irgend einem Grund sehr langsam, und bei Files die grösser als 2GB sind, stürzt das Programm ohne Meldung ab :(

    Einmal editiert, zuletzt von satinez (15. Februar 2013 um 11:20)