Tut nichts trotz Identischer Anagaben

  • HiHo, vll is der titel Nicht ganz erklärend, macht nichts, ich hoffe ich kann im Thread alles erklären :D
    Also, es geht um mein Prog WL, auf mehrere anfragen hab ich angefangen diese zu erweitern und stehe nun vor einem Mysteriösen Rätzel.
    Hier einmal der Gesammte Code, ist nicht Kurz für ein ein Kleines ding :D

    Spoiler anzeigen
    [autoit]


    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=icons\prog01.ico
    #AutoIt3Wrapper_outfile=WL.exe
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_UseX64=n
    #AutoIt3Wrapper_Res_Fileversion=1.5.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=Skilkor(http://www.autoit.de)(Hilfe: Oscar & i2c & Raupi & ohforf & Twodollarbillie)
    #AutoIt3Wrapper_Res_Language=1031
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;==============
    #Region ### include ###
    #include <Array.au3>
    #include <File.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <GuiImageList.au3>
    #include <Misc.au3>
    #include <EditConstants.au3>
    #EndRegion ### include ###
    ;=============
    #Region ### Global Ini ###
    ;~ Global $sInifile = @ScriptDir & '\Conf.ini' ; Inidatei
    #EndRegion ### Global Ini ###
    ;=============
    #Region ### IniRead ###
    #EndRegion ### IniRead ###
    ;=============
    #Region ### Global Checkbox ###
    Global $ahCheckbox[5]
    Global $BoxNames[5] = ['Windows Media Player', 'Songbird', 'WinAmp', 'VLC', 'RealPlayer']
    Global $aFunktions[5] = ['_WMP', '_SongBird', '_WAmp', '_VLC', '_RPlayer']
    Global $aLeft[6] = [24,155,220,280,325,400]
    #Endregion ### Global Checkbox ###
    ;=============
    #Region ### Wiedergabelieste ###
    $WL = GUICreate("WL Creater",442,460,-1,-1)
    GUICtrlCreateGroup("",8,0,425,97)
    GUICtrlCreateGroup("",8,89,425,344)
    For $i = 0 To 4
    $ahCheckbox[$i] = GUICtrlCreateCheckbox($BoxNames[$i], $aLeft[$i], 40, $aLeft[$i + 1] - $aLeft[$i], 20)
    Next
    $Tip = GUICtrlCreateLabel("Tip: Wählt eine Widergabelisten Art aus. Seht euch die Hilfe an",24,64,203,25)
    $Create = GUICtrlCreateButton("Erstellen",232,64,59,25,$WS_GROUP)
    $ClearListViewB = GUICtrlCreateButton("Liste Leeren",296, 64, 67, 25, $WS_GROUP)
    $FolderSearch = GUICtrlCreateButton("...",400,16,19,25,$WS_GROUP)
    ;~ $Hilfe = GUICtrlCreateButton("Hilfe",368,64,59,25,$WS_GROUP)
    $Path = GUICtrlCreateInput("Path",24,16,377,21,$ES_READONLY)
    GUISetState(@SW_SHOW)
    ;~ MsgBox(0,'Checkbox',$Tip)
    #EndRegion ### Wiedergabelieste ###
    #Region ### Global ###
    Global $aID3, $aFiles, $sPath, $sNewItem, $Duration, $iMode, $sString, $Create, $FolderSearch,$FilePath
    Global $ahPlItem[1], $iPlCount = 0, $sID3Tags
    #EndRegion ### Global ###
    ;=============
    #Region ### Global ListView ###
    Global $LV_Style = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE)
    Global $LV_EX_STYLE = BitOR($LVS_EX_SUBITEMIMAGES, $LVS_EX_DOUBLEBUFFER, $LVS_EX_FULLROWSELECT)
    Global $ListView = GUICtrlCreateListView('Nr.|Artist|Title|Album|Länge|Path',16,104,409,321, $LV_Style, $LV_EX_STYLE)
    _GUICtrlListView_SetExtendedListViewStyle($ListView, $LV_EX_STYLE)
    _GUICtrlListView_RegisterSortCallBack($ListView)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 0, 32)
    GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 1, 100)
    GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 2, 100)
    GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 3, 110)
    GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 4, 50)
    GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 5, 120)
    #EndRegion ### Global ListView ###
    ;=============
    #Region ### Global ContextMenü ###
    Global $ContextMenue = GUICtrlCreateContextMenu($ListView)
    Global $DelItem = GUICtrlCreateMenuItem('Löschen', $ContextMenue)
    Global $AddItem = GUICtrlCreateMenuItem('File hinzufügen', $ContextMenue)
    Global $Import1 = GUICtrlCreateMenuItem('Playlist Importieren',$ContextMenue)
    Global $ClearListViewM1 = GUICtrlCreateMenuItem('Liste Leeren',$ContextMenue)
    #EndRegion ### Global ContextMenü ###
    ;=============
    #Region ### Global Menü ###
    Global $Menu = GUICtrlCreateMenu('Menü',-1,0)
    Global $Import = GUICtrlCreateMenuItem('Playlist Importieren',$Menu,0)
    Global $ClearListViewM = GUICtrlCreateMenuItem('Liste Leeren',$Menu,0)
    Global $Maske = GUICtrlCreateMenu('Maske',$menu,10)
    Global $Normal = GUICtrlCreateMenuItem('Standard',$Maske,1)
    Global $Black = GUICtrlCreateMenuItem('Schwarz',$Maske,2)
    Global $Red = GUICtrlCreateMenuItem('Rot',$Maske,3)

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

    Global $HelpMenu = GUICtrlCreateMenu('?',-1,10)
    Global $HelpItem = GUICtrlCreateMenuItem('Hilfe',$HelpMenu,0,1)
    #EndRegion ### Global Menü ###
    ;=============
    #Region ### GUI_Event ###
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $ListView
    _GUICtrlListView_SortItems($ListView, GUICtrlGetState($ListView))
    Case $Create
    _Create()
    Case $ClearListViewB, $ClearListViewM, $ClearListViewM1
    _ClearListView()
    Case $FolderSearch
    _FolderSearch()
    Case $HelpItem
    _Hilfe()
    Case $DelItem
    _DeleteSelected()
    Case $AddItem
    _addFile()
    Case $Import,$Import1
    _Import()

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

    Case $Normal
    _optNormal()
    Case $Black
    _optBlack()
    Case $Red
    _optRed()
    EndSwitch
    $dll = DllOpen("user32.dll")
    If _IsPressed("2E") Then
    _DeleteSelected()
    EndIf
    DllClose($dll)
    WEnd
    #EndRegion ### GUI_Event ###
    ;=============
    #Region ### _FolderSearch() ###
    Func _FolderSearch()
    $sPath = FileSelectFolder('Wähle einen MP3 Verzeichniss aus','', 4, '', '')
    ControlSetText('','',$Path,$sPath)
    $aFiles = _FileListToArray($sPath, '*.mp3', 1)
    _GUICtrlListView_AddArray($aFiles, $ListView)
    If Not @error Then
    $Duration= 0
    For $i = 1 To UBound($aFiles) - 1
    _AddFileToListView($sPath & "\" & $aFiles[$i])
    Next
    EndIf
    EndFunc
    #EndRegion ### _FolderSearch() ###
    ;=============
    #Region ### _addFile() ###
    Func _addFile()
    Local $aFiles
    $sPath = FileOpenDialog('Wähle die *.mp3 Datei aus','','(*.mp3)',4,'','')
    $aPaths = StringSplit($sPath,'|',1)
    If IsArray($aPaths) Then
    _GUICtrlListView_BeginUpdate($ListView)
    For $i = 1 To $aPaths[0]
    $Duration= 0
    _AddFileToListView($aPaths[$i])
    ;_GUICtrlListView_AddItem($ListView, $aPaths[$i])
    Next
    _GUICtrlListView_EndUpdate($ListView)
    Else
    _FehlerListViewItem()
    EndIf
    EndFunc
    #Endregion ### _addFile() ###
    ;=============
    #Region ### _AddFileToListView() ###
    Func _AddFileToListView($sPath) ;$aID3Tag[1][1] für Titel | $aID3Tag[2][1] für Artist | $aID3Tag[3][1] für Album | $aID3Tag[4][1] für die Länge | $aID3Tag[5][1] für die Titel Nr | $iPlCount + 1 Listet die zahl der ListView Items auf
    If Not FileExists($sPath) Then Return
    Local $aID3, $sNewItem
    $aID3 = _ReadID3Tag($sPath)
    If Not @error Then
    ReDim $ahPlItem[$iPlCount + 1]
    $Duration += $aID3[4][1]
    $sNewItem = $aID3[5][1] & '|' & $aID3[1][1] & '|' & $aID3[0][1] & '|' & $aID3[2][1] & '|' & $aID3[4][1] & '|' & $sPath; & '|' & $iPlCount + 1
    $ahPlItem[$iPlCount] = GUICtrlCreateListViewItem($sNewItem, $ListView)
    $iPlCount += 1
    EndIf
    EndFunc
    #EndRegion ### _AddFileToListView() ###
    ;=============
    #Region ### _Hilfe() ###
    Func _Hilfe()
    MsgBox(4096, 'Hilfe', 'Wiedergabelisten Beschreibung'&@CRLF&@CRLF&'Einfach auf den Button neben dem Langen'&@CRLF&'Editfeld Klicken und Verzeichniss auswählen'&@CRLF&'Dann auf Erstellen'&@CRLF&@CRLF&'WL erstellt einmehrere Playlists'&@CRLF&'z.B.'&@CRLF&'(*.wpl) - Windows Media Player'&@CRLF&'(*.pls) - Song Bird & Win Amp'&@CRLF&'(*.m3u) - Real Player'&@CRLF&'(*.xspf) - Video Lan (VLC)'&@CRLF&@CRLF&'Ein Danke an:'&@CRLF&'i2c: Für seine Hilfe und Ideen'&@CRLF&'Raupi: Auch für seine Hilfe'&@CRLF&@CRLF&'Createt by Skilkor')
    EndFunc
    #EndRegion ### _Hilfe() ###
    ;=============
    #Region ### _Fehler() ###
    Func _Fehler()
    MsgBox(48, 'Fehler', 'Keine Wiedergabelieste ausgewählt')
    EndFunc
    #EndRegion ### _Fehler() ###
    ;=============
    #Region ### _FehlerListViewItem() ###
    Func _FehlerListViewItem()
    $msg = MsgBox(48+4, 'Fehler', 'Keine "*.mp3" Dateien Gefunden'&@CRLF&'Neu Suchen?')
    If $msg = 6 Then
    _addFile()
    EndIf
    EndFunc
    #EndRegion ### _FehlerListViewItem() ###
    ;=============
    #Region ### _FehlerListView() ###
    Func _FehlerListView()
    $msg = MsgBox(48+4, 'Fehler', 'Keine "*.mp3" einträge Gefunden'&@CRLF&'Neu Suchen?')
    If $msg = 6 Then
    _FolderSearch()
    EndIf
    EndFunc
    #EndRegion ### _FehlerListView() ###
    ;=============
    #Region ### _Create() ###
    Func _Create()
    If _GUICtrlListView_GetItemCount($ListView) = 0 Then
    _FehlerListView()
    EndIf
    For $i = 0 To 4
    If BitAND(GUICtrlRead($ahCheckbox[$i]), $GUI_CHECKED) Then Call($aFunktions[$i])
    ;~ MsgBox(0,'Checkbox',$ahCheckbox[$i])
    Next
    EndFunc
    #EndRegion ### _Create() ###
    ;=============
    #Region ### _ListView() Leeren ###
    Func _ClearListView()
    _GUICtrlListView_DeleteAllItems($ListView)
    EndFunc
    #EndRegion ### _ListView() Leeren ###
    ;=============
    #Region ### _DeleteSelected ###
    Func _DeleteSelected()
    _GUICtrlListView_DeleteItemsSelected($ListView)
    EndFunc
    #EndRegion ### _DeleteSelected ###
    ;=============
    #Region ### _Import() ### von i2c (Teils Bsp)
    Func _Import()
    $FilePath = FileOpenDialog('Playlist Importieren', '', 'Alle Playlists (*.wpl;*.pls;*.xspf;*.m3u)|(*.wpl)|(*.pls)|(*.xspf)|(*.m3u)')
    If StringRight($FilePath, 4) = ".wpl" Then
    $hFile = FileOpen($FilePath)
    $sRead = FileRead($hFile)
    FileClose($hFile)
    If Not @error Then
    $aTmp = StringRegExp($sRead, '<media\ssrc=\"(.*?)\"', 3, 1)
    If IsArray($aTmp) Then
    $aFolder = StringRegExp($FilePath, "(.*)\\", 1, 1)
    If IsArray($aFolder) Then
    $aParent = StringRegExp($aFolder[0], "(.*)\\", 1, 1)
    Else
    MsgBox(0, "Fehler", "Datei konnte nicht importiert werden")
    Return
    EndIf
    For $i = UBound($aTmp) - 1 To 0 Step -1
    If StringLeft($aTmp[$i], 2) = '..' Then
    $sTmp = $aParent[0] & StringTrimLeft($aTmp[$i], 2)
    If Not FileExists($sTmp) Then
    MsgBox(0, "Fehler", "Datei: " & $sTmp & @CRLF & "Datei existiert nicht")
    _ArrayDelete($aTmp, $i)
    Else
    $aTmp[$i] = $sTmp
    EndIf
    EndIf
    Next
    EndIf
    Else
    MsgBox(0, "Fehler", "Datei konnte nicht importiert werden")
    Return
    EndIf
    EndIf

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

    If StringRight($FilePath, 4) = ".pls" Then ;Wen es eine *.pls Datei ist DANN
    If MsgBox(4+48,'*.pls Fortfahren','Nur *.pls Playlist die mit >WL< erstellt wurden, "Solten" importiert werden'&@CRLF&'Fortfahren?') = 7 Then ;Wenn NEIN dann Return
    Return
    EndIf
    $hFile = FileOpen($FilePath) ;Öffne *.pls Playlist
    $sRead = FileRead($hFile) ;Lesse *.pls Playlist
    FileClose($hFile) ;Schliesse *.pls Playlist
    If Not @error Then ;Wen nicht ERROR DANN
    $aTmp = StringRegExp($sRead, 'File\d+\=(.*)', 3, 1) ;Dateipfade einlesen
    EndIf
    If StringLeft($aTmp[$i], 2) = '..' Then
    For $i = UBound($aTmp) - 1 To 0 Step -1 ;~ Array rückwärts durchlaufen
    If StringLeft($aTmp[$i], 2) = '..' Then ;~ wenn die ersten beiden Zeichen '..' sind, ist es ein relativer Pfad
    $aCount = StringRegExp($aTmp[$i], '(\.\.\/)', 3, 1) ;~ zähle alle '../' im String um das Level des relativen Pfades herauszufinden
    $aFolder = StringSplit($FilePath, "\") ;~ den Ordnerpfad (Playlist) an den \'s aufsplitten.
    ;~ Das Array mit den einzelnen Ordnern wieder in einen String umwandeln.
    ;~ Der 4te Parameter: (Anzahl Elemente von $aFolder)-Anzahl der relativen Pfadebenen in $aCount
    ;~ Ergebnis: Der Ordner, von dem aus der absolute Teil des relativen Dateipfads weiter zur MP3 führt.
    $sTmp = _ArrayToString($aFolder, "\", 1, (UBound($aFolder) - 1) - UBound($aCount))
    $aTmp[$i] = StringReplace($aTmp[$i], "../", "") ;~ Alle '../' aus dem relativen Pfad entfernen
    $aTmp[$i] = StringReplace($aTmp[$i], "/", "\") ;~ '/' durch '\' ersetzen, damit ein anständiger Pfad draus wird
    $sTmp = $sTmp & "\" & $aTmp[$i] ;~ Den absoluten Pfad aus dem gekürzten Pfad der Playlist und dem 'gesäuberten' Pfad der MP3 zusammenbauen
    If Not FileExists($sTmp) Then ;~ Prüfen ob die Datei dort existiert
    MsgBox(0, "Fehler", "Datei: " & $sTmp & @CRLF & "Datei existiert nicht")
    _ArrayDelete($aTmp, $i) ;~ Wenn nicht, dann das Element aus dem Array löschen
    Else
    $aTmp[$i] = $sTmp ;~ wenn sie existiert, den Pfad in das Arrayelement schreiben
    EndIf
    EndIf
    Next
    EndIf

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

    EndIf

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

    _ArrayDisplay($aTmp,'$aTmp vor Import')
    If IsArray($aTmp) Then
    _GUICtrlListView_BeginUpdate($ListView)
    For $i = 0 To UBound($aTmp) - 1
    $Duration = 0
    _AddFileToListView($aTmp[$i])
    Next
    _GUICtrlListView_EndUpdate($ListView)
    Else
    MsgBox(0, "Fehler", "Keine Daten zum importieren.")
    Return
    EndIf
    EndFunc
    #EndRegion ### _Import() ### von i2c (Teils Bsp)
    ;=============
    #Region ### _WMP() ### *.wpl
    Func _WMP()
    Local $sSaveFilename,$hFile, $iCount = _GUICtrlListView_GetItemCount($ListView)
    If $iCount = 0 Then Return
    $sSaveFilename = FileSaveDialog('Wähle einen Namen für die MP3-Playlist',@DesktopDir, 'Windows Media Player-Playlist (*.wpl)', 18, '')
    $Folder = $sSaveFilename
    $aFolder = StringSplit($Folder,"\")
    If IsArray($aFolder) Then $Folder = $aFolder[$aFolder[0]-1] & "\" & $aFolder[$aFolder[0]]
    If Not @error Then
    If StringRight($sSaveFilename, 4) <> '.wpl' Then $sSaveFilename &= '.wpl'
    $hFile = FileOpen($sSaveFilename, 128 + 2)
    If $hFile <> -1 Then
    FileWrite($hFile, '<?wpl version="1.0"?>'&@CRLF)
    FileWrite($hFile, '<smil>'&@CRLF)
    FileWrite($hFile, ' <head>'&@CRLF)
    FileWrite($hFile, ' <meta name="Generator" content="Microsoft Windows Media Player -- "/>'&@CRLF)
    FileWrite($hFile, ' <meta name="ItemCount" content="'&$iPlCount&'"/>'&@CRLF)
    FileWrite($hFile, ' <meta name="TotalDuration" content="'&$Duration&'"/>'&@CRLF)
    FileWrite($hFile, ' <author/>'&@CRLF)
    FileWrite($hFile, ' <title>'&$Folder&'</title>'&@CRLF)
    FileWrite($hFile, ' </head>'&@CRLF)
    FileWrite($hFile, ' <body>'&@CRLF)
    FileWrite($hFile, ' <seq>'&@CRLF)
    For $i = 0 To $iCount
    FileWriteLine($hFile, ' <media src="'& _GUICtrlListView_GetItemText($ListView,$i,5)&'"/>')
    Next
    FileWrite($hFile, ' </seq>'&@CRLF)
    FileWrite($hFile, ' </body>'&@CRLF)
    FileWrite($hFile, '</smil>'&@CRLF)
    FileClose($hFile)
    EndIf
    EndIf
    EndFunc
    #EndRegion ### _WMP() ###
    ;=============
    #Region ### _SongBird() ### *.pls
    Func _SongBird()
    Local $sSaveFilename,$hFile, $iCount = _GUICtrlListView_GetItemCount($ListView)
    If $iCount = 0 Then Return
    $sSaveFilename = FileSaveDialog('Wähle einen Namen für die MP3-Playlist',@DesktopDir, 'SongBird-Playlist (*.pls)', 18, '')
    If Not @error Then
    If StringRight($sSaveFilename, 4) <> '.pls' Then $sSaveFilename &= '.pls'
    $hFile = FileOpen($sSaveFilename, 2)
    If $hFile <> -1 Then
    FileWrite($hFile, '[playlist]'&@CRLF)
    FileWrite($hFile, 'NumberOfEntries=1'&@CRLF&@CRLF)
    For $i = 0 To $iCount
    FileWriteLine($hFile,'File'&$i+1&'='& _GUICtrlListView_GetItemText($ListView,$i,5))
    FileWriteLine($hFile,'Title'&$i+1&'='& _GUICtrlListView_GetItemText($ListView,$i,1)&' - '&_GUICtrlListView_GetItemText($ListView,$i,2))
    FileWriteLine($hFile,'Length'&$i+1&'='& _GUICtrlListView_GetItemText($ListView,$i,4)&@CRLF&@CRLF)
    Next
    FileWrite($hFile, @CRLF&'Version=2'&@CRLF)
    FileClose($hFile)
    EndIf
    EndIf
    EndFunc
    #Endregion ### _SongBird() ###
    ;=============
    #Region ### _WAMP() ### *.m3u
    Func _WAMP()
    Local $sSaveFilename,$hFile, $iCount = _GUICtrlListView_GetItemCount($ListView)
    If $iCount = 0 Then Return
    $sSaveFilename = FileSaveDialog('Wähle einen Namen für die MP3-Playlist',@DesktopDir, 'MP3-Playlist (*.m3u)', 18, '')
    If Not @error Then
    If StringRight($sSaveFilename, 4) <> '.m3u' Then $sSaveFilename &= '.m3u'
    $hFile = FileOpen($sSaveFilename, 2)
    If $hFile <> -1 Then
    FileWrite($hFile, '#EXTM3U' & @CRLF)
    For $i = 0 To $iCount - 1
    FileWriteLine($hFile, '#EXTINF:' & _GUICtrlListView_GetItemText($ListView,$i,4) & ',' & _GUICtrlListView_GetItemText($ListView,$i,1) & ' - ' & _GUICtrlListView_GetItemText($ListView,$i,2)& ' - ' & 'Track Nr' & _GUICtrlListView_GetItemText($ListView,$i,0) & ' end')
    FileWriteLine($hFile, _GUICtrlListView_GetItemText($ListView,$i,5))
    Next
    FileClose($hFile)
    EndIf
    EndIf
    EndFunc
    #EndRegion ### _WAMP() ###
    ;=============
    #Region ### _VLC() ### *.xspf
    Func _VLC()
    Local $sSaveFilename,$hFile, $iCount = _GUICtrlListView_GetItemCount($ListView)
    If $iCount = 0 Then Return
    $sSaveFilename = FileSaveDialog('Wähle einen Namen für die MP3-Playlist',@DesktopDir, 'VLC-Playlist (*.xspf)', 18, '')
    $Folder = $sSaveFilename
    $aFolder = StringSplit($Folder,"\")
    If IsArray($aFolder) Then $Folder = $aFolder[$aFolder[0]-1] & "\" & $aFolder[$aFolder[0]]
    If Not @error Then
    If StringRight($sSaveFilename, 4) <> '.xspf' Then $sSaveFilename &= '.xspf'
    $hFile = FileOpen($sSaveFilename, 128 + 2)
    If $hFile <> -1 Then
    FileWrite($hFile, '<?xml version="1.0" encoding="UTF-8"?>'&@CRLF)
    FileWrite($hFile, '<playlist version="1" xmlns="http://xspf.org/ns/0/" xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/">'&@CRLF)
    FileWrite($hFile, ' <title>'&$Folder&'</title>'&@CRLF)
    FileWrite($hFile, ' <trackList>'&@CRLF)
    For $i = 0 To $iCount - 1
    FileWriteLine($hFile,' <track>')
    FileWriteLine($hFile,' <location>file:///'& _GUICtrlListView_GetItemText($ListView,$i,5)&'</location>')
    FileWriteLine($hFile,' <title>'& _GUICtrlListView_GetItemText($ListView,$i,2)&'</title>')
    FileWriteLine($hFile,' <creator>'& _GUICtrlListView_GetItemText($ListView,$i,1)&'</creator>')
    FileWriteLine($hFile,' <album>'& _GUICtrlListView_GetItemText($ListView,$i,3)&'</album>')
    FileWriteLine($hFile,' <trackNum>'& _GUICtrlListView_GetItemText($ListView,$i,0)&'</trackNum>')
    FileWriteLine($hFile,' <image>file:///'&''&'</image>')
    FileWriteLine($hFile,' <extension application="http://www.videolan.org/vlc/playlist/0">')
    FileWriteLine($hFile,' <vlc:id>'& _GUICtrlListView_GetItemText($ListView,$i,0)&'</vlc:id>')
    FileWriteLine($hFile,' </extension>')
    FileWriteLine($hFile,' </track>')
    Next
    FileWrite($hFile, ' </trackList>'&@CRLF)
    FileWrite($hFile, ' <extension application="http://www.videolan.org/vlc/playlist/0">'&@CRLF)
    If $hFile <> -1 Then
    For $i = 0 To $iCount - 2
    FileWriteLine($hFile, ' <vlc:item tid="'&_GUICtrlListView_GetItemText($ListView,$i,0)&'" />')
    Next
    FileWrite($hFile, ' </extension>'&@CRLF)
    FileWrite($hFile, '</playlist>')
    FileClose($hFile)
    EndIf
    EndIf
    EndIf
    EndFunc
    #EndRegion ### _VLC() ###
    ;=============
    #Region ### _RPlayer() ### *.m3u
    Func _RPlayer()
    Local $sSaveFilename,$hFile, $iCount = _GUICtrlListView_GetItemCount($ListView)
    If $iCount = 0 Then Return
    $sSaveFilename = FileSaveDialog('Wähle einen Namen für die MP3-Playlist',@DesktopDir, 'MP3-Playlist (*.m3u)', 18, '')
    If Not @error Then
    If StringRight($sSaveFilename, 4) <> '.m3u' Then $sSaveFilename &= '.m3u'
    $hFile = FileOpen($sSaveFilename, 2)
    If $hFile <> -1 Then
    FileWrite($hFile, '#EXTM3U' & @CRLF)
    For $i = 0 To $iCount - 1
    FileWriteLine($hFile, '#EXTINF:' & _GUICtrlListView_GetItemText($ListView,$i,4) & ',' & _GUICtrlListView_GetItemText($ListView,$i,1) & ' - ' & _GUICtrlListView_GetItemText($ListView,$i,2)& ' - ' & 'Track Nr' & _GUICtrlListView_GetItemText($ListView,$i,0) & ' end')
    FileWriteLine($hFile, _GUICtrlListView_GetItemText($ListView,$i,5))
    Next
    FileClose($hFile)
    EndIf
    EndIf
    EndFunc
    #EndRegion ### _RPlayer() ###
    ;=============
    #Region ### _ID3Tag() ### Von Oscar
    Func _ReadID3Tag($sPath)
    If Not FileExists($sPath) Then Return SetError(1, 0, 0)
    Local $hFile, $sData, $sID3Header, $iID3HeaderSize = 0, $iOffset, $iSize, $tmp
    Local $aID3v2Tags[8] = ['TIT2', 'TPE1', 'TALB', 'TYER', 'TLEN', 'TRCK', 'TCON', 'TENC']
    Local $aID3[11][2] = [ _
    ['Title', ''],['Artist', ''],['Album', ''],['Year', ''], _
    ['Length', '0'],['Track', ''],['Genre', ''],['Encoder', ''], _
    ['MPEG-Version', ''],['Bitrate', ''],['Sample-Freq.', '']]
    Local $aMP3Version[4] = ['MPEG2.5', 'Reserved', 'MPEG2', 'MPEG1']
    Local $aMP3Layer[4] = ['Reserved', 'Layer III', 'Layer II', 'Layer I']
    Local $aMP3Bitrate[5][16] = [ _
    [000, 032, 064, 096, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 000], _
    [000, 032, 048, 056, 064, 080, 096, 112, 128, 160, 192, 224, 256, 320, 384, 000], _
    [000, 032, 040, 048, 056, 064, 080, 096, 112, 128, 160, 192, 224, 256, 320, 000], _
    [000, 032, 048, 056, 064, 080, 096, 112, 128, 144, 160, 176, 192, 224, 256, 000], _
    [000, 008, 016, 024, 032, 040, 048, 056, 064, 080, 096, 112, 128, 144, 160, 000]]
    Local $aSampleFreq[3][4] = [[44100, 48000, 32000, 0],[22050, 24000, 16000, 0],[11025, 12000, 8000, 0]]
    Local $sMP3FrameHeader, $iMP3Version, $sMP3Version, $sMP3Layer, $iMP3Bitrate, $iMP3SampleFreq
    Local $iVBRFrames = -1, $iVBRFilesize, $iVBRFlags
    $hFile = FileOpen($sPath, 16)
    If $hFile = -1 Then Return SetError(2, 0, 0)
    $sData = Binary(FileRead($hFile, 4))
    If BinaryMid($sData, 1, 3) = '0x494433' Then ; ID3 v2.x Kennung gefunden
    If (BinaryMid($sData, 4, 1) = '0x03') Or (BinaryMid($sData, 4, 1) = '0x04') Then ; nur v2.3 und 2.4
    FileRead($hFile, 2) ; 2 Bytes überspringen
    For $i = 0 To 3 ; berechne ID3-Headergröße (4 Bytes, jedoch nur jeweils die unteren 7 Bit)
    $iID3HeaderSize = BitShift($iID3HeaderSize, -7) + BitAND(Binary(FileRead($hFile, 1)), 0x7F)
    Next
    If $iID3HeaderSize > 0 Then
    $sID3Header = Binary(FileRead($hFile, $iID3HeaderSize)) ; lese gesamten ID3-Header
    For $i = 0 To 7
    $iOffset = StringInStr(BinaryToString($sID3Header), $aID3v2Tags[$i]) ; Offset zu dem ID3-Tag
    If $iOffset > 0 Then
    $iSize = Hex(BinaryMid($sID3Header, $iOffset + 4, 4)) ; Größe des ID3-Frames
    $tmp = BinaryMid($sID3Header, $iOffset + 11, Dec($iSize) - 1)
    If BinaryMid($tmp, 1, 2) = '0xFFFE' Then
    For $x = 3 To BinaryLen($tmp) Step 2
    $aID3[$i][1] &= BinaryToString(BinaryMid($tmp, $x, 2), 2)
    Next
    Else
    For $x = 1 To BinaryLen($tmp)
    $aID3[$i][1] &= BinaryToString(BinaryMid($tmp, $x, 1))
    Next
    EndIf
    $aID3[$i][1] = StringReplace($aID3[$i][1], Chr(0), '')
    EndIf
    Next
    EndIf
    Do
    $sData = String(FileRead($hFile, 1))
    If @error Then ExitLoop
    If BitAND($sData, 0xff) = 0xff Then
    FileSetPos($hFile, -1, 1)
    $sData = String(FileRead($hFile, 4))
    EndIf
    Until BitAND($sData, 0xFFE00000) = 0xFFE00000
    Else
    FileClose($hFile)
    Return SetError(3, 0, 0)
    EndIf
    Else ; ID3 v1.x
    $iOffset = FileGetPos($hFile)
    FileSetPos($hFile, -128, 2)
    $sID3Header = BinaryToString(FileRead($hFile, 3))
    If $sID3Header = 'TAG' Then
    $aID3[0][1] = StringReplace(BinaryToString(FileRead($hFile, 30)), Chr(0), '')
    $aID3[1][1] = StringReplace(BinaryToString(FileRead($hFile, 30)), Chr(0), '')
    $aID3[2][1] = StringReplace(BinaryToString(FileRead($hFile, 30)), Chr(0), '')
    $aID3[3][1] = StringReplace(BinaryToString(FileRead($hFile, 4)), Chr(0), '')
    EndIf
    FileSetPos($hFile, $iOffset, 0)
    EndIf
    $sMP3FrameHeader = String($sData)
    If BitAND($sMP3FrameHeader, 0xFFE00000) <> 0xFFE00000 Then
    FileClose($hFile)
    Return SetError(4, 0, 0) ; keine MP3-Datei, dann Return
    EndIf
    $iMP3Version = BitShift(BitXOR($sMP3FrameHeader, 0xFFE00000), 19) ; welche MP3-Version
    $sMP3Version = $aMP3Version[$iMP3Version] ; in Textform
    $sMP3Layer = $aMP3Layer[BitShift(BitAND($sMP3FrameHeader, 0x60000), 17)] ; welcher Layer
    $aID3[8][1] = $sMP3Version & ' / ' & $sMP3Layer ; ins Ausgabe-Array
    $iMP3Bitrate = BitShift(BitAND($sMP3FrameHeader, 0xF000), 12) ; Bitraten-Index auslesen
    Switch $sMP3Version ; je nach MPEG-Version Bitrate aus der Tabelle holen
    Case 'MPEG1'
    $aID3[9][1] = $aMP3Bitrate[$iMP3Version - ($iMP3Version > 1)][$iMP3Bitrate]
    Case 'MPEG2', 'MPEG2.5'
    If $sMP3Layer = 'Layer I' Then
    $aID3[9][1] = $aMP3Bitrate[3][$iMP3Bitrate]
    Else
    $aID3[9][1] = $aMP3Bitrate[4][$iMP3Bitrate]
    EndIf
    EndSwitch
    $iMP3SampleFreq = BitShift(BitAND($sMP3FrameHeader, 0xC00), 10) ; Sample-Frequenz-Index auslesen
    $aID3[10][1] = $aSampleFreq[2 - ($iMP3Version - ($iMP3Version > 1))][$iMP3SampleFreq] ; und Wert aus der Tabelle holen
    Do ; evtl. Leerbytes überspringen
    $tmp = FileRead($hFile, 1)
    If @error Then ExitLoop
    Until $tmp <> 0x00 Or @error
    If $tmp = 0x58 And BinaryToString(FileRead($hFile, 3)) = 'ing' Then ; MP3 mit VBR (Xing-Header gefunden)?
    $iVBRFlags = '0x' & Hex(FileRead($hFile, 4)) ; VBR-Flags auslesen
    If BitAND($iVBRFlags, 0x3) Then ; wenn die Einträge vorhanden sind, dann...
    $iVBRFrames = Dec(Hex(FileRead($hFile, 4))) ; Anzahl der VBR-Frames auslesen
    $iVBRFilesize = Dec(Hex(FileRead($hFile, 4))) ; Dateigröße auslesen
    $aID3[4][1] = $iVBRFrames * 1152 / $aID3[10][1] * 1000 ; VBR Laufzeit
    $aID3[9][1] = 'VBR ~' & Int($iVBRFilesize * 8 / ($aID3[4][1] / 1000) / 1000) ; VBR durchschnittliche Bitrate
    EndIf
    Else
    If $aID3[4][1] = 0 Then $aID3[4][1] = (FileGetSize($sPath) * 8) / ($aID3[9][1] * 1000) * 1000 ; alternative CBR Laufzeit
    $aID3[9][1] = 'CBR ' & $aID3[9][1]
    EndIf
    $aID3[4][1] = Int($aID3[4][1] / 1000) ; Laufzeit
    $aID3[9][1] &= ' kBit/s'
    $aID3[10][1] &= ' Hz'
    FileClose($hFile)
    Return $aID3
    EndFunc ;==>_ReadID3Tag
    #EndRegion ### _ID3Tag() ### Von Oscar
    ;=============
    #Region ### _optNormal() ###
    Func _optNormal()
    GUISetBkColor(0xF0F0F0,$WL)
    GUICtrlSetColor(10, 0x000000)
    EndFunc
    #EndRegion ### _optNormal() ###
    ;=============
    #Region ### _optBlack() ###
    Func _optBlack()
    GUISetBkColor(0x000000,$WL)
    GUICtrlSetColor(10, 0xFFFFFF)
    EndFunc
    #EndRegion ### _optBlack() ### GUISetBkColor(0xFF0000)
    ;=============
    #Region ### _optRed() ###
    Func _optRed()
    GUISetBkColor(0xFF0000,$WL)
    GUICtrlSetColor(10, 0x000000)
    EndFunc
    #EndRegion ### _optRed() ###
    ;=============

    [/autoit]


    So ab Zeile 275 bis 307 ist die Betreffenden Stelle
    Er gibt mir im _ArrayDisplay($aTmp, '$aTmp VOR einbindung') alles korekt an, die Angaben sind Identisch wie bei der *.wpl beim Importieren (Die *.wpl Importation Funktioniert)
    Am besten könnt ihr dies sehen wen ihr den Code mal ausführt eine *.wpl (Windows Media Player) playlist erstellt und eine *.pls (SongBird) Playlist, dan Importiert Ihr die *.wpl und seht euch das _ArrayDisplay($aTmp, '$aTmp VOR einbindung') an. und dan das Selbige mit der *.pls .
    Ich Versuche schon seit bald 2 tagen dieses Rätzel zu lösen und komme einfach nicht dahinter.

    Ich weiss, es lässt sich sicherlich noch so Einiges Verkürtzen :D das aber Später :D

    ***Edit***
    Anscheinend kahm mein Mysterium nicht ganz an ^^
    Es geht darum das die Import Funktion der *.pls nicht funktioniert trotz der Identischen _ArrayDisplay() angaben im vergleich zu der *.wpl Import...

    Skilkor

    3 Mal editiert, zuletzt von Skilkor (17. März 2011 um 13:57)

  • Lad mal zwei Playlisten hoch damit man es testen kann.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • bringt doch nichts wen ihr dan die Dateien nicht habt. deswegen hab ich extra geschrieben

    Am besten könnt ihr dies sehen wen ihr den Code mal ausführt eine *.wpl (Windows Media Player) playlist erstellt und eine *.pls (SongBird) Playlist, dan Importiert Ihr die *.wpl und seht euch das _ArrayDisplay($aTmp, '$aTmp VOR einbindung') an. und dan das Selbige mit der *.pls .


    :D
    Ich arbeite mit den Playlists die ich zuvor mit dem Script erstellt habe

  • Spoiler anzeigen
    [autoit]

    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=icons\prog01.ico
    #AutoIt3Wrapper_outfile=WL.exe
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_UseX64=n
    #AutoIt3Wrapper_Res_Fileversion=1.5.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=Skilkor(http://www.autoit.de)(Hilfe: Oscar & i2c & Raupi & ohforf & Twodollarbillie)
    #AutoIt3Wrapper_Res_Language=1031
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;==============
    #region ### include ###
    #include <Array.au3>
    #include <File.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <GuiImageList.au3>
    #include <Misc.au3>
    #include <EditConstants.au3>
    #endregion ### include ###
    ;=============
    #region ### Global Ini ###
    ;~ Global $sInifile = @ScriptDir & '\Conf.ini' ; Inidatei
    #endregion ### Global Ini ###
    ;=============
    #region ### IniRead ###
    #endregion ### IniRead ###
    ;=============
    #region ### Global Checkbox ###
    Global $ahCheckbox[5]
    Global $BoxNames[5] = ['Windows Media Player', 'Songbird', 'WinAmp', 'VLC', 'RealPlayer']
    Global $aFunktions[5] = ['_WMP', '_SongBird', '_WAmp', '_VLC', '_RPlayer']
    Global $aLeft[6] = [24, 155, 220, 280, 325, 400]
    Global $aTmp
    #endregion ### Global Checkbox ###
    ;=============
    #region ### Wiedergabelieste ###
    $WL = GUICreate("WL Creater", 442, 460, -1, -1)
    GUICtrlCreateGroup("", 8, 0, 425, 97)
    GUICtrlCreateGroup("", 8, 89, 425, 344)
    For $i = 0 To 4
    $ahCheckbox[$i] = GUICtrlCreateCheckbox($BoxNames[$i], $aLeft[$i], 40, $aLeft[$i + 1] - $aLeft[$i], 20)
    Next
    $Tip = GUICtrlCreateLabel("Tip: Wählt eine Widergabelisten Art aus. Seht euch die Hilfe an", 24, 64, 203, 25)
    $Create = GUICtrlCreateButton("Erstellen", 232, 64, 59, 25, $WS_GROUP)
    $ClearListViewB = GUICtrlCreateButton("Liste Leeren", 296, 64, 67, 25, $WS_GROUP)
    $FolderSearch = GUICtrlCreateButton("...", 400, 16, 19, 25, $WS_GROUP)
    ;~ $Hilfe = GUICtrlCreateButton("Hilfe",368,64,59,25,$WS_GROUP)
    $Path = GUICtrlCreateInput("Path", 24, 16, 377, 21, $ES_READONLY)

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

    ;~ MsgBox(0,'Checkbox',$Tip)
    #endregion ### Wiedergabelieste ###
    #region ### Global ###
    Global $aID3, $aFiles, $sPath, $sNewItem, $Duration, $iMode, $sString, $Create, $FolderSearch, $FilePath
    Global $ahPlItem[1], $iPlCount = 0, $sID3Tags
    #endregion ### Global ###
    ;=============
    #region ### Global ListView ###
    Global $LV_Style = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE)
    Global $LV_EX_STYLE = BitOR($LVS_EX_SUBITEMIMAGES, $LVS_EX_DOUBLEBUFFER, $LVS_EX_FULLROWSELECT)
    Global $ListView = GUICtrlCreateListView('Nr.|Artist|Title|Album|Länge|Path', 16, 104, 409, 321, $LV_Style, $LV_EX_STYLE)
    _GUICtrlListView_SetExtendedListViewStyle($ListView, $LV_EX_STYLE)
    _GUICtrlListView_RegisterSortCallBack($ListView)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 0, 32)
    GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 1, 100)
    GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 2, 100)
    GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 3, 110)
    GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 4, 50)
    GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 5, 120)
    #endregion ### Global ListView ###
    ;=============
    #region ### Global ContextMenü ###
    Global $ContextMenue = GUICtrlCreateContextMenu($ListView)
    Global $DelItem = GUICtrlCreateMenuItem('Löschen', $ContextMenue)
    Global $AddItem = GUICtrlCreateMenuItem('File hinzufügen', $ContextMenue)
    Global $Import1 = GUICtrlCreateMenuItem('Playlist Importieren', $ContextMenue)
    Global $ClearListViewM1 = GUICtrlCreateMenuItem('Liste Leeren', $ContextMenue)
    #endregion ### Global ContextMenü ###
    ;=============
    #region ### Global Menü ###
    Global $Menu = GUICtrlCreateMenu('Menü', -1, 0)
    Global $Import = GUICtrlCreateMenuItem('Playlist Importieren', $Menu, 0)
    Global $ClearListViewM = GUICtrlCreateMenuItem('Liste Leeren', $Menu, 0)
    Global $Maske = GUICtrlCreateMenu('Maske', $Menu, 10)
    Global $Normal = GUICtrlCreateMenuItem('Standard', $Maske, 1)
    Global $Black = GUICtrlCreateMenuItem('Schwarz', $Maske, 2)
    Global $Red = GUICtrlCreateMenuItem('Rot', $Maske, 3)

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

    Global $HelpMenu = GUICtrlCreateMenu('?', -1, 10)
    Global $HelpItem = GUICtrlCreateMenuItem('Hilfe', $HelpMenu, 0, 1)
    GUISetState(@SW_SHOW)
    #endregion ### Global Menü ###
    ;=============
    #region ### GUI_Event ###
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $ListView
    _GUICtrlListView_SortItems($ListView, GUICtrlGetState($ListView))
    Case $Create
    _Create()
    Case $ClearListViewB, $ClearListViewM, $ClearListViewM1
    _ClearListView()
    Case $FolderSearch
    _FolderSearch()
    Case $HelpItem
    _Hilfe()
    Case $DelItem
    _DeleteSelected()
    Case $AddItem
    _addFile()
    Case $Import, $Import1
    _Import()

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

    Case $Normal
    _optNormal()
    Case $Black
    _optBlack()
    Case $Red
    _optRed()
    EndSwitch
    $dll = DllOpen("user32.dll")
    If _IsPressed("2E") Then
    _DeleteSelected()
    EndIf
    DllClose($dll)
    WEnd
    #endregion ### GUI_Event ###
    ;=============
    #region ### _FolderSearch() ###
    Func _FolderSearch()
    $sPath = FileSelectFolder('Wähle einen MP3 Verzeichniss aus', '', 4, '', '')
    ControlSetText('', '', $Path, $sPath)
    $aFiles = _FileListToArray($sPath, '*.mp3', 1)
    _GUICtrlListView_AddArray($aFiles, $ListView)
    If Not @error Then
    $Duration = 0
    For $i = 1 To UBound($aFiles) - 1
    _AddFileToListView($sPath & "\" & $aFiles[$i])
    Next
    EndIf
    EndFunc ;==>_FolderSearch
    #endregion ### _FolderSearch() ###
    ;=============
    #region ### _addFile() ###
    Func _addFile()
    Local $aFiles
    $sPath = FileOpenDialog('Wähle die *.mp3 Datei aus', '', '(*.mp3)', 4, '', '')
    $aPaths = StringSplit($sPath, '|', 1)
    If IsArray($aPaths) Then
    _GUICtrlListView_BeginUpdate($ListView)
    For $i = 1 To $aPaths[0]
    $Duration = 0
    _AddFileToListView($aPaths[$i])
    ;_GUICtrlListView_AddItem($ListView, $aPaths[$i])
    Next
    _GUICtrlListView_EndUpdate($ListView)
    Else
    _FehlerListViewItem()
    EndIf
    EndFunc ;==>_addFile
    #endregion ### _addFile() ###
    ;=============
    #region ### _AddFileToListView() ###
    Func _AddFileToListView($sPath) ;$aID3Tag[1][1] für Titel | $aID3Tag[2][1] für Artist | $aID3Tag[3][1] für Album | $aID3Tag[4][1] für die Länge | $aID3Tag[5][1] für die Titel Nr | $iPlCount + 1 Listet die zahl der ListView Items auf
    $New = StringReplace($sPath, @CR, "")
    $sPath = $New
    If Not FileExists($sPath) Then MsgBox(0, "Fehler", $sPath & " existiert nicht!")
    Local $aID3, $sNewItem
    $aID3 = _ReadID3Tag($sPath)
    If Not @error Then
    ReDim $ahPlItem[$iPlCount + 1]
    $Duration += $aID3[4][1]
    $sNewItem = $aID3[5][1] & '|' & $aID3[1][1] & '|' & $aID3[0][1] & '|' & $aID3[2][1] & '|' & $aID3[4][1] & '|' & $sPath; & '|' & $iPlCount + 1
    $ahPlItem[$iPlCount] = GUICtrlCreateListViewItem($sNewItem, $ListView)
    $iPlCount += 1

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

    EndIf
    EndFunc ;==>_AddFileToListView
    #endregion ### _AddFileToListView() ###
    ;=============
    #region ### _Hilfe() ###
    Func _Hilfe()
    MsgBox(4096, 'Hilfe', 'Wiedergabelisten Beschreibung' & @CRLF & @CRLF & 'Einfach auf den Button neben dem Langen' & @CRLF & 'Editfeld Klicken und Verzeichniss auswählen' & @CRLF & 'Dann auf Erstellen' & @CRLF & @CRLF & 'WL erstellt einmehrere Playlists' & @CRLF & 'z.B.' & @CRLF & '(*.wpl) - Windows Media Player' & @CRLF & '(*.pls) - Song Bird & Win Amp' & @CRLF & '(*.m3u) - Real Player' & @CRLF & '(*.xspf) - Video Lan (VLC)' & @CRLF & @CRLF & 'Ein Danke an:' & @CRLF & 'i2c: Für seine Hilfe und Ideen' & @CRLF & 'Raupi: Auch für seine Hilfe' & @CRLF & @CRLF & 'Createt by Skilkor')
    EndFunc ;==>_Hilfe
    #endregion ### _Hilfe() ###
    ;=============
    #region ### _Fehler() ###
    Func _Fehler()
    MsgBox(48, 'Fehler', 'Keine Wiedergabelieste ausgewählt')
    EndFunc ;==>_Fehler
    #endregion ### _Fehler() ###
    ;=============
    #region ### _FehlerListViewItem() ###
    Func _FehlerListViewItem()
    $msg = MsgBox(48 + 4, 'Fehler', 'Keine "*.mp3" Dateien Gefunden' & @CRLF & 'Neu Suchen?')
    If $msg = 6 Then
    _addFile()
    EndIf
    EndFunc ;==>_FehlerListViewItem
    #endregion ### _FehlerListViewItem() ###
    ;=============
    #region ### _FehlerListView() ###
    Func _FehlerListView()
    $msg = MsgBox(48 + 4, 'Fehler', 'Keine "*.mp3" einträge Gefunden' & @CRLF & 'Neu Suchen?')
    If $msg = 6 Then
    _FolderSearch()
    EndIf
    EndFunc ;==>_FehlerListView
    #endregion ### _FehlerListView() ###
    ;=============
    #region ### _Create() ###
    Func _Create()
    If _GUICtrlListView_GetItemCount($ListView) = 0 Then
    _FehlerListView()
    EndIf
    For $i = 0 To 4
    If BitAND(GUICtrlRead($ahCheckbox[$i]), $GUI_CHECKED) Then Call($aFunktions[$i])
    ;~ MsgBox(0,'Checkbox',$ahCheckbox[$i])
    Next
    EndFunc ;==>_Create
    #endregion ### _Create() ###
    ;=============
    #region ### _ListView() Leeren ###
    Func _ClearListView()
    _GUICtrlListView_DeleteAllItems($ListView)
    EndFunc ;==>_ClearListView
    #endregion ### _ListView() Leeren ###
    ;=============
    #region ### _DeleteSelected ###
    Func _DeleteSelected()
    _GUICtrlListView_DeleteItemsSelected($ListView)
    EndFunc ;==>_DeleteSelected
    #endregion ### _DeleteSelected ###
    ;=============
    #region ### _Import() ### von i2c (Teils Bsp)
    Func _Import()
    $FilePath = FileOpenDialog('Playlist Importieren', '', 'Alle Playlists (*.wpl;*.pls;*.xspf;*.m3u)|(*.wpl)|(*.pls)|(*.xspf)|(*.m3u)')
    If StringRight($FilePath, 4) = ".wpl" Then
    $hFile = FileOpen($FilePath)
    $sRead = FileRead($hFile)
    FileClose($hFile)
    If Not @error Then
    $aTmp = StringRegExp($sRead, '<media\ssrc=\"(.*?)\"', 3, 1)
    If IsArray($aTmp) Then
    $aFolder = StringRegExp($FilePath, "(.*)\\", 1, 1)
    If IsArray($aFolder) Then
    $aParent = StringRegExp($aFolder[0], "(.*)\\", 1, 1)
    Else
    MsgBox(0, "Fehler", "Datei konnte nicht importiert werden")
    Return
    EndIf
    For $i = UBound($aTmp) - 1 To 0 Step -1
    If StringLeft($aTmp[$i], 2) = '..' Then
    $sTmp = $aParent[0] & StringTrimLeft($aTmp[$i], 2)
    If Not FileExists($sTmp) Then
    MsgBox(0, "Fehler", "Datei: " & $sTmp & @CRLF & "Datei existiert nicht")
    _ArrayDelete($aTmp, $i)
    Else
    $aTmp[$i] = $sTmp
    EndIf
    EndIf
    Next
    EndIf
    Else
    MsgBox(0, "Fehler", "Datei konnte nicht importiert werden")
    Return
    EndIf
    EndIf

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

    If StringRight($FilePath, 4) = ".pls" Then ;Wen es eine *.pls Datei ist DANN
    If MsgBox(4 + 48, '*.pls Fortfahren', 'Nur *.pls Playlist die mit >WL< erstellt wurden, "Solten" importiert werden' & @CRLF & 'Fortfahren?') = 7 Then ;Wenn NEIN dann Return
    Return
    EndIf
    $hFile = FileOpen($FilePath) ;Öffne *.pls Playlist
    $sRead = FileRead($hFile) ;Lesse *.pls Playlist
    FileClose($hFile) ;Schliesse *.pls Playlist
    If Not @error Then ;Wen nicht ERROR DANN
    $aTmp = StringRegExp($sRead, 'File\d+\=(.*)', 3, 1) ;Dateipfade einlesen
    EndIf
    If StringLeft($aTmp[$i], 2) = '..' Then
    For $i = UBound($aTmp) - 1 To 0 Step -1 ;~ Array rückwärts durchlaufen
    If StringLeft($aTmp[$i], 2) = '..' Then ;~ wenn die ersten beiden Zeichen '..' sind, ist es ein relativer Pfad
    $aCount = StringRegExp($aTmp[$i], '(\.\.\/)', 3, 1) ;~ zähle alle '../' im String um das Level des relativen Pfades herauszufinden
    $aFolder = StringSplit($FilePath, "\") ;~ den Ordnerpfad (Playlist) an den \'s aufsplitten.
    ;~ Das Array mit den einzelnen Ordnern wieder in einen String umwandeln.
    ;~ Der 4te Parameter: (Anzahl Elemente von $aFolder)-Anzahl der relativen Pfadebenen in $aCount
    ;~ Ergebnis: Der Ordner, von dem aus der absolute Teil des relativen Dateipfads weiter zur MP3 führt.
    $sTmp = _ArrayToString($aFolder, "\", 1, (UBound($aFolder) - 1) - UBound($aCount))
    $aTmp[$i] = StringReplace($aTmp[$i], "../", "") ;~ Alle '../' aus dem relativen Pfad entfernen
    $aTmp[$i] = StringReplace($aTmp[$i], "/", "\") ;~ '/' durch '\' ersetzen, damit ein anständiger Pfad draus wird
    $sTmp = $sTmp & "\" & $aTmp[$i] ;~ Den absoluten Pfad aus dem gekürzten Pfad der Playlist und dem 'gesäuberten' Pfad der MP3 zusammenbauen
    If Not FileExists($sTmp) Then ;~ Prüfen ob die Datei dort existiert
    MsgBox(0, "Fehler", "Datei: " & $sTmp & @CRLF & "Datei existiert nicht")
    _ArrayDelete($aTmp, $i) ;~ Wenn nicht, dann das Element aus dem Array löschen
    Else
    $aTmp[$i] = $sTmp ;~ wenn sie existiert, den Pfad in das Arrayelement schreiben
    EndIf
    EndIf
    Next
    EndIf

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

    EndIf

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

    _ArrayDisplay($aTmp, '$aTmp vor Import')
    If IsArray($aTmp) Then
    _GUICtrlListView_BeginUpdate($ListView)
    For $i = 0 To UBound($aTmp) - 2
    $Duration = 0
    _AddFileToListView($aTmp[$i])
    Next
    _GUICtrlListView_EndUpdate($ListView)
    Else
    MsgBox(0, "Fehler", "Keine Daten zum importieren.")
    Return
    EndIf
    EndFunc ;==>_Import
    #endregion ### _Import() ### von i2c (Teils Bsp)
    ;=============
    #region ### _WMP() ### *.wpl
    Func _WMP()
    Local $sSaveFilename, $hFile, $iCount = _GUICtrlListView_GetItemCount($ListView)
    If $iCount = 0 Then Return
    $sSaveFilename = FileSaveDialog('Wähle einen Namen für die MP3-Playlist', @DesktopDir, 'Windows Media Player-Playlist (*.wpl)', 18, '')
    $Folder = $sSaveFilename
    $aFolder = StringSplit($Folder, "\")
    If IsArray($aFolder) Then $Folder = $aFolder[$aFolder[0] - 1] & "\" & $aFolder[$aFolder[0]]
    If Not @error Then
    If StringRight($sSaveFilename, 4) <> '.wpl' Then $sSaveFilename &= '.wpl'
    $hFile = FileOpen($sSaveFilename, 128 + 2)
    If $hFile <> -1 Then
    FileWrite($hFile, '<?wpl version="1.0"?>' & @CRLF)
    FileWrite($hFile, '<smil>' & @CRLF)
    FileWrite($hFile, ' <head>' & @CRLF)
    FileWrite($hFile, ' <meta name="Generator" content="Microsoft Windows Media Player -- "/>' & @CRLF)
    FileWrite($hFile, ' <meta name="ItemCount" content="' & $iPlCount & '"/>' & @CRLF)
    FileWrite($hFile, ' <meta name="TotalDuration" content="' & $Duration & '"/>' & @CRLF)
    FileWrite($hFile, ' <author/>' & @CRLF)
    FileWrite($hFile, ' <title>' & $Folder & '</title>' & @CRLF)
    FileWrite($hFile, ' </head>' & @CRLF)
    FileWrite($hFile, ' <body>' & @CRLF)
    FileWrite($hFile, ' <seq>' & @CRLF)
    For $i = 0 To $iCount
    FileWriteLine($hFile, ' <media src="' & _GUICtrlListView_GetItemText($ListView, $i, 5) & '"/>')
    Next
    FileWrite($hFile, ' </seq>' & @CRLF)
    FileWrite($hFile, ' </body>' & @CRLF)
    FileWrite($hFile, '</smil>' & @CRLF)
    FileClose($hFile)
    EndIf
    EndIf
    EndFunc ;==>_WMP
    #endregion ### _WMP() ### *.wpl
    ;=============
    #region ### _SongBird() ### *.pls
    Func _SongBird()
    Local $sSaveFilename, $hFile, $iCount = _GUICtrlListView_GetItemCount($ListView)
    If $iCount = 0 Then Return
    $sSaveFilename = FileSaveDialog('Wähle einen Namen für die MP3-Playlist', @DesktopDir, 'SongBird-Playlist (*.pls)', 18, '')
    If Not @error Then
    If StringRight($sSaveFilename, 4) <> '.pls' Then $sSaveFilename &= '.pls'
    $hFile = FileOpen($sSaveFilename, 2)
    If $hFile <> -1 Then
    FileWrite($hFile, '[playlist]' & @CRLF)
    FileWrite($hFile, 'NumberOfEntries=1' & @CRLF & @CRLF)
    For $i = 0 To $iCount
    FileWriteLine($hFile, 'File' & $i + 1 & '=' & _GUICtrlListView_GetItemText($ListView, $i, 5))
    FileWriteLine($hFile, 'Title' & $i + 1 & '=' & _GUICtrlListView_GetItemText($ListView, $i, 1) & ' - ' & _GUICtrlListView_GetItemText($ListView, $i, 2))
    FileWriteLine($hFile, 'Length' & $i + 1 & '=' & _GUICtrlListView_GetItemText($ListView, $i, 4) & @CRLF & @CRLF)
    Next
    FileWrite($hFile, @CRLF & 'Version=2' & @CRLF)
    FileClose($hFile)
    EndIf
    EndIf
    EndFunc ;==>_SongBird
    #endregion ### _SongBird() ### *.pls
    ;=============
    #region ### _WAMP() ### *.m3u
    Func _WAMP()
    Local $sSaveFilename, $hFile, $iCount = _GUICtrlListView_GetItemCount($ListView)
    If $iCount = 0 Then Return
    $sSaveFilename = FileSaveDialog('Wähle einen Namen für die MP3-Playlist', @DesktopDir, 'MP3-Playlist (*.m3u)', 18, '')
    If Not @error Then
    If StringRight($sSaveFilename, 4) <> '.m3u' Then $sSaveFilename &= '.m3u'
    $hFile = FileOpen($sSaveFilename, 2)
    If $hFile <> -1 Then
    FileWrite($hFile, '#EXTM3U' & @CRLF)
    For $i = 0 To $iCount - 1
    FileWriteLine($hFile, '#EXTINF:' & _GUICtrlListView_GetItemText($ListView, $i, 4) & ',' & _GUICtrlListView_GetItemText($ListView, $i, 1) & ' - ' & _GUICtrlListView_GetItemText($ListView, $i, 2) & ' - ' & 'Track Nr' & _GUICtrlListView_GetItemText($ListView, $i, 0) & ' end')
    FileWriteLine($hFile, _GUICtrlListView_GetItemText($ListView, $i, 5))
    Next
    FileClose($hFile)
    EndIf
    EndIf
    EndFunc ;==>_WAMP
    #endregion ### _WAMP() ### *.m3u
    ;=============
    #region ### _VLC() ### *.xspf
    Func _VLC()
    Local $sSaveFilename, $hFile, $iCount = _GUICtrlListView_GetItemCount($ListView)
    If $iCount = 0 Then Return
    $sSaveFilename = FileSaveDialog('Wähle einen Namen für die MP3-Playlist', @DesktopDir, 'VLC-Playlist (*.xspf)', 18, '')
    $Folder = $sSaveFilename
    $aFolder = StringSplit($Folder, "\")
    If IsArray($aFolder) Then $Folder = $aFolder[$aFolder[0] - 1] & "\" & $aFolder[$aFolder[0]]
    If Not @error Then
    If StringRight($sSaveFilename, 4) <> '.xspf' Then $sSaveFilename &= '.xspf'
    $hFile = FileOpen($sSaveFilename, 128 + 2)
    If $hFile <> -1 Then
    FileWrite($hFile, '<?xml version="1.0" encoding="UTF-8"?>' & @CRLF)
    FileWrite($hFile, '<playlist version="1" xmlns="http://xspf.org/ns/0/" xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/">' & @CRLF)
    FileWrite($hFile, ' <title>' & $Folder & '</title>' & @CRLF)
    FileWrite($hFile, ' <trackList>' & @CRLF)
    For $i = 0 To $iCount - 1
    FileWriteLine($hFile, ' <track>')
    FileWriteLine($hFile, ' <location>file:///' & _GUICtrlListView_GetItemText($ListView, $i, 5) & '</location>')
    FileWriteLine($hFile, ' <title>' & _GUICtrlListView_GetItemText($ListView, $i, 2) & '</title>')
    FileWriteLine($hFile, ' <creator>' & _GUICtrlListView_GetItemText($ListView, $i, 1) & '</creator>')
    FileWriteLine($hFile, ' <album>' & _GUICtrlListView_GetItemText($ListView, $i, 3) & '</album>')
    FileWriteLine($hFile, ' <trackNum>' & _GUICtrlListView_GetItemText($ListView, $i, 0) & '</trackNum>')
    FileWriteLine($hFile, ' <image>file:///' & '' & '</image>')
    FileWriteLine($hFile, ' <extension application="http://www.videolan.org/vlc/playlist/0">')
    FileWriteLine($hFile, ' <vlc:id>' & _GUICtrlListView_GetItemText($ListView, $i, 0) & '</vlc:id>')
    FileWriteLine($hFile, ' </extension>')
    FileWriteLine($hFile, ' </track>')
    Next
    FileWrite($hFile, ' </trackList>' & @CRLF)
    FileWrite($hFile, ' <extension application="http://www.videolan.org/vlc/playlist/0">' & @CRLF)
    If $hFile <> -1 Then
    For $i = 0 To $iCount - 2
    FileWriteLine($hFile, ' <vlc:item tid="' & _GUICtrlListView_GetItemText($ListView, $i, 0) & '" />')
    Next
    FileWrite($hFile, ' </extension>' & @CRLF)
    FileWrite($hFile, '</playlist>')
    FileClose($hFile)
    EndIf
    EndIf
    EndIf
    EndFunc ;==>_VLC
    #endregion ### _VLC() ### *.xspf
    ;=============
    #region ### _RPlayer() ### *.m3u
    Func _RPlayer()
    Local $sSaveFilename, $hFile, $iCount = _GUICtrlListView_GetItemCount($ListView)
    If $iCount = 0 Then Return
    $sSaveFilename = FileSaveDialog('Wähle einen Namen für die MP3-Playlist', @DesktopDir, 'MP3-Playlist (*.m3u)', 18, '')
    If Not @error Then
    If StringRight($sSaveFilename, 4) <> '.m3u' Then $sSaveFilename &= '.m3u'
    $hFile = FileOpen($sSaveFilename, 2)
    If $hFile <> -1 Then
    FileWrite($hFile, '#EXTM3U' & @CRLF)
    For $i = 0 To $iCount - 1
    FileWriteLine($hFile, '#EXTINF:' & _GUICtrlListView_GetItemText($ListView, $i, 4) & ',' & _GUICtrlListView_GetItemText($ListView, $i, 1) & ' - ' & _GUICtrlListView_GetItemText($ListView, $i, 2) & ' - ' & 'Track Nr' & _GUICtrlListView_GetItemText($ListView, $i, 0) & ' end')
    FileWriteLine($hFile, _GUICtrlListView_GetItemText($ListView, $i, 5))
    Next
    FileClose($hFile)
    EndIf
    EndIf
    EndFunc ;==>_RPlayer
    #endregion ### _RPlayer() ### *.m3u
    ;=============
    #region ### _ID3Tag() ### Von Oscar
    Func _ReadID3Tag($sPath)
    If Not FileExists($sPath) Then Return SetError(1, 0, 0)
    Local $hFile, $sData, $sID3Header, $iID3HeaderSize = 0, $iOffset, $iSize, $tmp
    Local $aID3v2Tags[8] = ['TIT2', 'TPE1', 'TALB', 'TYER', 'TLEN', 'TRCK', 'TCON', 'TENC']
    Local $aID3[11][2] = [ _
    ['Title', ''],['Artist', ''],['Album', ''],['Year', ''], _
    ['Length', '0'],['Track', ''],['Genre', ''],['Encoder', ''], _
    ['MPEG-Version', ''],['Bitrate', ''],['Sample-Freq.', '']]
    Local $aMP3Version[4] = ['MPEG2.5', 'Reserved', 'MPEG2', 'MPEG1']
    Local $aMP3Layer[4] = ['Reserved', 'Layer III', 'Layer II', 'Layer I']
    Local $aMP3Bitrate[5][16] = [ _
    [000, 032, 064, 096, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 000], _
    [000, 032, 048, 056, 064, 080, 096, 112, 128, 160, 192, 224, 256, 320, 384, 000], _
    [000, 032, 040, 048, 056, 064, 080, 096, 112, 128, 160, 192, 224, 256, 320, 000], _
    [000, 032, 048, 056, 064, 080, 096, 112, 128, 144, 160, 176, 192, 224, 256, 000], _
    [000, 008, 016, 024, 032, 040, 048, 056, 064, 080, 096, 112, 128, 144, 160, 000]]
    Local $aSampleFreq[3][4] = [[44100, 48000, 32000, 0],[22050, 24000, 16000, 0],[11025, 12000, 8000, 0]]
    Local $sMP3FrameHeader, $iMP3Version, $sMP3Version, $sMP3Layer, $iMP3Bitrate, $iMP3SampleFreq
    Local $iVBRFrames = -1, $iVBRFilesize, $iVBRFlags
    $hFile = FileOpen($sPath, 16)
    If $hFile = -1 Then Return SetError(2, 0, 0)
    $sData = Binary(FileRead($hFile, 4))
    If BinaryMid($sData, 1, 3) = '0x494433' Then ; ID3 v2.x Kennung gefunden
    If (BinaryMid($sData, 4, 1) = '0x03') Or (BinaryMid($sData, 4, 1) = '0x04') Then ; nur v2.3 und 2.4
    FileRead($hFile, 2) ; 2 Bytes überspringen
    For $i = 0 To 3 ; berechne ID3-Headergröße (4 Bytes, jedoch nur jeweils die unteren 7 Bit)
    $iID3HeaderSize = BitShift($iID3HeaderSize, -7) + BitAND(Binary(FileRead($hFile, 1)), 0x7F)
    Next
    If $iID3HeaderSize > 0 Then
    $sID3Header = Binary(FileRead($hFile, $iID3HeaderSize)) ; lese gesamten ID3-Header
    For $i = 0 To 7
    $iOffset = StringInStr(BinaryToString($sID3Header), $aID3v2Tags[$i]) ; Offset zu dem ID3-Tag
    If $iOffset > 0 Then
    $iSize = Hex(BinaryMid($sID3Header, $iOffset + 4, 4)) ; Größe des ID3-Frames
    $tmp = BinaryMid($sID3Header, $iOffset + 11, Dec($iSize) - 1)
    If BinaryMid($tmp, 1, 2) = '0xFFFE' Then
    For $x = 3 To BinaryLen($tmp) Step 2
    $aID3[$i][1] &= BinaryToString(BinaryMid($tmp, $x, 2), 2)
    Next
    Else
    For $x = 1 To BinaryLen($tmp)
    $aID3[$i][1] &= BinaryToString(BinaryMid($tmp, $x, 1))
    Next
    EndIf
    $aID3[$i][1] = StringReplace($aID3[$i][1], Chr(0), '')
    EndIf
    Next
    EndIf
    Do
    $sData = String(FileRead($hFile, 1))
    If @error Then ExitLoop
    If BitAND($sData, 0xff) = 0xff Then
    FileSetPos($hFile, -1, 1)
    $sData = String(FileRead($hFile, 4))
    EndIf
    Until BitAND($sData, 0xFFE00000) = 0xFFE00000
    Else
    FileClose($hFile)
    Return SetError(3, 0, 0)
    EndIf
    Else ; ID3 v1.x
    $iOffset = FileGetPos($hFile)
    FileSetPos($hFile, -128, 2)
    $sID3Header = BinaryToString(FileRead($hFile, 3))
    If $sID3Header = 'TAG' Then
    $aID3[0][1] = StringReplace(BinaryToString(FileRead($hFile, 30)), Chr(0), '')
    $aID3[1][1] = StringReplace(BinaryToString(FileRead($hFile, 30)), Chr(0), '')
    $aID3[2][1] = StringReplace(BinaryToString(FileRead($hFile, 30)), Chr(0), '')
    $aID3[3][1] = StringReplace(BinaryToString(FileRead($hFile, 4)), Chr(0), '')
    EndIf
    FileSetPos($hFile, $iOffset, 0)
    EndIf
    $sMP3FrameHeader = String($sData)
    If BitAND($sMP3FrameHeader, 0xFFE00000) <> 0xFFE00000 Then
    FileClose($hFile)
    Return SetError(4, 0, 0) ; keine MP3-Datei, dann Return
    EndIf
    $iMP3Version = BitShift(BitXOR($sMP3FrameHeader, 0xFFE00000), 19) ; welche MP3-Version
    $sMP3Version = $aMP3Version[$iMP3Version] ; in Textform
    $sMP3Layer = $aMP3Layer[BitShift(BitAND($sMP3FrameHeader, 0x60000), 17)] ; welcher Layer
    $aID3[8][1] = $sMP3Version & ' / ' & $sMP3Layer ; ins Ausgabe-Array
    $iMP3Bitrate = BitShift(BitAND($sMP3FrameHeader, 0xF000), 12) ; Bitraten-Index auslesen
    Switch $sMP3Version ; je nach MPEG-Version Bitrate aus der Tabelle holen
    Case 'MPEG1'
    $aID3[9][1] = $aMP3Bitrate[$iMP3Version - ($iMP3Version > 1)][$iMP3Bitrate]
    Case 'MPEG2', 'MPEG2.5'
    If $sMP3Layer = 'Layer I' Then
    $aID3[9][1] = $aMP3Bitrate[3][$iMP3Bitrate]
    Else
    $aID3[9][1] = $aMP3Bitrate[4][$iMP3Bitrate]
    EndIf
    EndSwitch
    $iMP3SampleFreq = BitShift(BitAND($sMP3FrameHeader, 0xC00), 10) ; Sample-Frequenz-Index auslesen
    $aID3[10][1] = $aSampleFreq[2 - ($iMP3Version - ($iMP3Version > 1))][$iMP3SampleFreq] ; und Wert aus der Tabelle holen
    Do ; evtl. Leerbytes überspringen
    $tmp = FileRead($hFile, 1)
    If @error Then ExitLoop
    Until $tmp <> 0x00 Or @error
    If $tmp = 0x58 And BinaryToString(FileRead($hFile, 3)) = 'ing' Then ; MP3 mit VBR (Xing-Header gefunden)?
    $iVBRFlags = '0x' & Hex(FileRead($hFile, 4)) ; VBR-Flags auslesen
    If BitAND($iVBRFlags, 0x3) Then ; wenn die Einträge vorhanden sind, dann...
    $iVBRFrames = Dec(Hex(FileRead($hFile, 4))) ; Anzahl der VBR-Frames auslesen
    $iVBRFilesize = Dec(Hex(FileRead($hFile, 4))) ; Dateigröße auslesen
    $aID3[4][1] = $iVBRFrames * 1152 / $aID3[10][1] * 1000 ; VBR Laufzeit
    $aID3[9][1] = 'VBR ~' & Int($iVBRFilesize * 8 / ($aID3[4][1] / 1000) / 1000) ; VBR durchschnittliche Bitrate
    EndIf
    Else
    If $aID3[4][1] = 0 Then $aID3[4][1] = (FileGetSize($sPath) * 8) / ($aID3[9][1] * 1000) * 1000 ; alternative CBR Laufzeit
    $aID3[9][1] = 'CBR ' & $aID3[9][1]
    EndIf
    $aID3[4][1] = Int($aID3[4][1] / 1000) ; Laufzeit
    $aID3[9][1] &= ' kBit/s'
    $aID3[10][1] &= ' Hz'
    FileClose($hFile)
    Return $aID3
    EndFunc ;==>_ReadID3Tag
    #endregion ### _ID3Tag() ### Von Oscar
    ;=============
    #region ### _optNormal() ###
    Func _optNormal()
    GUISetBkColor(0xF0F0F0, $WL)
    GUICtrlSetColor(10, 0x000000)
    EndFunc ;==>_optNormal
    #endregion ### _optNormal() ###
    ;=============
    #region ### _optBlack() ###
    Func _optBlack()
    GUISetBkColor(0x000000, $WL)
    GUICtrlSetColor(10, 0xFFFFFF)
    EndFunc ;==>_optBlack
    #endregion ### _optBlack() ###
    ;=============
    #region ### _optRed() ###
    Func _optRed()
    GUISetBkColor(0xFF0000, $WL)
    GUICtrlSetColor(10, 0x000000)
    EndFunc ;==>_optRed
    #endregion ### _optRed() ###
    ;=============

    [/autoit]

    So müsste es einwandfrei gehen :)

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake