Hallo alle miteinander,
ich bin´s mal wieder.
Mein Script sollte folgendes tun:
1.) Durchsucht 2 verschiedene Ordner (momentan sind sie noch fest, werden später variabel festgelegt)
2.) Listet alle Dateien (Ordner, Word-Dateien, einfach alle) in einer Array auf
3.) Erstellt ein List-View Gui, das mir die Sachen anzeigt - jeweils mit Vermerk, was damit ist.
Bis hierhin okay. Vielleicht kurz zum Sinn des Scripts: Verschiedene Personen intern arbeiten an gleichen Dateien, die aber in anderen Ordnern liegen könnten. Will heißen Einkäufer A arbeitet in Ordner A1 mit Datei A11. Gleichzeitig arbeitet Einkäufer B in Ordner B1 an Datei A11. Ob es jetzt sinnvoll ist die zu überschreiben oder nicht, sei erstmal egal... jedenfalls zeigt er mir dann auf "Dateiname" | "Aktueller" oder sonst iwas.
Als nächsten Schritt soll auf Doppelklick (eigentlich war geplant mit einem Button "kopieren" ganz unten, aber dazu hab ich noch nix gefunden) die Datei auch kopiert werden, von z. B. Ordner B1 in Ordner A1. Jetzt hab ich es soweit zusammengesucht, dass er mir auf Doppelklick iwas macht (Beispiel ganz unten Msgbox), allerdings passiert das ja dann bei jedem, den ich anklicke.
Meine Frage: Gibt es ´ne Möglichkeit, das so zu machen, dass er bei jedem verschiedenen Listviewitem ´nen anderen Befehl ausführt?
#Include <File.au3>
#Include <Array.au3>
#Include <Date.au3>
#include <INet.au3>
#include <Word.au3>
#include <GUIConstants.au3>
#include <_ArrayDisplayTree.au3>
; GUI Befehle
GUICreate("Vergleichspfade eingeben", 300, 180) ;Öffnet das Fenster
GUISetState (@SW_SHOW) ;Fenster wird angezeigt
$pfadi1 = GUICtrlCreateInput ( "C:\Users\install\Desktop\Kev", 50, 50) ;InputZeile für Pfad 1
$pfadi2 = GUICtrlCreateInput ( "C:\Users\install\Desktop\Salva", 50, 100) ;InputZeile für Pfad 2
GUICtrlCreateLabel ( "Beenden mit ESC", 100, 10)
$button = GUICtrlCreateButton("OK", 100, 140, 40, 20) ;Button "OK" wird angezeigt
$button2 = GUICtrlCreateButton("Beenden", 145, 140, 70, 20)
$pfad1 = "C:\Users\install\Desktop\Kev"
$pfad2 = "C:\Users\install\Desktop\Salva"
; Arrays für die Ergebnisse
Dim $vergleichsarray0[1]
$vergleichsarray0[0] = "Diese Dateien sind in beiden Ordnern!"
Dim $vergleichsarray1[1]
$vergleichsarray1[0] = "Diese Dateien sind im Ordner" & " " & $pfad1 & " " & "aktueller!"
Dim $vergleichsarray2[1]
$vergleichsarray2[0] = "Diese Dateien sind im Ordner" & " " & $pfad2 & " " & "aktueller!"
Dim $vergleichsarray4[1]
$vergleichsarray4[0] = "Diese Dateien sind nicht im Ordner " & $pfad1 & " vorhanden!"
Dim $vergleichsarray5[1]
$vergleichsarray5[0] = "Diese Dateien sind nicht im Ordner " & $pfad2 & " vorhanden!"
Dim $controllidarray1[1]
Dim $controllidarray2[1]
HotKeySet ("{ESC}","close")
While 1
$msg1 = GUIGetMsg()
Select
Case $msg1 = $button
GUIDelete()
GUICreate("Ordnervergleich©", 220, 250, 100, 250, -1, $WS_EX_ACCEPTFILES)
GUISetBkColor(45270255) ; will change background color
$listview = GUICtrlCreateListView($pfad1 & "|" & $pfad2, 10, 10, 200, 200);,$LVS_SORTDESCENDING)
$hlistview = GUICtrlGetHandle($listview)
GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; to allow drag and dropping
GUISetState()
GuisetState(@sw_maximize)
$button3 = GUICtrlCreateButton("Kopieren", 600, 900, 80, 20)
$button4 = GuiCtrlCreateButton("Ende", 700, 900, 80, 20)
; Holen der Pfadinformationen
$filelist1 = _FileListToArray($pfad1) ; Array der Dateien Pfad 1
$filelist2 = _FileListToArray($pfad2) ; Array der Dateien Pfad 2
$fileanzahl1 = $filelist1[0] ;Gibt an, wieviele Dateien es überhaupt sind, das wird in der Array in Zeile "0" ausgegeben
$fileanzahl2 = $filelist2[0] ;Gibt an, wieviele Dateien es überhaupt sind, das wird in der Array in Zeile "0" ausgegeben
$zaehler = 1
$zaehler3=1
While $zaehler <= $fileanzahl1 ;Läuft so lange, bis alle Dateien durch sind
; Holen der Dateiinformation aus Feld 1
$filename1 = $filelist1[$zaehler] ;Gibt Namen der Datei aus, für späteres 2. Array
;~ $filename2 = $filelist2
$filehandle1 = $pfad1 & "\" & $filelist1[$zaehler]
$filedatum1 = FileGetTime($filehandle1) ;Zeigt Datum der Datei an
If @error Then ;Falls hier ein Fehler entsteht, zeigt er folgendes an:
MsgBox(0,"$zaehler",$zaehler)
MsgBox(0,"$filehandle1",$filehandle1)
MsgBox(0,"$filelist1$zaehler",$filelist1[$zaehler])
Exit
EndIf
;Definiert das Datum im Format YYYY/MM/DD HH:MMS
$filedatum11=$filedatum1[0] & "/" & $filedatum1[1] & "/" & $filedatum1[2] & " " & $filedatum1[3] & ":" & $filedatum1[4] & ":" & $filedatum1[5]
;Sucht innerhalb der 2. Array, ob der Eintrag vorhanden ist.
$arraysearch1 = _ArraySearch($filelist2,$filename1)
If $arraysearch1 <> -1 Then ;Fehler wäre "-1", wenn also kein Fehler kommt, dann folgendes:
; Datei in beiden vorhanden
$filehandle2 = $pfad2 & "\" & $filelist2[$arraysearch1]
$filedatum2 = FileGetTime($filehandle2) ;Zeigt Datum der Datei an
$filedatum21=$filedatum2[0] & "/" & $filedatum2[1] & "/" & $filedatum2[2] & " " & $filedatum2[3] & ":" & $filedatum2[4] & ":" & $filedatum2[5] ;Definiert das Datum im Format YYYY/MM/DD HH:MMS
; Berechnen der Zeitdifferenz
$differenz= _DateDiff('n', $filedatum21,$filedatum11) ;Rechnet die Differenz der beiden Daten aus
If $differenz > 0 Then
_Arrayadd($vergleichsarray1, $filename1)
$controllid1 = GUICtrlCreateListViewItem("Ältere Datei" & "|" & $filename1 &, $listview)
_ArrayAdd($controllidarray1,$controllid1)
Endif
Else
; Datei in Pfad 1 aber nicht in Pfad 2
_ArrayAdd($vergleichsarray5, $filename1)
$controllid2 = GUICtrlCreateListViewItem("Nicht vorhanden" & "|" & $filename1, $listview)
_ArrayAdd($controllidarray2,$controllid2)
EndIf
$zaehler = $zaehler +1
WEnd
$zaehler = 1
While $zaehler <= $fileanzahl2 ;Läuft so lange, bis alle Dateien durch sind
; Holen der Dateiinformation aus Feld 1
$filename2 = $filelist2[$zaehler] ;Gibt Namen der Datei aus, für späteres 2. Array
$filehandle2 = $pfad2 & "\" & $filelist2[$zaehler]
$filedatum2 = FileGetTime($filehandle1) ;Zeigt Datum der Datei an
If @error Then
MsgBox(0,"$zaehler",$zaehler)
MsgBox(0,"$filehandle1",$filehandle1)
MsgBox(0,"$filelist1$zaehler",$filelist1[$zaehler])
Exit
EndIf
$filedatum11=$filedatum1[0] & "/" & $filedatum1[1] & "/" & $filedatum1[2] & " " & $filedatum1[3] & ":" & $filedatum1[4] & ":" & $filedatum1[5] ;Definiert das Datum im Format YYYY/MM/DD HH:MMS
$arraysearch2 = _ArraySearch($filelist1,$filename2)
If $arraysearch2 <> -1 Then
; Datei in beiden vorhanden
$filehandle2 = $pfad1 & "\" & $filelist1[$arraysearch1]
$filedatum2 = FileGetTime($filehandle2) ;Zeigt Datum der Datei an
$filedatum21=$filedatum2[0] & "/" & $filedatum2[1] & "/" & $filedatum2[2] & " " & $filedatum2[3] & ":" & $filedatum2[4] & ":" & $filedatum2[5] ;Definiert das Datum im Format YYYY/MM/DD HH:MMS
; Berechnen der Zeitdifferenz
$differenz= _DateDiff('n', $filedatum21,$filedatum11) ;Rechnet die Differenz der beiden Daten aus
If $differenz > 0 Then
$controllid1 = GUICtrlCreateListViewItem($filename2 & "|" & "Ältere Datei", $listview)
_ArrayAdd($controllidarray1,$controllid1)
Endif
Else
_ArrayAdd($vergleichsarray4, $filename2)
$controllid2 = GUICtrlCreateListViewItem($filename2 & "|" & "Nicht vorhanden", $listview)
_ArrayAdd($controllidarray2,$controllid2)
EndIf
$zaehler = $zaehler +1
WEnd
$zaehler0 = 0
For $i=1 to Ubound($controllidarray1)
GUICtrlSetBkColor($controllidarray1[$zaehler0],0xFFB90F)
$zaehler0 = $zaehler0 + 1
Next
$zaehler0 = 0
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
For $i=1 to Ubound($controllidarray2)
GUICtrlSetBkColor($controllidarray2[$zaehler0],0xFF0000)
$zaehler0 = $zaehler0 + 1
Next
While 1
$msg2 = GUIGetMsg()
Select
case $msg2 = $button3
msgbox(0,"","Hüllühüllü")
case $msg2 = $button4
Exit
Endselect
WEnd
case $msg1 = $button2
Exit
EndSelect
WEnd
;************************************
;************Funktionen**************
;************************************
Func close() ;Funktionsdeklarierung für den Hotkey "ESC"
Exit
EndFunc
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom ; Control
Case $hWndListView ; If Control = ListView
Switch $iCode ; Event
Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
msgbox(0,"","Blabla")
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY