Listview - Beim klicken soll etwas "ausgeführt" werden

  • 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?


    [autoit]


    #Include <File.au3>
    #Include <Array.au3>
    #Include <Date.au3>
    #include <INet.au3>
    #include <Word.au3>
    #include <GUIConstants.au3>
    #include <_ArrayDisplayTree.au3>

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


    ; 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")

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

    For $i=1 to Ubound($controllidarray2)
    GUICtrlSetBkColor($controllidarray2[$zaehler0],0xFF0000)
    $zaehler0 = $zaehler0 + 1
    Next

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

    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

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

    ;************************************
    ;************Funktionen**************
    ;************************************

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

    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

    [/autoit]
  • Machs doch so:

    [autoit]


    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 $Listview1 ; If Control = ListView ; Dein erster erstellter 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
    Case $Listview2 ; Dein zweiter erstellter Listview
    Switch $iCode2
    Case $NM_DBLCLK
    msgbox(0,"","Blabla")
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]