Hallo Leute,
Ich nutze selten die Hilfe & Unterstützung Sektion im Forum für mich aber irgendwann muss es halt auch mal sein
Das ist das Skript:
Spoiler anzeigen
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <File.au3>
#include <WinAPI.au3>
#NoTrayIcon
[/autoit] [autoit][/autoit] [autoit]#AutoIt3Wrapper_UseX64=n
[/autoit] [autoit][/autoit] [autoit]Opt("GuiOnEventMode", 1)
Opt("GuiCloseOnESC", 0)
; ### MAIN GUI ###
[/autoit] [autoit][/autoit] [autoit]$hGuiMain = GUICreate("Multiple-File-Editor", 641, 440)
$Group1 = GUICtrlCreateGroup(" Dateien ", 8, 8, 289, 425)
$cButtonAddFiles = GUICtrlCreateButton("Dateien hinzufügen", 16, 24, 107, 25, $WS_GROUP)
$cButtonAddFolder = GUICtrlCreateButton("Ordner hinzufügen", 128, 24, 99, 25, $WS_GROUP)
$cListViewFilesAdded = GUICtrlCreateListView("Dateien", 16, 56, 273, 169)
$cButtonFilter = GUICtrlCreateButton("Filter", 232, 24, 57, 25, $WS_GROUP)
$cListViewFilesEdit = GUICtrlCreateListView("Dateien", 16, 256, 273, 169)
$cCheckboxAllFiles = GUICtrlCreateCheckbox("Alle Dateien", 16, 232, 97, 17, BitOR($BS_CHECKBOX, $BS_AUTOCHECKBOX, $BS_RIGHTBUTTON, $BS_CENTER, $WS_TABSTOP))
$cButtonDown = GUICtrlCreateButton("DOWN", 136, 232, 75, 17, $WS_GROUP)
$cButtonUp = GUICtrlCreateButton("UP", 216, 232, 75, 17, $WS_GROUP)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$cTab = GUICtrlCreateTab(304, 48, 329, 297)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
$TabSheet1 = GUICtrlCreateTabItem("Dateiname")
$Group4 = GUICtrlCreateGroup(" Schriftzug ", 312, 200, 313, 89)
$cRadioNoAction = GUICtrlCreateRadio("Unverändert lassen", 320, 264, 137, 17)
$cRadioNormalCase = GUICtrlCreateRadio("Anfangsbuchstaben groß", 320, 248, 137, 17)
$cRadioLowerCase = GUICtrlCreateRadio("Alles klein schreiben", 320, 232, 113, 17)
$cRadioUpperCase = GUICtrlCreateRadio("Alles groß schreiben", 320, 216, 113, 17)
$cButtonApplyFormatFilenames = GUICtrlCreateButton("Übernehmen", 496, 256, 125, 25, $WS_GROUP)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group5 = GUICtrlCreateGroup(" Löschen ", 312, 152, 313, 49)
$cRadioDeleteAfter = GUICtrlCreateRadio("Hinten", 476, 179, 50, 17)
$cRadioDeleteBefore = GUICtrlCreateRadio("Vorne", 476, 163, 50, 17)
$cInputDeleteChars = GUICtrlCreateInput("", 316, 169, 153, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL))
$cButtonApplyDeleteChars = GUICtrlCreateButton("Übernehmen", 536, 168, 83, 25, $WS_GROUP)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group6 = GUICtrlCreateGroup(" Einfügen ", 312, 72, 313, 81)
$cInputInsertText = GUICtrlCreateInput("", 324, 87, 161, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL))
$cRadioInsertAfter = GUICtrlCreateRadio("Nach dem Dateinamen", 492, 97, 130, 17)
$cRadioInsertBefore = GUICtrlCreateRadio("Vor dem Dateinamen", 492, 81, 121, 17)
$cButtonApplyInsertText = GUICtrlCreateButton("Übernehmen", 496, 120, 125, 25, $WS_GROUP)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group7 = GUICtrlCreateGroup(" Ersetzen ", 312, 288, 313, 49)
$cInputReplace1 = GUICtrlCreateInput("", 320, 304, 57, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL))
$Label1 = GUICtrlCreateLabel(" ersetzen mit ", 384, 306, 66, 17)
$cInputReplace2 = GUICtrlCreateInput("", 456, 304, 57, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL))
$cButtonReplace = GUICtrlCreateButton("Ersetzen", 520, 304, 99, 25, $WS_GROUP)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$TabSheet2 = GUICtrlCreateTabItem("MP3-Dateien (Tags etc)")
$Group2 = GUICtrlCreateGroup(" Gloable Tags setzen ", 312, 72, 137, 177)
$cInputArtist = GUICtrlCreateInput("", 320, 96, 121, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL))
$cInputYear = GUICtrlCreateInput("", 320, 144, 121, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL))
$cInputAlbum = GUICtrlCreateInput("", 320, 120, 121, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL))
$cInputGenre = GUICtrlCreateInput("", 320, 168, 121, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL))
$cButtonApply2 = GUICtrlCreateButton("Übernehmen", 320, 216, 123, 25, $WS_GROUP)
$cCheckboxDeleteOthers = GUICtrlCreateCheckbox("Andere Tags löschen", 322, 194, 121, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup(" Tags aus Dateiname ", 456, 72, 169, 81)
$cInputSyntax = GUICtrlCreateInput("", 464, 96, 153, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL))
$cButtonApply3 = GUICtrlCreateButton("Übernehmen", 464, 120, 155, 25, $WS_GROUP)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateTabItem("")
$cButtonHelp = GUICtrlCreateButton("Hilfe", 304, 16, 163, 25, $WS_GROUP)
$cButtonExit = GUICtrlCreateButton("Beenden", 472, 16, 155, 25, $WS_GROUP)
; ### HELP GUI ###
; ### HELP GUI ###
$hGuiHelp = GUICreate("Hilfe", 262, 224)
GUICtrlCreateGroup(" Syntax ", 8, 8, 249, 177)
$cLabelHelp1 = GUICtrlCreateLabel("Im Syntaxfeld kannst du angeben, wie die Dateinamen der MP3-Dateien aufgebaut sind. Das Programm verwendet diese Syntax dann um die korrekten ID3-Tags in die MP3-Dateien einzutragen.", 16, 24, 230, 65)
$cLabelHelp2 = GUICtrlCreateLabel("Eine solche Syntax könnte wie folgt aussehen: %A% - %T% .%A% steht für den Interpreten (eng. Artist) und %T% steht für den Titel (eng. Title). Außerdem muss angegeben werden wie Interpret und Titel im Dateinamen von einander getrennt sind. Im Falle des Beispiels ist dies: ' - '", 16, 96, 230, 81)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$cButtonHelpExit = GUICtrlCreateButton("OK", 88, 192, 75, 25, $WS_GROUP)
; ### HELP GUI ###
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
[/autoit] [autoit][/autoit] [autoit]$hListViewFilesAdded = GUICtrlGetHandle($cListViewFilesAdded)
$hListViewFilesEdit = GUICtrlGetHandle($cListViewFilesEdit)
_GUICtrlListView_SetColumnWidth($hListViewFilesAdded, 0, 1000)
_GUICtrlListView_SetColumnWidth($hListViewFilesEdit, 0, 1000)
GUISetOnEvent(-3, "_Exit", $hGuiMain)
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetOnEvent($cButtonAddFiles, "_AddFiles")
GUICtrlSetOnEvent($cButtonAddFolder, "_AddFolder")
GUICtrlSetOnEvent($cButtonFilter, "_SetFilter")
GUICtrlSetOnEvent($cButtonExit, "_Exit")
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetState($cInputGenre, $GUI_DISABLE)
GUICtrlSetState($cCheckboxDeleteOthers, $GUI_CHECKED + $GUI_DISABLE)
;~ GUICtrlSetState($cButtonDown, $GUI_DISABLE)
;~ GUICtrlSetState($cButtonUp, $GUI_DISABLE)
;~ GUICtrlSetState($cCheckboxAllFiles, $GUI_DISABLE)
;~ GUICtrlSetState($cListViewFilesEdit, $GUI_DISABLE)
;~ GUICtrlSetState($cInputReplace1, $GUI_DISABLE)
;~ GUICtrlSetState($cInputReplace2, $GUI_DISABLE)
;~ GUICtrlSetState($cButtonReplace, $GUI_DISABLE)
GUICtrlSetResizing($cTab, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
[/autoit] [autoit][/autoit] [autoit]HotKeySet("{DEL}", "_RemoveEntry")
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW, $hGuiMain)
GUISetState(@SW_HIDE, $hGuiHelp)
While Sleep(10)
WEnd
Func _GetIndex($Info)
MsgBox(0, 'Item Index Clicked',$Info)
EndFunc
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $hListViewFilesAdded ; Hier $hLV gegen das Handle des Listviews tauschen
If Not IsHWnd($hListViewFilesAdded) Then $hWndListView = GUICtrlGetHandle($hListViewFilesAdded)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
_GetIndex(DllStructGetData($tInfo, "Index"))
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func _Exit()
Exit
EndFunc ;==>_Exit
Func _ToggleHelpGuiState()
Switch _WinAPI_IsWindowVisible($hGuiHelp)
Case True
GUISetState(@SW_HIDE, $hGuiHelp)
Case False
GUISetState(@SW_SHOW, $hGuiHelp)
EndSwitch
EndFunc ;==>_ToggleHelpGuiState
Func _AddFiles()
Local $Files = FileOpenDialog("Bitte Dateien für die Bearbeitung auswählen", "", "Alle Dateien (*.*)", 7)
If @error Then Return -1
$aFiles = StringSplit($Files, "|", 3)
If @error == 1 Then
_GUICtrlListView_AddItem($hListViewFilesAdded, $Files)
Else
For $iIndex = 1 To UBound($aFiles, 1) - 1
_GUICtrlListView_AddItem($hListViewFilesAdded, $aFiles[0] & '\' & $aFiles[$iIndex])
Next
EndIf
EndFunc ;==>_AddFiles
Func _AddFolder()
Local $sFolder = FileSelectFolder("Bitte Ordner auswählen", "")
If @error Then Return -1
SplashTextOn("Bitte warten...", "Bitte warten Sie kurz!" & @CRLF & "Der Ordner wird rekursiv durchsucht, das kann je nach Größe des Ordners einige Zeit dauern!", 400, 80, -1, -1, -1, 6)
Local $aFiles = _GetFilesFolder_Rekursiv($sFolder)
SplashOff()
If Not IsArray($aFiles) Then Return -2
For $iIndex = 1 To $aFiles[0]
If StringRegExp($aFiles[$iIndex], "\.[a-z0-9]{3,}$", 0) Then _GUICtrlListView_AddItem($hListViewFilesAdded, $aFiles[$iIndex])
Next
EndFunc ;==>_AddFolder
Func _SetFilter()
Local $sExt = InputBox("Dateiliste filtern", "Bitte geben Sie hier die Dateierweiterung ein, nach der die Liste gefiltert werden soll!" & @CRLF & "BSP: 'mp3'" & @CRLF & @CRLF & "Nach dem Filtern werden nur noch die Dateien mit der eingegebenen Endung angezeigt!")
Local $sItem
Local $iLength = StringLen($sExt)
Local $iCount = _GUICtrlListView_GetItemCount($hListViewFilesAdded)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iCount = ' & $iCount & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
If @error Or $sExt = '' Then Return -1
For $i = 0 To $iCount - 1
;~ ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iCount - 1 = ' & $iCount - 1 & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $i = ' & $i & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
$aItem = _GUICtrlListView_GetItemTextArray($hListViewFilesAdded, $i)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $aItem[1] = ' & $aItem[1] & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sExt = ' & $sExt & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : StringRight($sItem, $iLength) = ' & StringRight($sItem, $iLength) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
If StringRight($aItem[1], $iLength) == $sExt Then
_GUICtrlListView_AddItem($hListViewFilesEdit, $aItem[1])
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : _GUICtrlListView_AddItem($hListViewFilesEdit, $aItem[1]) = ' & _GUICtrlListView_AddItem($hListViewFilesEdit, $aItem[1]) & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
_GUICtrlListView_DeleteItem($hListViewFilesAdded, $i)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : _GUICtrlListView_DeleteItem($hListViewFilesAdded, $i) = ' & _GUICtrlListView_DeleteItem($hListViewFilesAdded, $i) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
EndIf
Next
EndFunc ;==>_SetFilter
;==================================================================================================
; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
; Description: Rekursive Auflistung von Dateien und/oder Ordnern
; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
; optional: $iRetType 0 gibt Array, 1 gibt String zurück
; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _GetFilesFolder_Rekursiv($sPath, $sExt = '*', $iDir = -1, $iRetType = 0, $sDelim = '0')
Global $oFSO = ObjCreate('Scripting.FileSystemObject')
Global $strFiles = ''
Switch $sDelim
Case '1'
$sDelim = @CR
Case '2'
$sDelim = @LF
Case '3'
$sDelim = ';'
Case '4'
$sDelim = '|'
Case Else
$sDelim = @CRLF
EndSwitch
If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
If $sExt = -1 Then $sExt = '*'
If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
_ShowSubFolders($oFSO.GetFolder($sPath), $sExt, $iDir, $sDelim)
If $iRetType = 0 Then
Local $aOut
$aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
If $aOut[1] = '' Then
ReDim $aOut[1]
$aOut[0] = 0
EndIf
Return $aOut
Else
Return StringTrimRight($strFiles, StringLen($sDelim))
EndIf
EndFunc ;==>_GetFilesFolder_Rekursiv
Func _ShowSubFolders($Folder, $Ext = '*', $Dir = -1, $Delim = @CRLF)
If Not IsDeclared("strFiles") Then Global $strFiles = ''
If ($Dir = -1) Or ($Dir = 0) Then
For $file In $Folder.Files
If $Ext <> '*' Then
If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
$strFiles &= $file.Path & $Delim
Else
$strFiles &= $file.Path & $Delim
EndIf
Next
EndIf
For $Subfolder In $Folder.SubFolders
If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
_ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
Next
EndFunc ;==>_ShowSubFolders
Und das ist das Problem:
Wichtig: Bitte im Scite-Editor als x86-Skript ausführen !
Wenn ihr auf Dateien hinzufügen klickt und anschließend Dateien auswählt, sie sollten die gleiche Endung haben und zur besseren Übersicht nummeriert sein, also zB 01_Datei.mp3, 02_Datei.mp3, ..
Klickt ihr auf OK, so werden die Dateien in das erste Listview eingefügt, wenn ihr nun auf Filter klickt, erscheint eine Inputbox in der ihr die Endung eingebt, nach der die Dateien gefiltert werden sollen (zB mp3)
Klickt ihr nun auf OK, sollten eigentlich alle Dateien mit der Endung vom oberen Listview ins untere verschoben werden (siehe Funktion _SetFilter).
Wenn ihr aber genau schaut (Listviews und Ausgabe in Scite-Konsole), werden (zumindest bei mir) nicht alle Dateien verschoben und manche dafür doppelt erstellt, im unteren Listview.
Die anderen Funktion hab ich mal weggelassen, da sie ja unwichtig sind
Danke schon mal im vorraus.
MfG oetzn