So sieht meine Lösung aus (Die langsame _addFile ist für Dateien ausreichen, da es nur bei vielen Dateien zu Problemen kam, es werden aber nur einzelne Dateien mit der Maus auf diese Weise hinzugefügt)
Spoiler anzeigen
Func GetMusicData($Path, $rek = False, Const $s_FileTypes = "mp3|wma|m4a|aac|ogg", $b_First = True)
if Not StringInStr(FileGetAttrib($Path),"D") then
_addFile($Path)
endif
Local Static $o_Shell
Local Static $s_Pattern
Local $sText, $s_Name
local $s_Path=$Path
If $b_First Then
$o_Shell = ObjCreate("Shell.Application")
$s_Pattern = "\.(?:" & $s_FileTypes & ")$"
$Path = $o_Shell.NameSpace($Path)
If @error Or $Path = "" Then Return SetError(1, @error, 0)
else
$Path = $o_Shell.NameSpace($Path)
If @error Or $Path = "" Then Return SetError(1, @error, 0)
EndIf
For $i In $Path.Items
$s_Name = $i.Name
If StringRegExp($s_Name, $s_Pattern) Then
$sText = $s_Path & "|" & $s_Name & "|" & $Path.GetDetailsOf($i, 21) & "|" & $Path.GetDetailsOf($i, 20) & "|" & $Path.GetDetailsOf($i, 14) & "|" & $Path.GetDetailsOf($i, 27)
GUICtrlCreateListViewItem($sText, $hGUIList);ConsoleWrite($sText & @CRLF)
ElseIf $i.IsFolder And $rek Then
GetMusicData($s_Path&"\"&$s_Name, true,$s_Pattern,false)
EndIf
Next
If $b_First Then $o_Shell = 0 ; Shell Objekt wieder killen
EndFunc ;==>GetMusicData