Hallo erstmal
, ich bin noch nicht lange in der Autoit Szene und hab mal mich mal an ein etwas "größeres" getraut. Jedoch, ist es auch mit einigen Problemen verbunden.
Was das Programm beherschen sollte:
Zuerst macht man einen Scan von einem Ordner, zb einem Spiel ohne Patch, einem Programm ohne Lizenz oder auch einem Ordner den man überwachen möchte...
Danach macht man einen zweiten Scan. Dieser Scan soll bewirken, dass man die Veränderung auslesen kann und (aus)nutzen kann.
Die Probleme:
Das Programm erkennt manchmal die Veränderungen nicht
Zeile 122 - 132 meiner Meinung nach ![]()
Eigene Vermutung:
Ich glaube daran ist die Funktion "_ObjAListSearch" schuld, denn sie behält die Arrays und nimmt sie nach einem zweiten anklicken des Buttons "Vergleich" wieder in den Vergleich der Arrays auf, doch ich schaffe es nicht die Arrays wieder in die Ursprungsform (vor dem 1. Vergleich) zu pressen.
Zukünfige Entwicklung:
Bald (hoffe ich) soll das Programm in der Lage sein, die Veränderung auf Bytes genau wahrzunehmen und ein Fenster öffnen, in dem die Veränderungen angezeigt werden (ist schon im code enthalten, aber bisher ungenutzt).
Code:
Spoiler anzeigen
#include <File.au3>
#include <Array.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#include<UDF_ArrayAlternatives.au3>
#Include <GuiListBox.au3>
#Include <GuiListView.au3>
Global $Files
Global $BefList_1 = _ObjAListCreate()
Global $AftList_1 = _ObjAListCreate()
Global $BefList_2 = _ObjAListCreate()
Global $AftList_2 = _ObjAListCreate()
Global $sDiff1 = ''
#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("Form1", 701, 451, 192, 124)
$Label1 = GUICtrlCreateLabel("Auswertung", 280, 24, 94, 22)
GUICtrlSetFont(-1, 12, 800, 0, "Myriad Web Pro")
$ListView3 = GUICtrlCreateListView("", 24, 64, 650, 361, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$WS_VSCROLL))
_GUICtrlListView_InsertColumn($ListView3, 0, "Gelöscht", 216)
_GUICtrlListView_InsertColumn($ListView3, 1, "Verändert", 216)
_GUICtrlListView_InsertColumn($ListView3, 1, "Erstellt", 216)
GUISetState(@SW_HIDE)
#EndRegion ### END Koda GUI section ###
#Region ### START Koda GUI section ### Form=c:\users\andy\desktop\koda\forms\form1.kxf
$Form1 = GUICreate("Vergleich", 800, 550, 192, 124)
$listview1 = GUICtrlCreateListView ("",20,175,370,300, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$WS_VSCROLL))
_GUICtrlListView_InsertColumn($ListView1, 0, "Pfad", 260)
_GUICtrlListView_InsertColumn($ListView1, 1, "Größe in Bytes", 100)
$Label1 = GUICtrlCreateLabel("Ordner:", 75, 80, 55, 22)
GUICtrlSetFont(-1, 12, 400, 0, "Myriad Web Pro")
GUICtrlSetBkColor (-2,$GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor (-3,0xFFFF)
$Input1 = GUICtrlCreateInput(@ProgramFilesDir, 160, 77, 513, 28)
GUICtrlSetState(-1,$GUI_ACCEPTFILES)
GUICtrlSetFont(-2, 12, 400, 0, "MS Sans Serif")
$Button1 = GUICtrlCreateButton("...", 688, 75, 57, 33)
$Button2 = GUICtrlCreateButton("Before-Scan", 112, 130, 153, 41)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$listview2 = GUICtrlCreateListView ("",400,175,370,300, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$WS_VSCROLL))
_GUICtrlListView_InsertColumn($ListView2, 0, "Pfad", 260)
_GUICtrlListView_InsertColumn($ListView2, 1, "Größe in Bytes", 100)
$Button3 = GUICtrlCreateButton("After-Scan", 514, 130, 153, 41)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Button4 = GUICtrlCreateButton("Vergleich", 295, 488, 200, 45)
GUICtrlSetFont(-1, 14, 800, 0, "MS Sans Serif")
$Button5 = GUICtrlCreateButton("Load Before-Scan", 20, 479, 130, 41)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Button6 = GUICtrlCreateButton("Save Before-Scan", 150, 479, 130, 41)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Button7 = GUICtrlCreateButton("Load After-Scan", 510, 484, 130, 41)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Button8 = GUICtrlCreateButton("Save After-Scan", 640, 484, 130, 41)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
GUICtrlSetData($Input1, FileSelectFolder("", "", 3))
Case $Button2
$Read = _GUICtrlListView_GetItemText($listview1,0)
If $Read <> "" Then _GUICtrlListView_DeleteAllItems($listview1)
$Path = GUICtrlRead ($Input1)
$Files = _GetFileList($Path,'*',0)
For $i = 1 to Ubound($Files) - 1
$Size = FileGetSize ($Files[$i])
GUICtrlCreateListViewItem($Files[$i]&"|"&$Size,$listview1)
Next
Case $Button3
$Read = _GUICtrlListView_GetItemText($listview2,0)
If $Read <> "" Then _GUICtrlListView_DeleteAllItems($listview2)
$Path = GUICtrlRead ($Input1)
$Files = _GetFileList($Path,'*',0)
For $i = 1 to Ubound($Files) - 1
$Size = FileGetSize ($Files[$i])
GUICtrlCreateListViewItem($Files[$i]&"|"&$Size,$listview2)
Next
Case $Button4 ; Vergleich
[/autoit] [autoit][/autoit] [autoit]Global $a
Global $b
$count1 = _GUICtrlListView_GetItemCount ($listview1) ; BEFORE
For $i = 0 To $count1 -2
$Read1 = _GUICtrlListView_GetItemText($listview1,$i)
$Read2 = _GUICtrlListView_GetItemText($listview1,$i,1)
$a = $Read1&":"&$Read2&"|"&$a
Next
$Before = "'"&$a&_GUICtrlListView_GetItemText($listview1,$count1-1)&":"&_GUICtrlListView_GetItemText($listview1,$count1-1,1)&"'"
MsgBox (0,"test",$before)
$count2 = _GUICtrlListView_GetItemCount ($listview2) ; AFTER
For $i = 0 To $count2 -2
$Read3 = _GUICtrlListView_GetItemText($listview2,$i)
$Read4 = _GUICtrlListView_GetItemText($listview2,$i,1)
$b = $Read3&":"&$Read4&"|"&$b
Next
$After = "'"&$b&_GUICtrlListView_GetItemText($listview2,$count2-1)&":"&_GUICtrlListView_GetItemText($listview2,$count2-1,1)&"'"
MsgBox (0,"test",$after)
_ObjAListAddColl($BefList_1, $Before)
_ObjAListAddColl($AftList_1, $After)
_ObjAListAddColl($BefList_2, $Before)
_ObjAListAddColl($AftList_2, $After)
For $element1 In $BefList_1
If Not _ObjAListSearch($AftList_1, $element1) Then $sDiff1 = $element1
Next
MsgBox(0,"Vergleich von Liste A zu B", $sDiff1)
$sDiff1 = ""
For $element2 In $AftList_2
If Not _ObjAListSearch($BefList_2, $element2) Then $sDiff2 = $element2
Next
MsgBox(0,"Vergleich von Liste B zu A", $sDiff2)
$sDiff2 = ""
Case $Button5
$File = FileOpenDialog("Datei auswählen",@ScriptDir,"Textdatein (*.txt)",1)
$Read = _GUICtrlListView_GetItemText($listview1,0)
If $Read <> "" Then _GUICtrlListView_DeleteAllItems($listview1)
$Split = StringRegExpReplace($File, "^.*\\", "")
$Open = FileOpen ($Split)
$count = _FileCountLines ($File)
For $i = 1 to $count
$Read = FileReadLine ($Open,$i)
GUICtrlCreateListViewItem($Read,$listview1)
Next
Case $Button6
$File = FileSaveDialog("Speichern unter",@ScriptDir,"Textdatein (*.txt)")
$Create = _FileCreate ($File&".txt")
$hFile = FileOpen($File&".txt",2)
$count = _GUICtrlListView_GetItemCount ($listview1)
For $i = 0 To $count
$ListeAfter = _GUICtrlListView_GetItemTextString($listview1,$i)
FileWriteLine($hFile,$ListeAfter)
Next
FileClose($hFile)
Case $Button7
$File = FileOpenDialog("Datei auswählen",@ScriptDir,"Textdatein (*.txt)",1)
$Read = _GUICtrlListView_GetItemText($listview2,0)
If $Read <> "" Then _GUICtrlListView_DeleteAllItems($listview2)
$Split = StringRegExpReplace($File, "^.*\\", "")
$Open = FileOpen ($Split)
$count = _FileCountLines ($File)
For $i = 1 to $count
$Read = FileReadLine ($Open,$i)
GUICtrlCreateListViewItem($Read,$listview2)
Next
Case $Button8
$File = FileSaveDialog("Speichern unter",@ScriptDir,"Textdatein (*.txt)")
$Create = _FileCreate ($File&".txt")
$hFile = FileOpen($File&".txt",2)
$count = _GUICtrlListView_GetItemCount ($listview2)
For $i = 0 To $count
$ListeAfter = _GUICtrlListView_GetItemTextString($listview2,$i)
FileWriteLine($hFile,$ListeAfter)
Next
FileClose($hFile)
EndSwitch
WEnd
Func _GetFileList($T_DIR,$T_MASK,$DIR_ONLY=0)
Dim $N_DIRNAMES[2000000] ; max number of directories that can be scanned
Local $N_DIRCOUNT = 0
Local $N_FILE
Local $N_SEARCH
Local $N_TFILE
Local $N_OFILE
Local $T_FILENAMES
Local $T_FILECOUNT
Local $T_DIRCOUNT = 1
Local $FILEMASK
; check Filemask \ for empty File-Array by GetDirOnly
If $FILEMASK = "n" Then $FILEMASK = "*.no"
; remove the end \ If specified
If StringRight($T_DIR,1) = "\" Then $T_DIR = StringTrimRight($T_DIR,1)
$N_DIRNAMES[$T_DIRCOUNT] = $T_DIR
; Exit if base dir doesn't exists
If Not FileExists($T_DIR) Then Return 0
; keep on looping until all directories are scanned
While $T_DIRCOUNT > $N_DIRCOUNT
$N_DIRCOUNT = $N_DIRCOUNT + 1
; find all subdirs in this directory and save them in a array
$N_SEARCH = FileFindFirstFile($N_DIRNAMES[$N_DIRCOUNT] & "\*.*")
While 1
$N_FILE = FileFindNextFile($N_SEARCH)
If @error Then ExitLoop
; skip these references
If $N_FILE = "." Or $N_FILE = ".." Then ContinueLoop
$N_TFILE = $N_DIRNAMES[$N_DIRCOUNT] & "\" & $N_FILE
; if Directory than add to the list of directories to be processed
If StringInStr(FileGetAttrib( $N_TFILE ),"D") > 0 Then
$T_DIRCOUNT = $T_DIRCOUNT + 1
$N_DIRNAMES[$T_DIRCOUNT] = $N_TFILE
EndIf
Wend
FileClose($N_SEARCH) ; find all Files that mtach the MASK
$N_SEARCH = FileFindFirstFile($N_DIRNAMES[$N_DIRCOUNT] & "\" & $T_MASK )
If $N_SEARCH = -1 Then ContinueLoop
While 1
$N_FILE = FileFindNextFile($N_SEARCH)
If @error Then ExitLoop
; skip these references
If $N_FILE = "." Or $N_FILE = ".." Then ContinueLoop
$N_TFILE = $N_DIRNAMES[$N_DIRCOUNT] & "\" & $N_FILE
; if Directory than add to the list of directories to be processed
If StringInStr(FileGetAttrib( $N_TFILE ),"D") = 0 Then
$T_FILENAMES = $T_FILENAMES & $N_TFILE & @CR
$T_FILECOUNT = $T_FILECOUNT + 1
;MsgBox(0,'filecount ' & $T_FILECOUNT ,$N_TFILE)
EndIf
Wend
FileClose($N_SEARCH)
Wend
If $DIR_ONLY = 0 Then
$T_FILENAMES = StringTrimRight($T_FILENAMES,1)
$N_OFILE = StringSplit($T_FILENAMES,@CR)
Return( $N_OFILE )
Else
ReDim $N_DIRNAMES[$N_DIRCOUNT+1]
$N_DIRNAMES[0] = $N_DIRCOUNT
Return $N_DIRNAMES
EndIf
EndFunc ;==>_GetFileList
Ps: Man braucht da zu die UDF von Bugfix! (Klick mich )