Programmdatenbank (SQLite)

  • Hi Leute,

    Ich weiß nicht, ob ihr das kennt aber bei mir ist es jedenfalls so. Ich hab in meinem Programmordner, wo ich alle meine Setup's etc sammle, zwar eine ganz gute Ordnung, aber oft kann ich aus dem Dateinamen nicht herauslesen, was den dieses Programm tut.
    Da hab ich mir gedacht, schreib doch eine Datenbank :D

    Spoiler anzeigen
    [autoit]


    #region INCLUDES & STUFF
    ; ### GUI-Includes ###
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiStatusBar.au3>
    #include <ListViewConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <ProgressConstants.au3>
    #include <ComboConstants.au3>
    #include <GuiCombobox.au3>
    #include <GuiComboBoxEx.au3>

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

    ; ### Other Includes ###
    #include <File.au3>
    #include <Array.au3>
    #include <GuiListView.au3>
    #include <SendMessage.au3>
    #include <SQLite.au3>
    #include <SQLite.dll.au3>

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

    #NoAutoIt3Execute

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

    ; ### OPT & REGISTER ###
    Opt("TrayAutoPause", 0)
    Opt("TrayMenuMode", 1)
    Opt("GuiOnEventMode", 1)
    Opt("TrayOnEventMode", 1)

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

    OnAutoItExitRegister("_Exit")

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

    AdlibRegister("_UpdateTime", 1000)

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

    _SQLite_Startup()

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

    $hFileList = _SQLite_Open("Filelist.db")
    If @error Then _SQLite_Err()

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

    ; ### VAR ###
    Global $aData[2][3]
    Global $aTemp[1]
    Global $aParts[3] = [200, 635, 30]
    Global $bAbort = False

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

    Global $iSearch
    Global $iSearchBackup
    Global $sQuery
    Global $iIndex
    Global $sRadioState
    Global $bCloseWindow
    Global $sLastComment
    Global $hFileList
    Global $sRetType
    Global $aRet

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

    Local $aResult, $iRows, $iColumns
    If Not _SQLite_GetTable2d(-1, "SELECT * FROM Settings;", $aResult, $iRows, $iColumns) = $SQLITE_OK Then
    If Not _SQLite_Exec($hFileList, "CREATE TABLE Settings (Type, Value);") = $SQLITE_OK Then
    $bAbort = True
    _SQLite_Err()
    EndIf
    _SQLite_Exec(-1,"INSERT INTO Settings values ('DBLCLICK','RUN'); INSERT INTO Settings values ('CLOSEWND','FALSE');") ; buggy
    EndIf

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

    If _SQLite_GetTable2d(-1, "SELECT * FROM Settings WHERE Type='DBLCLICK';", $aResult, $iRows, $iColumns) = $SQLITE_OK Then $sRadioState = $aResult[1][1]
    If _SQLite_GetTable2d(-1, "SELECT * FROM Settings WHERE Type='CLOSEWND';", $aResult, $iRows, $iColumns) = $SQLITE_OK Then $bCloseWindow = $aResult[1][1]

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

    #endregion INCLUDES & STUFF

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

    #region ### GUI ###

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

    $hMain = GUICreate("Programmdatenbank", 692, 378, 203, 126)
    $ListView1 = GUICtrlCreateListView("Dateiname|Pfad|Beschreibung|Größe", 8, 64, 538, 286)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 100)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 100)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 250)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 50)
    $Group1 = GUICtrlCreateGroup("Funktionen ", 552, 64, 137, 145)
    $ButtonAddEntry = GUICtrlCreateButton("Eintrag hinzufügen", 560, 112, 123, 25, $WS_GROUP)
    $ButtonDelEntry = GUICtrlCreateButton("Eintrag löschen", 560, 176, 123, 25, $WS_GROUP)
    $ButtonOpenAddFolderGui = GUICtrlCreateButton("Ordner hinzufügen", 560, 80, 123, 25, $WS_GROUP)
    $ButtonChangeDesc = GUICtrlCreateButton("Details", 560, 144, 123, 25, $WS_GROUP)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("Suchfeld ", 8, 8, 681, 49)
    $InputSearchMain = GUICtrlCreateInput("", 16, 24, 409, 21)
    $ButtonSearchMain = GUICtrlCreateButton("Suchen", 432, 24, 123, 25, $WS_GROUP)
    $ButtonNextResult = GUICtrlCreateButton("Nächstes Ergebnis", 560, 24, 123, 25, $WS_GROUP)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group3 = GUICtrlCreateGroup("Programmfunktionen ", 552, 216, 137, 81)
    $ButtonRunFile = GUICtrlCreateButton("Starten", 560, 232, 123, 25, $WS_GROUP)
    $Button10 = GUICtrlCreateButton("Einstellungen", 560, 264, 123, 25)
    GUICtrlSetOnEvent(-1, "_Settings")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group4 = GUICtrlCreateGroup("Andere Funktionen ", 552, 304, 137, 49)
    $ButtonExit = GUICtrlCreateButton("Beenden", 560, 320, 123, 25, $WS_GROUP)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    $hDesc = GUICreate("Beschreibung ändern", 385, 297, 202, 129)
    $Group1 = GUICtrlCreateGroup("Daten", 8, 8, 273, 185)
    $LabelFileName = GUICtrlCreateLabel("Dateiname:", 16, 24, 61, 17)
    $InputFileName = GUICtrlCreateInput("", 16, 40, 129, 21, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    $LabelFilePath = GUICtrlCreateLabel("Dateipfad:", 16, 64, 53, 17)
    $InputFilePath = GUICtrlCreateInput("", 16, 80, 257, 21, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    $LabelFileDesc = GUICtrlCreateLabel("Beschreibung:", 16, 104, 72, 17)
    $InputFileDesc = GUICtrlCreateEdit("", 16, 128, 257, 57, $ES_WANTRETURN)
    GUICtrlSetData(-1, "")
    $LabelFileSizeDesc = GUICtrlCreateLabel("Dateigröße: (MB)", 152, 24, 83, 17)
    $InputFileSizeDesc = GUICtrlCreateInput("", 152, 40, 121, 21, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("Aktionen", 288, 8, 89, 121)
    $ButtonSaveDesc = GUICtrlCreateButton("Speichern", 296, 24, 75, 30, $WS_GROUP)
    $ButtonDelEntry_Desc = GUICtrlCreateButton("Löschen", 296, 88, 75, 30, $WS_GROUP)
    $ButtonAbort = GUICtrlCreateButton("Abbrechen", 296, 56, 75, 30, $WS_GROUP)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $ButtonRunFileDesc = GUICtrlCreateButton("STARTEN", 288, 136, 89, 57, $WS_GROUP)
    $Group4 = GUICtrlCreateGroup("Element auswählen", 8, 200, 369, 89)
    $Combo1 = GUICtrlCreateCombo("", 16, 216, 273, 30)
    $ButtonNextEntry = GUICtrlCreateButton("Nächstes", 296, 216, 75, 30, $WS_GROUP)
    $ButtonPrevEntry = GUICtrlCreateButton("Vorheriges", 296, 248, 75, 30, $WS_GROUP)
    $InputSearchDesc = GUICtrlCreateInput("", 16, 254, 193, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL))
    $ButtonSearchDesc = GUICtrlCreateButton("Suchen", 216, 248, 75, 30, $WS_GROUP)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    $hAddFolder = GUICreate("Ordner hinzufügen", 377, 220, 190, 124)
    $Group1 = GUICtrlCreateGroup("Pfad ", 8, 8, 361, 49)
    $InputFolderPath = GUICtrlCreateInput("", 16, 24, 257, 21)
    $ButtonSelectFolder = GUICtrlCreateButton("Durchsuchen", 280, 22, 83, 25, $WS_GROUP)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("Optionen (Derzeit deaktiviert)", 8, 64, 361, 113)
    $CheckboxExludeFiles = GUICtrlCreateCheckbox("Dateien ausschließen", 16, 80, 129, 17)
    $LabelFileExtensions = GUICtrlCreateLabel("Datenendungen: ", 16, 104, 87, 17)
    $InputFileTypes = GUICtrlCreateInput("", 104, 100, 145, 21)
    GUICtrlSetTip(-1, "Verschiedene Dateitypen mit '|' trennen.")
    $Label1FileSize = GUICtrlCreateLabel("Datei muss ", 16, 128, 59, 17)
    $ComboFileCompareType = GUICtrlCreateCombo("", 80, 124, 49, 25)
    GUICtrlSetData(-1, ">|<|=")
    $InputFileSize = GUICtrlCreateInput("", 136, 124, 113, 21, BitOR($ES_AUTOHSCROLL, $ES_NUMBER))
    $ComboFileSize = GUICtrlCreateCombo("", 256, 124, 73, 25)
    GUICtrlSetData(-1, "Byte|Kilobyte|Megabyte|Gigabyte")
    $Label2FileSize = GUICtrlCreateLabel("sein", 336, 128, 23, 17)
    $Label1NotAllowedChar = GUICtrlCreateLabel("Darf ", 16, 152, 27, 17)
    $InputNotAllowedChar = GUICtrlCreateInput("", 48, 148, 201, 21)
    GUICtrlSetTip(-1, "Mehrere Phrasen mit '|' trennen.")
    $Label2NotAllowedChar = GUICtrlCreateLabel("nicht enthalten", 256, 152, 74, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $ButtonAddFolder = GUICtrlCreateButton("Ordner hinzufügen", 8, 184, 363, 30, $WS_GROUP)

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

    $hSettings = GUICreate("Einstellungen", 209, 120, 206, 145)
    $Group1 = GUICtrlCreateGroup("Items", 8, 0, 193, 89)
    $Label1 = GUICtrlCreateLabel("Aktion bei Doppelklick in Listview:", 16, 16, 168, 17)
    $RadioRunProgramm = GUICtrlCreateRadio("Programm starten", 16, 40, 113, 17)
    $RadioShowDetails = GUICtrlCreateRadio("Details anzeigen", 16, 64, 113, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $CheckboxCloseAfterSave = GUICtrlCreateCheckbox("Detail-GUI nach Speichern schließen", 8, 96, 193, 17)

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

    ; 1. GUI
    GUICtrlSetOnEvent($ButtonAddEntry, "_AddEntry")
    GUICtrlSetOnEvent($ButtonDelEntry, "_DeleteEntry")
    GUICtrlSetOnEvent($ButtonOpenAddFolderGui, "_AddFolderGui")
    GUICtrlSetOnEvent($ButtonChangeDesc, "_ChangeDesc")
    GUICtrlSetOnEvent($ButtonSearchMain, "_Search")
    GUICtrlSetOnEvent($ButtonNextResult, "_Next")
    GUICtrlSetOnEvent($ButtonRunFile, "_Run")
    GUICtrlSetOnEvent($ButtonExit, "_Exit")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $hMain)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    ; 2.GUI
    GUICtrlSetOnEvent($ButtonSearchDesc, "_hDescSearch")
    GUICtrlSetOnEvent($ButtonSaveDesc, "_SaveDesc")
    GUICtrlSetOnEvent($ButtonDelEntry_Desc, "_DeleteEntry")
    GUICtrlSetOnEvent($ButtonAbort, "_ChangeDesc")
    GUICtrlSetOnEvent($ButtonRunFileDesc, "_Run")
    GUICtrlSetOnEvent($Combo1, "_SelElement")
    GUICtrlSetOnEvent($ButtonNextEntry, "_ChangeElement")
    GUICtrlSetOnEvent($ButtonPrevEntry, "_ChangeElement")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_ChangeDesc", $hDesc)
    ; 3.GUI
    GUICtrlSetOnEvent($ButtonSelectFolder, "_FileSelectFolder")
    GUICtrlSetOnEvent($CheckboxExludeFiles, "_ExcludeFiles")
    GUICtrlSetOnEvent($ButtonAddFolder, "_AddFolder")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_AddFolderGui", $hAddFolder)
    GUICtrlSetState($CheckboxExludeFiles, $GUI_DISABLE)
    GUICtrlSetState($InputFileTypes, $GUI_DISABLE)
    GUICtrlSetState($ComboFileSize, $GUI_DISABLE)
    GUICtrlSetState($InputFileSize, $GUI_DISABLE)
    GUICtrlSetState($ComboFileCompareType, $GUI_DISABLE)
    GUICtrlSetState($InputNotAllowedChar, $GUI_DISABLE)
    GUICtrlSetState($LabelFileExtensions, $GUI_DISABLE)
    GUICtrlSetState($Label1FileSize, $GUI_DISABLE)
    GUICtrlSetState($Label2FileSize, $GUI_DISABLE)
    GUICtrlSetState($Label1NotAllowedChar, $GUI_DISABLE)
    GUICtrlSetState($Label2NotAllowedChar, $GUI_DISABLE)
    ; 4.GUI
    Switch $sRadioState
    Case "RUN"
    GUICtrlSetState($RadioRunProgramm, $GUI_CHECKED)
    Case "SHOWDETAILS"
    GUICtrlSetState($RadioShowDetails, $GUI_CHECKED)
    EndSwitch

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

    Switch $bCloseWindow
    Case True
    GUICtrlSetState($CheckboxCloseAfterSave, $GUI_CHECKED)
    Case False
    GUICtrlSetState($CheckboxCloseAfterSave, $GUI_UNCHECKED)
    EndSwitch
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Settings", $hSettings)
    #endregion ### GUI ###

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

    #region STATUSBAR

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

    $hStatusBar1 = _GUICtrlStatusBar_Create($hMain)
    _GUICtrlStatusBar_SetParts($hStatusBar1, $aParts)
    _Status("Bereit")
    $Progress1 = GUICtrlCreateProgress(0, 0, -1, -1, $PBS_MARQUEE)
    GUICtrlSetData($Progress1, 0)
    $hProgress = GUICtrlGetHandle($Progress1)
    _GUICtrlStatusBar_EmbedControl($hStatusBar1, 1, $hProgress)
    _UpdateTime()

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

    Global $hListView1 = GUICtrlGetHandle($ListView1)
    Global $hCombo1 = GUICtrlGetHandle($Combo1)
    #endregion STATUSBAR

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

    #region MAIN PROGRAMM

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

    GUICtrlSetState($InputSearchMain, $GUI_FOCUS)

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

    GUISetState(@SW_SHOW, $hMain)

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

    _ReadSQLiteDB()

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

    #endregion MAIN PROGRAMM

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

    While 1
    Sleep(100)
    WEnd

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

    #region ############################## ################ ##############################
    #region ############################## SQLITE FUNCTIONS ##############################
    #region ############################## ################ ##############################

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

    Func _ReadSQLiteDB()
    Local $aData, $iRows, $iColumns
    If Not _SQLite_GetTable2d(-1, "SELECT * FROM Programms;", $aData, $iRows, $iColumns) = $SQLITE_OK Then
    If Not _SQLite_Exec($hFileList, "CREATE TABLE Programms (Name, Path, Comment, Size);") = $SQLITE_OK Then
    $bAbort = True
    _SQLite_Err()
    EndIf
    EndIf
    _GUICtrlListView_DeleteAllItems($hListView1)
    _GUICtrlListView_AddArray($hListView1, $aData)
    _GUICtrlListView_DeleteItem($hListView1, 0)
    EndFunc ;==>_ReadSQLiteDB

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

    Func _SQLite_Err($bExit = True)
    MsgBox(16, "SQLite Error", _SQLite_ErrMsg())
    If $bExit Then Exit
    EndFunc ;==>_SQLite_Err

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

    #endregion ############################## ################ ##############################

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

    #region ############################## ################ ##############################
    #region ############################## ADDING FUNCTIONS ##############################
    #region ############################## ################ ##############################

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

    Func _FileSelectFolder()
    $sFolder = FileSelectFolder("Bitte Ordner auswählen", "", 2, Default, $hMain)
    If $sFolder = "" Then Return
    GUICtrlSetData($InputFolderPath, $sFolder)
    WinActivate(_WinAPI_GetWindowText($hAddFolder))
    EndFunc ;==>_FileSelectFolder

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

    Func _ExcludeFiles()
    If GUICtrlRead($CheckboxExludeFiles) = 1 Then
    GUICtrlSetState($InputFileTypes, $GUI_ENABLE)
    GUICtrlSetState($ComboFileSize, $GUI_ENABLE)
    GUICtrlSetState($InputFileSize, $GUI_ENABLE)
    GUICtrlSetState($ComboFileCompareType, $GUI_ENABLE)
    GUICtrlSetState($InputNotAllowedChar, $GUI_ENABLE)
    GUICtrlSetState($LabelFileExtensions, $GUI_ENABLE)
    GUICtrlSetState($Label1FileSize, $GUI_ENABLE)
    GUICtrlSetState($Label2FileSize, $GUI_ENABLE)
    GUICtrlSetState($Label1NotAllowedChar, $GUI_ENABLE)
    GUICtrlSetState($Label2NotAllowedChar, $GUI_ENABLE)
    Else
    GUICtrlSetState($InputFileTypes, $GUI_DISABLE)
    GUICtrlSetState($ComboFileSize, $GUI_DISABLE)
    GUICtrlSetState($InputFileSize, $GUI_DISABLE)
    GUICtrlSetState($ComboFileCompareType, $GUI_DISABLE)
    GUICtrlSetState($InputNotAllowedChar, $GUI_DISABLE)
    GUICtrlSetState($LabelFileExtensions, $GUI_DISABLE)
    GUICtrlSetState($Label1FileSize, $GUI_DISABLE)
    GUICtrlSetState($Label2FileSize, $GUI_DISABLE)
    GUICtrlSetState($Label1NotAllowedChar, $GUI_DISABLE)
    GUICtrlSetState($Label2NotAllowedChar, $GUI_DISABLE)
    EndIf
    EndFunc ;==>_ExcludeFiles

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

    Func _AddFolderGui()
    Switch _WinAPI_IsWindowVisible($hAddFolder)
    Case True
    GUISetState(@SW_HIDE, $hAddFolder)

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

    Case False
    GUISetState(@SW_SHOW, $hAddFolder)
    EndSwitch
    EndFunc ;==>_AddFolderGui

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

    Func _AddFolder()
    Local $aDataRawNew[1]
    Local $szDrive, $szDir, $szFName, $szExt, $sPercGes, $sQuery
    Local $sFolder = GUICtrlRead($InputFolderPath)
    Local $sFileExtentions = GUICtrlRead($InputFileTypes)
    Local $sFileCompareType = GUICtrlRead($ComboFileCompareType)
    Local $sFileSize = GUICtrlRead($InputFileSize)
    Local $sFileSizeType = GUICtrlRead($ComboFileSize)
    Local $sNotAllowedChar = GUICtrlRead($InputNotAllowedChar)

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

    If GUICtrlRead($CheckboxExludeFiles) = 1 And ($sFileCompareType = "" Or $sFileSize = "" Or $sFileSizeType = "") Then
    MsgBox(48, "Fehler", "Bitte die Felder zur Größenangabe ausfüllen!")
    Return
    EndIf
    Switch $sFileSizeType
    Case "Byte"
    $sDivisor = "*1"
    Case "Megabyte"
    $sDivisor = "*1048576"
    Case "Kilobyte"
    $sDivisor = "*1024"
    Case "Gigabyte"
    $sDivisor = "*1073741824"
    EndSwitch
    If $sFolder = "" Or Not FileExists($sFolder) Then Return
    _AddFolderGui()
    _Status("Ordner wird durchsucht")
    _SendMessage($hProgress, $PBM_SETMARQUEE, True, 10)
    $aDataRawNew = _GetFilesFolder_Rekursiv($sFolder, "exe|zip|rar|7z|tar|gz|bz2", 0)
    $sPerc = 100 / (UBound($aDataRawNew) - 1)
    For $i = 1 To UBound($aDataRawNew) - 1
    ReDim $aData[UBound($aData) + 1][3]
    $aTempPath = _PathSplit($aDataRawNew[$i], $szDrive, $szDir, $szFName, $szExt)
    If GUICtrlRead($CheckboxExludeFiles) = 1 Then
    If Not StringInStr($aTempPath[3] & $aTempPath[4], $sNotAllowedChar, 1) And Execute(FileGetSize($aDataRawNew[$i]) & " " & $sFileCompareType & " " & Execute($sFileSize & $sDivisor)) = True And Not StringInStr($sFileExtentions, $aTempPath[4], 1) = 1 Then _SQLite_Exec(-1, "INSERT INTO Programms values ('" & $aTempPath[3] & $aTempPath[4] & "','" & $aTempPath[0] & "','Keine Beschreibung angegeben!'," & "'" & Round(FileGetSize($aTempPath[0]) / 1048576, 3) & "');")
    Else
    ;~ $sQuery &= "INSERT INTO Programms values ('" & $aTempPath[3] & $aTempPath[4] & "','" & $aTempPath[0] & "','Keine Beschreibung angegeben!'," & "'" & Round(FileGetSize($aTempPath[0]) / 1048576, 3) & "');"
    _SQLite_Exec(-1, "INSERT INTO Programms values ('" & $aTempPath[3] & $aTempPath[4] & "','" & $aTempPath[0] & "','Keine Beschreibung angegeben!'," & "'" & Round(FileGetSize($aTempPath[0]) / 1048576, 3) & "');")
    EndIf
    $sPercGes += $sPerc
    _Status("Einträge schreiben: " & Round($sPercGes, 0) & "%")
    Next
    _ReadSQLiteDB()
    _Status("Bereit")
    EndFunc ;==>_AddFolder

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

    Func _AddEntry()
    Local $szDrive, $szDir, $szFName, $szExt

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

    $sNewEntry = FileOpenDialog("Neue Datei hinzufügen", Default, "Zugelassene Dateien (*.exe;*.7z;*.zip;*.rar)")
    If @error Then Return
    ReDim $aData[UBound($aData) + 1][3]
    $aTempPath = _PathSplit($sNewEntry, $szDrive, $szDir, $szFName, $szExt)
    _SQLite_Exec(-1, "INSERT INTO Programms values ('" & $aTempPath[3] & $aTempPath[4] & "','" & $aTempPath[0] & "','Keine Beschreibung angegeben!'," & "'" & Round(FileGetSize($aTempPath[0]) / 1048576, 3) & "');")
    _ReadSQLiteDB()
    EndFunc ;==>_AddEntry
    #endregion ############################## ################ ##############################

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

    #region ############################## ################ ##############################
    #region ############################## DETAIL FUNCTIONS ##############################
    #region ############################## ################ ##############################

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

    Func _ChangeElement()
    Switch @GUI_CtrlId
    Case $ButtonNextEntry
    _GUICtrlComboBox_SetCurSel($hCombo1, _GUICtrlComboBox_GetCurSel($hCombo1) + 1)
    Case $ButtonPrevEntry
    _GUICtrlComboBox_SetCurSel($hCombo1, _GUICtrlComboBox_GetCurSel($hCombo1) - 1)
    Case Else
    _GUICtrlComboBox_SetCurSel($hCombo1, _GUICtrlComboBox_GetCurSel($hCombo1) + 1)
    EndSwitch
    _SelElement()
    EndFunc ;==>_ChangeElement

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

    Func _SelElement()
    Local $sNewEntryMarked = GUICtrlRead($Combo1), $aResult[1], $iRows, $iColumns
    If $sNewEntryMarked <> "" Then
    _SQLite_GetTable2d(-1, "SELECT * FROM Programms Where Name='" & $sNewEntryMarked & "'", $aResult, $iRows, $iColumns)
    GUICtrlSetData($InputFileName, $aResult[1][0])
    GUICtrlSetData($InputFilePath, $aResult[1][1])
    GUICtrlSetData($InputFileDesc, $aResult[1][2])
    GUICtrlSetData($InputFileSizeDesc, $aResult[1][3])
    EndIf
    EndFunc ;==>_SelElement

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

    Func _ChangeDesc($iIndex = -1)
    Local $sFileNames, $aResult[1], $iRows, $iColumns
    If _WinAPI_IsWindowVisible($hDesc) = True Then
    GUISetState(@SW_HIDE, $hDesc)
    GUICtrlSetState($InputSearchMain, $GUI_FOCUS)
    Return
    Else
    GUISetState(@SW_SHOW, $hDesc)
    EndIf

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

    If Not IsDeclared($iIndex) Then $iIndex = -1
    $aTemp = _GUICtrlListView_GetItemTextArray($hListView1, $iIndex)
    If $aTemp[1] = "" Then
    _ChangeDesc()
    Return
    EndIf

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

    _SQLite_GetTable2d(-1, "SELECT Name FROM Programms", $aResult, $iRows, $iColumns)

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

    For $iTemp = 1 To UBound($aResult, 1) - 1
    $sFileNames &= "|" & $aResult[$iTemp][0]
    Next

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

    GUICtrlSetData($Combo1, $sFileNames)

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

    _SQLite_GetTable2d(-1, "SELECT * FROM Programms Where Name='" & $aTemp[1] & "'", $aResult, $iRows, $iColumns, -1, True)

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

    GUICtrlSetData($InputFileName, $aResult[0][1])
    GUICtrlSetData($InputFilePath, $aResult[1][1])
    GUICtrlSetData($InputFileDesc, $aResult[2][1])
    GUICtrlSetData($InputFileSizeDesc, $aResult[3][1])

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

    $sTemp = GUICtrlRead($InputFileName)
    $aTempList = _GUICtrlComboBox_GetListArray($Combo1)
    For $iTemp = 1 To $aTempList[0]
    If StringInStr($aTempList[$iTemp], $sTemp, 1) Then ExitLoop
    Next
    _GUICtrlComboBox_SetCurSel($hCombo1, $iTemp - 1)
    EndFunc ;==>_ChangeDesc

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

    Func _SaveDesc()
    Local $sTempName = GUICtrlRead($InputFileName)
    Local $sTempDesc = GUICtrlRead($InputFileDesc)
    If StringLen($sTempDesc) = 0 Then Return
    _SQLite_Exec(-1, "UPDATE Programms SET Comment='" & $sTempDesc & "' WHERE Name='" & $sTempName & "';")
    _ReadSQLiteDB()
    If BitAND(GUICtrlRead($CheckboxCloseAfterSave), $GUI_CHECKED) = $GUI_CHECKED Then _ChangeDesc()
    EndFunc ;==>_SaveDesc
    #endregion ############################## ################ ##############################

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

    #region ############################## ################ ##############################
    #region ############################## SEARCH FUNCTIONS ##############################
    #region ############################## ################ ##############################

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

    Func _hDescSearch()
    $sQuery = GUICtrlRead($InputSearchDesc)
    If $sQuery = "" Or @error Then Return
    $iSearch = _GUICtrlComboBox_FindString($hCombo1, $sQuery)
    If $iSearch <> -1 Then
    _GUICtrlComboBox_SetCurSel($hCombo1, $iSearch)
    _SelElement()
    Else
    MsgBox(48, "Fehler", "Kein passender Eintrag gefunden!")
    EndIf
    EndFunc ;==>_hDescSearch

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

    Func _Search()
    $sQuery = GUICtrlRead($InputSearchMain)
    If $sQuery = "" Or @error Then Return
    _Status("Suchvorgang läuft")
    _SendMessage($hProgress, $PBM_SETMARQUEE, True, 10)
    For $iSearch = 0 To _GUICtrlListView_GetItemCount($hListView1)
    $aTemp = _GUICtrlListView_GetItemTextArray($hListView1, $iSearch)
    $sTemp = _ArrayToString($aTemp, "|", 1, 3)
    If StringInStr($sTemp, $sQuery, 2) <> 0 Then ExitLoop
    Next
    If $iSearch = _GUICtrlListView_GetItemCount($hListView1) Then
    MsgBox(48, "Fehler", "Kein passender Eintrag gefunden!")
    _Status("Kein Ergebnis gefunden - Bereit")
    Else
    _GUICtrlListView_SetItemSelected($hListView1, $iSearch, True, True)
    _Status("Ergebnis gefunden - Bereit")
    _GUICtrlListView_ClickItem($hListView1, $iSearch)
    $iSearchBackup = $iSearch
    EndIf
    _SendMessage($hProgress, $PBM_SETMARQUEE, False, 10)
    GUICtrlSetState($ButtonNextResult, $GUI_FOCUS)
    EndFunc ;==>_Search

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

    Func _Next()
    Switch $iSearchBackup
    Case 0
    MsgBox(48, "Fehler", "Bitte zuerst einen Suchvorgang ausführen!")
    Return
    Case Else
    If $sQuery <> GUICtrlRead($InputSearchMain) Then
    MsgBox(48, "Error", "Der Suchbegriff hat sich geändert!")
    Return
    Else
    _Status("Suchvorgang läuft")
    _SendMessage($hProgress, $PBM_SETMARQUEE, True, 10)
    For $iTemp = $iSearchBackup + 1 To _GUICtrlListView_GetItemCount($hListView1)
    $aTemp = _GUICtrlListView_GetItemTextArray($hListView1, $iTemp)
    $sTemp = _ArrayToString($aTemp, "|", 1, 3)
    If StringInStr($sTemp, $sQuery, 2) <> 0 Then ExitLoop
    Next
    If $iTemp = _GUICtrlListView_GetItemCount($hListView1) Then
    MsgBox(48, "Fehler", "Kein passender Eintrag gefunden!")
    _Status("Kein Ergebnis gefunden - Bereit")
    Else
    _GUICtrlListView_SetItemSelected($hListView1, $iTemp, True, True)
    _Status("Ergebnis gefunden - Bereit")
    _GUICtrlListView_ClickItem($hListView1, $iTemp)
    $iSearchBackup = $iTemp
    EndIf
    _SendMessage($hProgress, $PBM_SETMARQUEE, False, 10)
    EndIf
    EndSwitch
    EndFunc ;==>_Next

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

    #endregion ############################## ################ ##############################

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

    #region ############################## ############### ###############################
    #region ############################## ENTRY FUNCTIONS ###############################
    #region ############################## ############### ###############################

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

    Func _Run()
    Switch @GUI_CtrlId
    Case $ButtonRunFileDesc
    $aTemp = _GUICtrlComboBoxEx_GetItem($hCombo1, _GUICtrlComboBoxEx_GetCurSel($hCombo1))
    $aTempList = _GUICtrlComboBox_GetListArray($Combo1)
    For $iTemp = 1 To $aTempList[0]
    If StringInStr($aTempList[$iTemp], $aTemp[0], 1) Then ExitLoop
    Next
    $iIndex = $iTemp - 1
    Case $ButtonRunFile
    $iIndex = -1
    EndSwitch

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

    $aTemp = _GUICtrlListView_GetItemTextArray($hListView1, $iIndex)
    ShellExecute($aTemp[2])
    EndFunc ;==>_Run

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

    Func _DeleteEntry()
    If MsgBox(48 + 4, "Achtung!", "Wollen Sie dieses Element wirklich löschen?") = 6 Then
    $aTemp = _GUICtrlListView_GetItemTextArray($hListView1)
    _SQLite_Exec(-1, "DELETE FROM Programms Where Path='" & $aTemp[2] & "';")
    If WinActive(_WinAPI_GetWindowText($hDesc)) Then _ChangeElement()
    _ReadSQLiteDB()
    EndIf
    EndFunc ;==>_DeleteEntry
    #endregion ############################## ############### ###############################

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

    #region ############################## ############### ###############################
    #region ############################## OTHER FUNCTIONS ###############################
    #region ############################## ############### ###############################

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

    Func _Exit()
    OnAutoItExitUnregister("_Exit")
    _SQLite_Close($hFileList)
    _SQLite_Shutdown()
    Exit
    EndFunc ;==>_Exit

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

    Func _Settings()
    Switch _WinAPI_IsWindowVisible($hSettings)
    Case True
    GUISetState(@SW_HIDE, $hSettings)
    Select
    Case BitAND(GUICtrlRead($RadioRunProgramm), $GUI_CHECKED) = $GUI_CHECKED
    $sRadioState = "RUN"
    Case BitAND(GUICtrlRead($RadioShowDetails), $GUI_CHECKED) = $GUI_CHECKED
    $sRadioState = "SHOWDETAILS"
    Case Bitand(GUICtrlRead($CheckboxCloseAfterSave), $GUI_CHECKED) = $GUI_CHECKED
    $bCloseWindow = True
    Case Bitand(GUICtrlRead($CheckboxCloseAfterSave), $GUI_CHECKED) <> $GUI_CHECKED
    $bCloseWindow = False
    EndSelect
    _SQLite_Exec(-1,"UPDATE Settings SET Value='" & $sRadioState & "' WHERE Type='DBLCLICK';")
    _SQLite_Exec(-1,"UPDATE Settings SET Value='" & $bCloseWindow & "' WHERE Type='CLOSEWND';")

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

    Case False
    GUISetState(@SW_SHOW, $hSettings)
    EndSwitch
    EndFunc ;==>_Settings

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

    Func _UpdateTime()
    _GUICtrlStatusBar_SetText($hStatusBar1, @HOUR & ":" & @MIN & ":" & @SEC, 2)
    EndFunc ;==>_UpdateTime

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

    Func _Status($sText)
    _GUICtrlStatusBar_SetText($hStatusBar1, $sText)
    EndFunc ;==>_Status

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $ListView1
    If Not IsHWnd($ListView1) Then $hWndListView = GUICtrlGetHandle($ListView1)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    If $hWndFrom = $hWndListView And $iCode = $NM_DBLCLK Then
    $iIndex = ((DllStructGetData(DllStructCreate($tagNMITEMACTIVATE, $ilParam), "Index")))
    Switch $sRadioState

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

    Case "RUN"
    $aTemp = _GUICtrlListView_GetItemTextArray($hListView1, $iIndex)
    If ShellExecute($aTemp[2]) = 0 Then MsgBox(48, "Fehler", "Konnte Programm(" & $aTemp[1] & ") nicht starten!")
    Case "SHOWDETAILS"
    _ChangeDesc($iIndex)
    EndSwitch
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY
    #endregion ############################## ############### ###############################

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

    #region ##############################################################################
    #region ##############################################################################
    #region ###############################################################################

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

    ; ### Funktion von mir leicht verändert, um nach mehrerern Dateiendungen suchen zu können ###

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

    ;==================================================================================================
    ; 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])
    ; Modified: oetzn
    ;==================================================================================================
    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

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

    Func _ShowSubFolders($Folder, $Ext = '*', $Dir = -1, $Delim = @CRLF)
    $aExt = StringSplit($Ext, "|", 2) ;von mir eingefügt
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    For $i = 0 To UBound($aExt) - 1 ;von mir eingefügt
    If StringRight($file.Name, StringLen($aExt[$i])) = $aExt[$i] Then _ ; $Ext in $Ext[$i] geändert
    $strFiles &= $file.Path & $Delim
    Next ;von mir eingefügt
    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
    #endregion ###############################################################################

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

    Würde mich freuen, wenn ihr sie vielleicht mal testet, bzw mir sagt, ob sie euch gefällt oder was man noch verbessern/optimieren könnte, sowohl Bedien- als auch Programmiertechnisch .

    5. Mai 2010: UMSTIEG AUF SQLITE DATENBANK SYSTEM

    Behobene Bugs:

    • So, hab den Bug beim Firststart behoben, lag daran, dass die Einträge erst beim Beenden des Programms geschrieben werden und aber bei den Details aus der Ini ausgelesen werden. Sprich: neue Ini-Date -> Keine Einträge -> Error ..
    • Bug gefixt, der entstand wenn man einen neuen einzelnen Eintrag hinzufügen wollte..
    • Bug gefixt, der möglich gewesen wäre, wenn man das Programm mit einem anderen Arbeitsverzeichnis als @ScriptDir startet

    Neuerungen:

    • Hab jetzt auf aufgrund einer Anregung per PN eine Einstellungs-GUI eingebaut in der man einstellen kann, ob bei einem Doppelklick der Eintrag gestartet werden soll, oder ob die Details angezeigt werden.
    • 05.05.2010: Die Datenbank verwendet absofort eine SQLite-Datenbank.

    Bisherige Ideen:

    • Bei einer Ini-Datei die größer als 32KB werden würde, automatisch als CFG abspeichern gestrichen
    • eventuell ganz auf SQLite umsteigen erledigt

    05.05.2010: Falls ihr in der neuen Version noch irgendwelche Fehler/Bugs entdeckt, könnt ihr diese natürlich jederzeit melden!

  • Hallo,
    ich bin ein wenig kritisch :)

    Nach dem ersten mal rumspielen:

    Code
    C:\Dokumente und Einstellungen\******\Desktop\Scripte\Blog\Datenbank.au3 (408) : ==> Subscript used with non-Array variable.:
    GUICtrlSetData($InputFilePath, $aTempIniRead[1][1])

    Naja, Datenbank. Und wo ist die jetzt? ;) Ich halte persönlich von einer Ini nichts, mit SQLite oder so, die erstellste genauso schnell und hast deutlich mehr Übersicht. Wäre hier wohl die bessere Wahl.

    Trotzdem sieht es aber ganz nett aus, schön gestaltet! Schön gemacht.

    Edit: So, nach dem zweiten Start läuft es nun. Beim ersten mal den Ordner ausgewählt -> Nen File angeklickt und Details gedrückt -> Kam keine Filesize und so weiter und ist dann abgeschmiert.

    • Offizieller Beitrag

    Die Programm-Idee ist gut.
    Aber die Wahl einer INI-Datei als 'Datenbank' ist etwas unglücklich. Eine INI hat ein Größenlimit von 32k, das ist mit einer DB schnell erreicht. Auch fehlt die Möglichkeit zu komplexen, kombinierten Abfragen.
    Wenn schon kein SQLite verwendet wird, dann nutze besser eine normale Textdatei. Das findet z.B. in 'cfg'-Dateien Anwendung in der Art:
    Eintrag=param1;param2;param3;.....

  • hmm, naja das mit dem @SkriptDir ist nicht zwingend notwendig, da die Ini-Datei eh immer im aktuellen Arbeitsverzeichnis erstellt wird, falls nicht durch den Benutzer geändert :D
    aber ich werds einbauen ;) Danke für den Hinweis

    BugFix :
    Da muss ich dir widersprechen, ich weiß zwar nicht wo du das her hast, aber meine Ini-Datei ist 40k groß^^
    Sieh selbst:
    KLICK
    Aber du hast mich auf eine andere Idee gebracht, nämlich, dass man es dem Benutzer überlassen könnte, ob man die Daten in einer Ini oder cfg Datei speichern möchte.
    Vielleicht bau ich auch noch SQLite ein, aber da benötigt man dann eine DLL oder?

    [MSIE_newline_end ]