Guten Morgen!
Also ich habe mir einen kleinen Dateibrowser gebaut.
Dazu brauchte ich gestern (5.10) auch die Hilfe mit dem erkennen ob es Ordner oder etwas anderes ist.
So das hat dann auch soweit funktioniert.
Nur erkennt er nicht alle Ordner die vorhanden sind als Ordner sondern manchmal als Datei
Das sollte so natrülich nicht sein.
Hätte jamnd lust sich das mal anzuschauen?
Spoiler anzeigen
;########## START ##########
;////////// GLOBALS \\\\\\\\\\
Global Const $NM_FIRST = 0
Global Const $NM_DBLCLK = -3
;////////// ENDE \\\\\\\\\\
;////////// INCLUDES \\\\\\\\\
#include <GUIConstants.au3>
#include "SQLite.au3"
#include <GuiListView.au3>
#Include <process.au3>
;////////// ENDE \\\\\\\\\\
;////////// OPTIONS \\\\\\\\\\
Opt("GUIOnEventMode", 1)
;////////// ENDE \\\\\\\\\\
;////////// MAINSETTINGS \\\\\\\\\
$datei1 = @ScriptDir & "\ordner.db"
$pfad = IniRead(@Scriptdir & "\konfiguration.ini", "Pfad", "Value", @Scriptdir & "\")
$size = DirGetSize($pfad ,1)
;////////// ENDE \\\\\\\\\\
;////////// GUIS \\\\\\\\\\
;~~~~~~~~~~ MAINGUI ~~~~~~~~~~~
$MAIN_GUI = GUICreate("Scripts", 200, 440, 0, 0) ;ERSTELLT DIE GUI
_DoSQL("DELETE FROM applications;",$datei1) ;LÖSCHT ALLES AUS DER DATENBANK
$search = FileFindFirstFile($pfad & "*.*")
$LIST_FOLDER = GUICtrlCreateListView("Scripte", 0, 0, 200, 410, $LVS_LIST) ;ERSTELLT EINE LISTE
GUIRegisterMsg(0x004E, "_DoubleClickOnListView") ;DOPPELKLICK FUNKTION
$main_label = GUICtrlCreateLabel("LADE...", 80, 412, 100, 15) ;ERSTELLT EIN LABEL
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit") ;CLOSE BUTTON
GUISetState(@SW_Show) ;SETZT DIE GUI AUF SHOW
;~~~~~~~~~~ ENDE ~~~~~~~~~~
;~~~~~~~~~~ DATEI ~~~~~~~~~~
$DATEI_MENUE = GUICtrlCreateMenu("Datei") ;ERSTELLT DAS MENUE
$DATEI_ITEM2 = GUICtrlCreateMenuitem("Beenden", $DATEI_MENUE) ;ERSTELLT EIN ITEM
GUICtrlSetOnEvent($DATEI_ITEM2, "_exit") ;BEENDEN
;~~~~~~~~~~ ENDE ~~~~~~~~~~
;~~~~~~~~~~ OPTIONEN ~~~~~~~~~~
$OPTION_MENUE = GUICtrlCreateMenu("Optionen") ;ERSTELLT DAS MENUE
$OPTION_ITEM1 = GUICtrlCreateMenuitem("Einstellungen", $OPTION_MENUE) ;ERSTELLT EIN ITEM
GUICtrlSetOnEvent($OPTION_ITEM1, "_optionen") ;OPTIONEN GUI
;~~~~~~~~~~ ENDE ~~~~~~~~~~
;~~~~~~~~~~ INHALT LADEN ~~~~~~~~~~
For $n = 1 To $size[1]
$file = FileFindNextFile($search)
$insert = _DoSQL("INSERT INTO applications (Name, Pfad) VALUES ('" & $file & "', '" & $pfad & $file & "' );", $datei1)
Next
$db_read = _DoSQL("SELECT * FROM applications;", $datei1)
For $p = 1 To $db_read[0][0]
$inhalt1 = $db_read[$p][1]
GUICtrlCreateListViewItem($inhalt1, $List_Folder)
Next
GUICtrlSetData($main_label, "")
;~~~~~~~~~~ ENDE ~~~~~~~~~~
;~~~~~~~~~~ OPTIONGUI ~~~~~~~~~~
$OPT_GUI = GUICreate("Optionen", 200, 140) ;ERSTELLT DIE GUI
GUICtrlCreateLabel("Pfad", 10, 10, 100, 20) ;ERSTELLT EIN LABEL
GUICtrlCreateLabel("INFO: Die Pfadangabe muss immer mit einem ''\'' enden!", 10, 110, 180, 50) ;ERSTELLT EIN LABEL
$opt_input = GUICtrlCreateInput($pfad, 10, 30, 180, 20) ;ERSTELLLT EIN INPUTFELD
$opt_btn1 = GUICtrlCreateButton("OK", 10, 80, 75, 20) ;ERSTELLT EINEN BUTTON
GUICtrlSetOnEvent($opt_btn1, "_Opt_save") ;EINSTELLUNGEN SPEICHERN
$opt_btn2 = GUICtrlCreateButton("Abbrechen", 90, 80, 75, 20) ;ERSTELLT EIEN BUTTON
GUICtrlSetOnEvent($opt_btn2, "_opt_hide") ;ABBRECHEN
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit") ;BEENDEN
GUISetState(@SW_Hide, $OPT_GUI) ;SETZT DIE GUI AUF HIDE
;~~~~~~~~~~ ENDE ~~~~~~~~~~
;////////// ENDE \\\\\\\\\\
;////////// WHILESCHLEIFE \\\\\\\\\\
While 1 ;BEGINN DER SCHLEIFE
Sleep(100) ;100MS PAUSE
WEnd ;SCHLEIFENENDE
;////////// ENDE \\\\\\\\\\
;////////// FUNKTIONEN \\\\\\\\\\
;~~~~~~~~~~ OPTIONEN ~~~~~~~~~~
Func _optionen()
GUISetState(@SW_SHOW, $OPT_GUI) ;SETZT DIE GUI AUF SHOW
EndFunc
Func _opt_hide()
GUISetState(@SW_HIDE, $OPT_GUI) ;SETZT DIE GUI AUF HIDE
EndFunc
Func _opt_save()
$opt_input_read = GUICtrlRead($opt_input) ;ERSTELLT EIN INPUTFELD
IniWrite(@Scriptdir & "\konfiguration.ini", "Pfad", "Value", $opt_input_read);SCHREIBT IN EINE INIDATEI
Exit ;BEENDEN
EndFunc
;~~~~~~~~~~ ENDE ~~~~~~~~~~
;~~~~~~~~~~ BEENDEN ~~~~~~~~~
Func _exit()
;IniWrite(@Scriptdir & "\konfiguration.ini", "Pfad", "Value", "I:\DV\dv3\scripte\ordner\")
Exit ;BEENDEN
EndFunc
;~~~~~~~~~~ ENDE ~~~~~~~~~~
;////////// ENDE \\\\\\\\\\
;////////// EXTERN [AUTOIT.DE] \\\\\\\\\\
;~~~~~~~~~~ SQLFUNKTIONEN ~~~~~~~~~~
Func _DoSQL($_SQL_Code, $cal_filename)
Dim $ret_array[1024][10]
; Datenbank initialisieren und öffnen
_SQLite_Startup (@ScriptDir & "\sqlite3.dll")
If @error > 0 Then
MsgBoX(0, "Meldung", "SQLite-DLL konnte nicht geladen werden")
Return 0
EndIf
; hier kann man einen Standardpfad festlegen
$dbname = $cal_filename
_sqLiTe_opEn ($dbname)
If @error > 0 Then
MsgBoX(0, "Meldung", $dbname & " konnte nicht geöffnet werden (Rechte?, Datei in Benutzung?)")
Return 0
EndIf
Dim $hQuery, $aRow
$iTmp = _SQlite_Query (-1, $_SQL_Code, $hQuery)
If Not $iTmp = $SQLITE_OK Then
MsgBoX(0, "Meldung", "SQLite-Befehl verursachte einen Fehler: " & $_SQL_Code)
EndIf
$num_results = 0
While _SQLite_FetchData ($hQuery, $aRow) = $SQLITE_OK
$num_results += 1
; Daten in Array kippen und dann zurückgeben (noch nicht getestet)
For $i = 0 To UBound($aRow) - 1
$ret_array[$num_results][$i] = $aRow[$i]
Next
WEnd
; Länge des Ergebnisses erfassen, Ergebnisse ab $ret_array[1]
$ret_array[0][0] = $num_results
$ret_array[0][1] = UBound($aRow)
$iTmp = _SQLite_Close ()
If Not $iTmp = $SQLITE_OK Then
MsgBoX(0, "Meldung", "Datenbank konnte nicht geschlossen werden.")
MsgBoX(0, "Meldung", "SQLite ErrCode: " & $iTmp)
MsgBoX(0, "Meldung", "SQLite ErrMsg: " & _SQLite_ErrMsg ())
Return 0
EndIf
_SQLite_Shutdown ()
Return $ret_array
EndFunc
;~~~~~~~~~~ ENDE ~~~~~~~~~~
;~~~~~~~~~~ DOUBLECLICK ~~~~~~~~~~
Func _DoubleClickOnListView($hWndGUI, $MsgID, $wParam, $lParam);Die Eigentliche Funktion
Local $tagNMHDR, $event, $hwndFrom, $code
$tagNMHDR = DllStructCreate("int;int;int", $lParam)
If @error Then Return
$event = DllStructGetData($tagNMHDR, 3); Checkt wie das EVENT aussieht
If $wParam = $List_Folder Then;Wenn der Klick auf das ListView ging..
If $event = $NM_DBLCLK Then;.. Wenn es ein DoppelKlick war
; Hier kommt hin was er machen soll:
$read_select = GUICtrlRead(GUICtrlRead($LIST_FOLDER))
If StringInStr(FileGetAttrib($read_select),"D") Then
;?????????? TEST ??????????
IniWrite(@Scriptdir & "\konfiguration.ini", "Pfad", "Value", $pfad & $read_select & "\")
$pfad = IniRead(@Scriptdir & "\konfiguration.ini", "Pfad", "Value", "")
$filesearch = FileFindFirstFile($pfad & "*.*")
$size2 = DirGetSize($pfad ,1)
_DoSQL("DELETE FROM applications;",$datei1)
_GUICtrlListViewDeleteAllItems($LIST_FOLDER)
For $a = 1 to $size2[1]
$filefind = FileFindNextFile($filesearch)
_DoSQL("INSERT INTO applications (Name, Pfad) VALUES ('" & $filefind & "', '" & $pfad & $filefind & "' );", $datei1)
Next
$db_read = _DoSQL("SELECT * FROM applications;", $datei1)
For $p = 1 To $db_read[0][0]
$inhalt1 = $db_read[$p][1]
GUICtrlCreateListViewItem($inhalt1, $List_Folder)
Next
;?????????? ENDE ??????????
Else
MsgBox(4, "Test", $pfad)
EndIf
EndIf
EndIf
$tagNMHDR = 0
$event = 0
$lParam = 0
EndFunc
;~~~~~~~~~~ ENDE ~~~~~~~~~~
;////////// ENDE \\\\\\\\\\
;########## ENDE ##########
[/autoit]Ich habe auch noch mal eine Zip angefügt wo alle Dateien die benötigt werden dabei sind. ( Vor scriptstart muss in der Konfiguration.ini der Pfad geändert werden)
Mfg AIDEN