1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Yaerox

Beiträge von Yaerox

  • Sonderzeichen und Umlaute ersetzen

    • Yaerox
    • 7. März 2013 um 11:18

    Ups wollte eigentlich nur editieren x'D

  • Sonderzeichen und Umlaute ersetzen

    • Yaerox
    • 7. März 2013 um 09:35

    Ohh mein Gott, war gestern schon relativ müde und seh jetzt auch was ich da für n Mist geschrieben habe 8|

    Naja habe es mal ein wenig bearbeitet, funktioniert nun.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Local $sString = "M.í/k\é-P_ât,r'íck,Güntèr"
    Local $aChars[43][2] = [['Ä','Ae'], _
    ['Ö','Oe'], _
    ['Ü','Ue'], _
    ['ä','ae'], _
    ['ö','oe'], _
    ['ü','ue'], _
    ['Â','A'], _
    ['À','A'], _
    ['Á','A'], _
    ['â','a'], _
    ['á','a'], _
    ['à','a'], _
    ['Ê','E'], _
    ['È','E'], _
    ['É','E'], _
    ['ê','e'], _
    ['é','e'], _
    ['è','e'], _
    ['Î','I'], _
    ['Ì','I'], _
    ['Í','I'], _
    ['î','i'], _
    ['í','i'], _
    ['ì','i'], _
    ['Ô','O'], _
    ['Ò','O'], _
    ['Ó','O'], _
    ['ô','o'], _
    ['ó','o'], _
    ['ò','o'], _
    ['Û','U'], _
    ['Ù','U'], _
    ['Ú','U'], _
    ['û','U'], _
    ['ú','U'], _
    ['ù','U'], _
    ['\_',''], _ ; _
    ['\\',''], _ ; \
    ['\/',''], _ ; /
    ['\.',''], _ ; .
    ['\-',''], _ ; -
    ['\,',''], _ ; ,
    ["\'",'']] ; '

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

    For $i = 0 To UBound($aChars) - 1 Step 1
    If StringRegExp($sString, $aChars[$i][0]) = 1 Then $sString = StringRegExpReplace($sString, $aChars[$i][0], $aChars[$i][1])
    Next

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

    ConsoleWrite($sString & @CR)

    [/autoit]
  • Sonderzeichen und Umlaute ersetzen

    • Yaerox
    • 6. März 2013 um 22:37

    Heyho,

    schreib grad eine Funktion die alle Sonderzeichen und Umlaute in einem String ersetzen soll, leider funktioniert dies aber noch nicht wirklich wie gewünscht. Ich habe wie folgt angefangen:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    Local $sString = "Míke"
    Local $aChars[42][2] = [['Ä','Ae'], _
    ['Ö','Oe'], _
    ['Ü','Ue'], _
    ['ä','ae'], _
    ['ö','oe'], _
    ['ü','ue'], _
    ['Â','A'], _
    ['À','A'], _
    ['Á','A'], _
    ['â','a'], _
    ['á','a'], _
    ['à','a'], _
    ['Ê','E'], _
    ['È','E'], _
    ['É','E'], _
    ['ê','e'], _
    ['é','e'], _
    ['è','e'], _
    ['Î','I'], _
    ['Ì','I'], _
    ['Í','I'], _
    ['î','i'], _
    ['í','i'], _
    ['ì','i'], _
    ['Ô','O'], _
    ['Ò','O'], _
    ['Ó','O'], _
    ['ô','o'], _
    ['ó','o'], _
    ['ò','o'], _
    ['Û','U'], _
    ['Ù','U'], _
    ['Ú','U'], _
    ['û','U'], _
    ['ú','U'], _
    ['ù','U'], _
    [',',''], _
    ['.',''], _
    ['-',''], _
    ['/',''], _
    ['\',''], _
    ['_','']]

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

    For $i = 0 To UBound($aChars) - 1 Step 1
    Local $aTest = StringRegExpReplace($sString, $aChars[$i][0], $aChars[$i][1])
    Next
    ConsoleWrite($sString & @CR)

    [/autoit]

    Aber das i mit Sonderzeichen wird leider nicht ausgetauscht. Ich habe mal gehört in C prüft man auf Sonderzeichen durch den Dezimalwert der ASCII-Tabelle. Geht sowas in AutoIt auch? Hat jemand einen Tipp für mich?

    Grüße

    Edit Oscar: Spoiler-Tags hinzugefügt!

  • Datei wird nicht gelöscht

    • Yaerox
    • 13. Februar 2013 um 20:54

    Ich habe in der FileSave Funktion die ganze Zeit nach solchen banalen dummen Fehlern gesucht, och Gott -.- Das FileClose im FileRead ist die Lösung ^^

    Danke

  • Datei wird nicht gelöscht

    • Yaerox
    • 13. Februar 2013 um 19:50

    Hallo, das folgende Script soll eine Datei nach einer Bestimmten Zeile durchsuchen, und anbieten diese Zeile zu bearbeiten. Dies funktioniert alles soweit, nur soll eine zweite .tmp Datei erstellt werden in der die Änderungen vorgenommen werden, dann die originale Datei gelöscht, und die die .tmp umbenannt werden ohne .tmp.

    Die .tmp Datei wird richtig erstellt aber das FileDelete funktioniert nicht. Rückgabewert ist 1 (Erfolgreich), aber die Datei wird erst gelöscht nachdem das Script beendet wird. Ich habe keine Idee wieso.

    Grüße

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <EditConstants.au3>

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

    Opt('MustDeclareVars', 1)
    Opt('GUIOnEventMode', 1)

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

    #region $Vars
    Local $hGUI
    Local $hMenu
    Local $hMenu_Exit
    Local $hMenu_Help
    Local $hMenu_About
    Local $hButton_PickFile
    Local $sInput_PickFile
    Local $hButton_SaveFile
    Local $sInput_SaveFile
    Local $hLabel_Id
    Local $sLabel_Id
    Local $sInput_Newline
    Local $msg
    Global $iId = 308
    #endregion $Vars

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

    $hGUI = GUICreate("EditFile", 335, 220)
    $hMenu = GUICtrlCreateMenu("File")
    $hMenu_Exit = GUICtrlCreateMenuItem("Exit", $hMenu)
    $hMenu_Help = GUICtrlCreateMenu("?")
    $hMenu_About = GUICtrlCreateMenuItem("About", $hMenu_Help)
    $hButton_PickFile = GUICtrlCreateButton("Pick file", 10, 10, 80, 20)
    $sInput_PickFile = GUICtrlCreateInput("", 95, 10, 230, 20, $ES_READONLY)
    $hButton_SaveFile = GUICtrlCreateButton("Save file", 10, 35, 80, 20)
    $hLabel_Id = GUICtrlCreateLabel("Kennziffer:", 10, 60, 60, 20)
    $sLabel_Id = GUICtrlCreateLabel($iId, 70, 60, 60, 20)
    $sInput_Newline = GUICtrlCreateEdit("", 10, 80, 315, 110)

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

    GUISetState() ; will display an dialog box with 2 button
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $hGUI)
    GUICtrlSetOnEvent($hButton_PickFile, "_FileRead")
    GUICtrlSetOnEvent($hButton_SaveFile, "_FileSave")

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

    ; Run the GUI until the dialog is closed
    While 1
    Sleep(100)
    WEnd

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

    Func _FileRead()
    Local $hPickedFile
    Local $hFile
    Local $sLine

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

    $hPickedFile = FileOpenDialog("", @FavoritesDir & "", "All (*.txt)")
    GUICtrlSetData($sInput_PickFile, $hPickedFile)
    $hFile = FileOpen($hPickedFile)
    While 1
    $sLine = FileReadLine($hFile)
    If @error = -1 Then ExitLoop
    If StringLeft($sLine, 3) = $iId Then GUICtrlSetData($sInput_Newline, StringMid($sLine, StringLen($iId)+1, StringLen($sLine)))
    WEnd
    EndFunc

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

    Func _FileSave()
    ;Original Datei öffnen
    Local $hOfile = FileOpen(GUICtrlRead($sInput_PickFile), 0)
    If $hOfile = -1 Then
    MsgBox(0, "Fehler", "Datei konnte nicht geöffnet werden." & " Bitte überprüfen Sie, ob die Datei bereits genutzt wird.")
    Return 0
    EndIf

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

    ;Tmp Datei erstellen/öffnen
    Local $hTmpfile = FileOpen(GUICtrlRead($sInput_PickFile) & ".tmp", 2)
    If $hTmpfile = -1 Then
    MsgBox(0, "Fehler", "Temporäre Datei konnte nicht angelegt werden.")
    Return 0
    EndIf

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

    While 1
    Local $sLine = FileReadLine($hOfile)
    If @error = -1 Then ExitLoop
    If StringLeft($sLine, 3) = $iId Then
    FileWriteLine($hTmpfile, $iId & GUICtrlRead($sInput_Newline))
    Else
    FileWriteLine($hTmpfile, $sLine)
    EndIf
    WEnd

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

    FileClose($hOfile)
    FileClose($hTmpfile)

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

    MsgBox(0,"1",FileDelete(GUICtrlRead($sInput_PickFile)))
    ;~ MsgBox(0,"2",FileMove(GUICtrlRead($sInput_PickFile) & ".tmp", GUICtrlRead($sInput_PickFile), 1))
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]
  • Maus flackert über Controls

    • Yaerox
    • 6. Februar 2013 um 10:50

    Niemand mehr eine Idee? :/

  • Maus flackert über Controls

    • Yaerox
    • 4. Februar 2013 um 16:29

    Ui, da muss ich mir erstmal ein Beispiel zu holen und rein lesen ... habe mit dem _WinAPI noch net gearbeitet.

    #Edit: Habe folgendes Beispielscript gefunden:

    Spoiler anzeigen
    [autoit]

    ;««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    ; _WinAPI_CreateWindowEx.au3
    ;««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    #include <WindowsConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <StaticConstants.au3>
    #include <Constants.au3>

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

    #include <WinAPI.au3>

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

    Opt("MustDeclareVars", 1)

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

    Global Const $IDC_STATIC = -1

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

    Global Const $IDC_EDIT = 101

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

    Global $hInstance

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

    ;««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    Exit (Example())
    ;««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

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

    Func Example()

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

    Local $hwndMain
    Local $hwndEdit
    Local $hwndStatic
    Local $hwndButton

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

    $hInstance = _WinAPI_GetModuleHandle(0)

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

    ; Das Hauptfenster erzeugen
    $hwndMain = GUICreate( _
    "_WinAPI_CreateWindowEx - Demo", _ ; Titel des Fensters
    400, 300, -1, -1, _ ; Grösse und Position des Fensters
    BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPCHILDREN), _ ; Fensterstile
    $WS_EX_WINDOWEDGE, _ ; Erweiterte Fensterstile
    0 _ ; Handle des Parent-Fensters
    )

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

    ; Eine einfaches Eingabefeld erzeugen
    $hwndEdit = _WinAPI_CreateWindowEx( _
    0, _ ; Erweiterte Fensterstile
    "EDIT", _ ; Name der Fensterklasse
    "ENTER drücken...", _ ; Text/Titel des Fensters
    BitOR($WS_TABSTOP, $WS_CHILD, $WS_BORDER, _ ; Fensterstile
    $WS_VISIBLE, $ES_LEFT, $ES_NOHIDESEL), _
    100, 80, 200, 22, _ ; Position und Grösse des Fensters
    $hwndMain, _ ; Handle des Parent-Fensters
    $IDC_EDIT, _ ; Identifizierer des (Kind-)Fensters
    $hInstance, _ ; Instanzhandle des Moduls
    0 _ ; Anwendungsdefinierter Wert
    )

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

    ; Eine einfaches Textlabel erzeugen
    $hwndStatic = _WinAPI_CreateWindowEx( _
    0, _ ; Erweiterte Fensterstile
    "STATIC", _ ; Name der Fensterklasse
    "Text", _ ; Text/Titel des Fensters
    BitOR($WS_TABSTOP, $WS_CHILD, _ ; Fensterstile
    $WS_VISIBLE, $SS_CENTER), _
    160, 140, 80, 18, _ ; Position und Grösse des Fensters
    $hwndMain, _ ; Handle des Parent-Fensters
    $IDC_STATIC, _ ; Identifizierer des (Kind-)Fensters
    $hInstance, _ ; Instanzhandle des Moduls
    0 _ ; Anwendungsdefinierter Wert
    )

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

    ; Eine einfache Schaltfläche erzeugen
    $hwndButton = _WinAPI_CreateWindowEx( _
    0, _ ; Erweiterte Fensterstile
    "BUTTON", _ ; Name der Fensterklasse
    "Text", _ ; Text/Titel des Fensters
    BitOR($WS_TABSTOP, $WS_CHILD, _ ; Fensterstile
    $WS_VISIBLE, $BS_DEFPUSHBUTTON), _
    160, 220, 80, 25, _ ; Position und Grösse des Fensters
    $hwndMain, _ ; Handle des Parent-Fensters
    $IDOK, _ ; Identifizierer des (Kind-)Fensters
    $hInstance, _ ; Instanzhandle des Moduls
    0 _ ; Anwendungsdefinierter Wert
    )

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

    ; Fensternachrichten registrieren
    GUIRegisterMsg($WM_COMMAND, "MyWM_COMMAND")

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

    ; Das Hauptfenster anzeigen
    _WinAPI_ShowWindow($hwndMain, @SW_SHOW)

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

    While (True)

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

    Switch (GUIGetMsg())
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd

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

    EndFunc ;==>Example

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

    Func MyWM_COMMAND($hwnd, $message, $wParam, $lParam)

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

    Local $sMessage

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

    Switch (_WinAPI_LoWord($wParam))
    Case $IDC_EDIT
    ; Nachrichten des Eingabefeldes
    Switch (_WinAPI_HiWord($wParam))

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

    Case $EN_UPDATE
    ContinueCase
    Case $EN_CHANGE
    ConsoleWrite(_WinAPI_GetWindowText($lParam) & @CRLF)
    EndSwitch

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

    Case $IDOK
    $sMessage = StringFormat("Die Schaltfläche mit der ID %d wurde gedrückt.", $IDOK)
    _WinAPI_MsgBox( _
    BitOR($MB_OK, $MB_ICONASTERISK), _
    "MyWM_COMMAND", _
    $sMessage _
    )
    EndSwitch

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

    Return $GUI_RUNDEFMSG

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

    EndFunc ;==>MyWM_COMMAND

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

    ;«««««««««««««««««««««««««««««««« End of File «««««««««««««««««««««««««««««««««

    [/autoit]


    Quelle: translation.autoit.de aber immernoch gleiches Problem.

  • Maus flackert über Controls

    • Yaerox
    • 4. Februar 2013 um 16:19

    Habe schon so viel darüber gesucht, aber irgendwie war es immer dass bei einigen nichts ist, bei anderen mit identischem System der Fehler auftritt und keiner weiss woran es liegt. Angeblich gab es da mal damals ein Problem mit AutoIt, habe aber in den Patchnotes bisher nichts finden können...

  • Maus flackert über Controls

    • Yaerox
    • 4. Februar 2013 um 16:00

    Hallo zusammen,
    sagt mal kennt von euch zufällig jemand eine Lösung für folgendes Problem. http://www.autoitscript.com/forum/topic/12…r-edit-control/ ?

    Meine AutoIt Version: 3.3.8.1
    OS: Windows 7 Prof 64 Bit (alle Treiber aktuell)
    Problem tritt bei eigenen sowie den Testscripts auf, compiliert und als Script. Bei einem Kollegen funktioniert alles mit gleichem SetUp ohne Probleme.

    Suche da schon seit einiger Zeit immer mal zwischendurch, bisher mit Google und dem deutschen sowie englischem Forum erfolgslos :/

    Grüße

  • Variablen schließen nicht? - Seht ihr einen Fehler?

    • Yaerox
    • 28. Januar 2013 um 15:08

    Nachdem ich nun mein Script langsam wieder zusammenflicken wollte, taucht auf einmal ein altes Problem auf 8| Der Speicher wächst ca. 100-200K pro durchlauf. Damals war es weil ich kein SQL Query Finalize hatte, jetzt bin ich langsam überfragt.

    Mein Testscript, mit dem ich den Fehler nach der Info aus dem englischen Forum behoben habe, lief 3 Tage am Stück ohne zu steigen und sich aufzuhängen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>

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

    Opt("GUIOnEventMode", 1)
    Opt("MustDeclareVars", 1)
    OnAutoItExitRegister("_exit")

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

    ; This is a flag to show whether we should check the timer or not
    Global $fCheck_Timer = True, $iBegin
    Global $aQueue[1][3]
    Global $aTasks[5][2]

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

    Global $hGUI = GUICreate("Aufgabenliste", 250, 390)

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

    Global $iCounter_label = 0
    Global $hCounter_label = GUICtrlCreateLabel("0", 50, 72, 200, 20)
    Global $hLoadBtn = GUICtrlCreateButton("Load", 140, 40, 100, 30)
    Global $hStartBtn = GUICtrlCreateButton("Start", 30, 5, 50, 30)
    Global $hStopBtn = GUICtrlCreateButton("Stop", 30, 40, 50, 30)

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

    GUISetState(@SW_SHOW, $hGUI)

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

    GUICtrlSetOnEvent($hLoadBtn, "_load")
    GUICtrlSetOnEvent($hStartBtn, "_check")
    GUICtrlSetOnEvent($hStopBtn, "_stop_working")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit", $hGUI)

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

    ; Set teh initial timestamp
    $iBegin = TimerInit()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _load()
    $aQueue[0][0] = "0"
    $aQueue[0][1] = "18/01/2013 08:00:00"
    $aQueue[0][2] = "Test"
    EndFunc ;==>_load

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

    Func _check()
    AdlibRegister("_compare_datetimes", 1000)
    EndFunc ;==>_check

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

    Func _compare_datetimes()
    ConsoleWrite(@CR & @HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & " - " & $fCheck_Timer & " ==>> ")
    ; Should we check the timer?
    If $fCheck_Timer Then
    ; Have we waited 2 secs
    If TimerDiff($iBegin) > 1000 Then
    ConsoleWrite(@MIN&":"&@SEC&":"&@MSEC & " - ")
    ; Prevent any checking while the function runs
    $fCheck_Timer = False

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

    Local $aRow, $next_date, $aDate
    If UBound($aQueue) = 0 Then
    _stop_working()
    Return 0
    EndIf
    $aRow = StringSplit($aQueue[0][1], " ")
    $next_date = $aRow[1]
    $aRow = StringSplit($aRow[2], ":")

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

    $aDate = StringSplit($next_date, "/")

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

    If $aDate[3] * 365 + $aDate[2] * 30 + $aDate[1] = @YEAR * 365 + @MON * 30 + @MDAY Then
    If $aRow[1] * 3600 + $aRow[2] * 60 = @HOUR * 3600 + @MIN * 60 + @SEC Or $aRow[1] * 3600 + $aRow[2] * 60 < @HOUR * 3600 + @MIN * 60 + @SEC Then
    $aRow = 0
    $aDate = 0
    _start()
    EndIf
    ElseIf $aDate[3] * 365 + $aDate[2] * 30 + $aDate[1] < @YEAR * 365 + @MON * 30 + @MDAY Then
    $aRow = 0
    $aDate = 0
    _start()
    EndIf
    $iCounter_label = $iCounter_label + 1
    GUICtrlSetData($hCounter_label, $iCounter_label)
    $aRow = 0
    $next_date = 0
    $aDate = 0

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

    ConsoleWrite(@MIN&":"&@SEC&":"&@MSEC)

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

    $fCheck_Timer = True
    ; Reset the timestamp
    $iBegin = Timerinit()
    EndIf
    EndIf
    EndFunc ;==>_compare_datetimes

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

    Func _start()
    Local $sError, $sStatus, $ShellExecute
    Local $aBatch[5][5] = [[1, 1, $aQueue[0][1], "Task 1", "C:/Users/mwenzel/Documents/Testszenario/BATCH-Files/Dateienerzeugen/create_txt.bat"], _
    [2, 2, $aQueue[0][1], "Task 2", ""], _
    [3, 3, $aQueue[0][1], "Task 3", ""], _
    [4, 4, $aQueue[0][1], "Task 4", ""], _
    [5, 5, $aQueue[0][1], "_create_next_date", ""]]

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

    ReDim $aTasks[5][2]
    For $i = 0 To UBound($aBatch) - 1
    $aTasks[$i][0] = $aBatch[$i][1] * 10
    $aTasks[$i][1] = $aBatch[$i][3]
    Next

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

    For $i = 0 To UBound($aBatch) - 1
    $sStatus = " ... started"
    If $aBatch[$i][4] = "" Then
    $sError = " "
    _write_log($sError, $aBatch[$i][4], $sStatus)
    $sError = "OK"
    $sStatus = " ... finished"
    _write_log($sError, $aBatch[$i][4], $sStatus)
    Else
    $sError = " "
    _write_log($sError, $aBatch[$i][4], $sStatus)
    ;~ ConsoleWrite($aBatch[$i][4] & @CR)
    $ShellExecute = RunWait($aBatch[$i][4], "c:", @SW_HIDE)
    If $ShellExecute <> 0 Then
    $sError = "FEHLER"
    $sStatus = " Something went wrong."
    Else
    $sError = "OK"
    $sStatus = " ... finished"
    EndIf
    _write_log($sError, $aBatch[$i][4], $sStatus)
    EndIf

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

    If UBound($aTasks) = 1 Then
    $aTasks[0][0] = ""
    $aTasks[0][1] = ""
    Else
    _ArrayDelete($aTasks, 0)
    EndIf
    Next
    Sleep(1000)

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

    If UBound($aQueue) = 1 Then
    $aQueue[0][0] = ""
    $aQueue[0][1] = ""
    $aQueue[0][2] = ""
    Else
    _ArrayDelete($aQueue, 0)
    EndIf
    $sError = 0
    $sStatus = 0
    $ShellExecute = 0
    $aBatch = 0
    _load()
    EndFunc ;==>_start

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

    Func _stop_working()
    AdlibUnRegister("_compare_datetimes")
    Return 0
    EndFunc ;==>_stop_working

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

    Func _exit()
    Exit
    EndFunc ;==>_exit

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

    Func _write_log($sError, $sCommand, $sStatus)
    Local $hFile
    $hFile = FileOpen("log_wBATCHwoSQLwoLV.txt", 1)
    FileWriteLine($hFile, "[" & @MDAY & "/" & @MON & "/" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & "][" & $sError & "] " & $sCommand & " " & $sStatus)
    FileClose($hFile)
    EndFunc ;==>_write_log

    [/autoit]

    Und hier meine aktuelle bei der ich lediglich nun SQL hinzugefügt habe (kann euch das leider auf die Schnelle net lauffähig machen, das würde etwas länger dauern, ich versuche das mal so fix wie möglich):

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <DateTimeConstants.au3>
    #include <EditConstants.au3>
    #include <GuiComboBox.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <SendMessage.au3>
    #include <SQLite.au3>
    #include <SQLite.dll.au3>
    #include <String.au3>
    #include <WindowsConstants.au3>
    #include <winapiex.au3>
    #include <Date.au3>

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

    Opt("GUIOnEventMode", 1)
    Opt("MustDeclareVars", 1)
    OnAutoItExitRegister("_exit")

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

    Local $fl_name = @scriptdir & '\memstats_b7.txt'

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

    Local $CheckingParameters = $CmdLine[0]
    If $CheckingParameters = 0 Then
    Global $usedb = IniRead("H:\AutoIt\Automatische Ablaufsteuerung\config.ini", "Datenbank", "pfad", "default")
    Global $path = IniRead("H:\AutoIt\Automatische Ablaufsteuerung\config.ini", "SQLite3.exe", "pfad", "default")
    Else
    Local $param = $CmdLine[1]
    Global $usedb = IniRead($param, "Datenbank", "pfad", "default")
    Global $path = IniRead($param, "SQLite3.exe", "pfad", "default")
    EndIf

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

    ; This is a flag to show whether we should check the timer or not
    Global $fCheck_Timer = True
    Global $iBegin, $fScriptstatus, $Row, $Query
    Dim $aQueue[1][4]
    ;~ Global $fl_name = @scriptdir & '\memstats.txt'

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

    _SQLite_Startup()
    Dim $DB = _SQLite_Open($usedb)

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

    ;#GUI 1
    Global $hGUI = GUICreate("GUI", 250, 390)

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

    Global $hMenuFile = GUICtrlCreateMenu("File")
    Global $hMenuFileExit = GUICtrlCreateMenuItem("Exit", $hMenuFile)
    Global $hMenuHelp = GUICtrlCreateMenu("?")
    Global $hMenuHelpHelp = GUICtrlCreateMenuItem("Help", $hMenuHelp)
    Global $hMenuHelpInfo = GUICtrlCreateMenuItem("Info", $hMenuHelp)

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

    Global $iCounter = 0
    Global $hCounter = GUICtrlCreateLabel("0", 50, 72, 200, 20)

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

    Global $gfx = GUICtrlCreateGraphic(5, 10, 18, 18)
    GUICtrlSetBkColor($gfx, 0xFF0000)
    GUICtrlSetColor($gfx, 0)

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

    Global $hBtnAdminTool = GUICtrlCreateButton("AdminTool", 160, 5, 80, 30)
    Global $hBtnLoad = GUICtrlCreateButton("Load", 140, 40, 100, 30)
    Global $astart_button = GUICtrlCreateButton("Start", 30, 5, 50, 30)
    Global $hBtnStart = GUICtrlCreateButton("Stop", 30, 40, 50, 30)

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

    GUISetState(@SW_SHOW, $hGUI)

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

    ;Aufgabenliste
    GUICtrlSetOnEvent($hMenuFileExit, "_exit")
    GUICtrlSetOnEvent($hMenuHelpHelp, "hilfe")
    GUICtrlSetOnEvent($hMenuHelpInfo, "info")
    GUICtrlSetOnEvent($hBtnLoad, "_load")
    GUICtrlSetOnEvent($astart_button, "_check")
    GUICtrlSetOnEvent($hBtnStart, "_stop")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit", $hGUI)

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

    _logmem("Scriptstart ---------")
    ;~ AdlibRegister("_ReduceMemory", 300000)
    ; Set teh initial timestamp
    $iBegin = TimerInit()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _load()
    _logmem("_load BEGINNING")
    Dim $aStr
    Dim $a
    Local $i

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

    _logmem("_load SQL-1")
    _SQLite_Startup()
    $DB = _SQLite_Open($usedb)
    _logmem("_load SQL-1")

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

    _logmem("_load SQL-2")
    $Query = _sqlitequeryceck($DB, "SELECT id, geplante_startzeit, arbeitsplan_id FROM aufgabenliste ORDER BY geplante_startzeit ASC")
    While _SQLite_FetchData($Query, $Row) = $SQLITE_OK
    ReDim $aQueue[$i + 1][4]
    ;x = Row # y = Column
    $aQueue[$i][0] = $Row[0] ; Column 0 - ID
    $a = StringSplit($Row[1], " ")
    $aQueue[$i][1] = $a[1] ; Column 1 - Datum
    $aQueue[$i][2] = $a[2] ; Column 2 - Uhrzeit
    $aQueue[$i][3] = $Row[2] ; Column 3 - Arbeitsplan ID
    $i = $i + 1
    WEnd
    _SQLite_QueryFinalize($Query)
    _logmem("_load SQL-2")

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

    For $i = 0 To UBound($aQueue) - 1
    $aStr = StringSplit($aQueue[$i][1], "/")
    $aQueue[$i][1] = $aStr[3] & $aStr[2] & $aStr[1]
    Next
    For $i = 0 To UBound($aQueue) - 1
    $aQueue[$i][2] = StringMid($aQueue[$i][2], 1, 2) * 60 + StringMid($aQueue[$i][2], 4, 2)
    Next

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

    _logmem("_load before _Array2DSortFree")
    _Array2DSortFree($aQueue, '1|0')
    _logmem("_load after _Array2DSortFree")

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

    For $i = 0 To UBound($aQueue) - 1
    $aQueue[$i][1] = StringMid($aQueue[$i][1], 7, 2) & "/" & StringMid($aQueue[$i][1], 5, 2) & "/" & StringMid($aQueue[$i][1], 1, 4)
    Next
    For $i = 0 To UBound($aQueue) - 1
    If Mod($aQueue[$i][2], 60) = 0 Then
    If StringLen($aQueue[$i][2] / 60) = 2 Then
    $aQueue[$i][2] = ($aQueue[$i][2] / 60) & ":00"
    ElseIf StringLen($aQueue[$i][2] / 60) < 2 Then
    $aQueue[$i][2] = "0" & ($aQueue[$i][2] / 60) & ":00"
    EndIf
    Else
    If StringLen(Int($aQueue[$i][2] / 60)) = 2 Then
    If StringLen($aQueue[$i][2] - (Int($aQueue[$i][2] / 60) * 60)) = 2 Then
    $aQueue[$i][2] = Int($aQueue[$i][2] / 60) & ":" & $aQueue[$i][2] - (Int($aQueue[$i][2] / 60) * 60)
    ElseIf StringLen($aQueue[$i][2] - (Int($aQueue[$i][2] / 60) * 60)) < 2 Then
    $aQueue[$i][2] = Int($aQueue[$i][2] / 60) & ":0" & $aQueue[$i][2] - (Int($aQueue[$i][2] / 60) * 60)
    EndIf
    ElseIf StringLen(Int($aQueue[$i][2] / 60)) < 2 Then
    If StringLen($aQueue[$i][2] - (Int($aQueue[$i][2] / 60) * 60)) = 2 Then
    $aQueue[$i][2] = "0" & Int($aQueue[$i][2] / 60) & ":" & $aQueue[$i][2] - (Int($aQueue[$i][2] / 60) * 60)
    ElseIf StringLen($aQueue[$i][2] - (Int($aQueue[$i][2] / 60) * 60)) < 2 Then
    $aQueue[$i][2] = "0" & Int($aQueue[$i][2] / 60) & ":0" & $aQueue[$i][2] - (Int($aQueue[$i][2] / 60) * 60)
    EndIf
    EndIf
    EndIf
    Next
    For $i = 0 To UBound($aQueue) - 1
    $Query = _sqlitequeryceck($DB, "SELECT arbeitsplan_name FROM arbeitsplaene WHERE arbeitsplan_id=" & $aQueue[$i][3])
    While _SQLite_FetchData($Query, $Row) = $SQLITE_OK
    $aQueue[$i][0] = $aQueue[$i][0]
    $aQueue[$i][1] = $aQueue[$i][1] & " " & $aQueue[$i][2]
    $aQueue[$i][2] = $Row[0]
    WEnd
    _SQLite_QueryFinalize($Query)
    Next
    _SQLite_Close()
    _SQLite_Shutdown()
    _logmem("_load END")
    EndFunc ;==>_load

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

    Func _Array2DSortFree(ByRef $ARRAY, $sCOL_ASC, $NUM = False)
    _logmem("_Array2DSortFree BEGINNING")
    If Not IsArray($ARRAY) Then Return SetError(1, 0, 1)
    Local $tableStr = "CREATE TABLE [tblTEST] ("
    Local $insertStr = '', $insertBase = "INSERT INTO tblTEST VALUES ("
    Local $sortOrder = '', $sortStr = "SELECT * FROM tblTEST ORDER BY "
    Local $aResult, $asc, $iRows, $iCol, $hSQL
    $sCOL_ASC = StringStripWS($sCOL_ASC, 8)
    Local $ub2nd = UBound($ARRAY, 2)
    If @error = 2 Then
    If (StringLen($sCOL_ASC) > 3) Or (StringLeft($sCOL_ASC, 1) <> '0') Then Return SetError(2, 0, 1)
    If StringRight($sCOL_ASC, 1) = 0 Then
    _ArraySort($ARRAY)
    Else
    _ArraySort($ARRAY, 1)
    EndIf
    Return 0
    Else
    Local $aOut[UBound($ARRAY)][$ub2nd]
    EndIf
    If @error > 0 Then Return SetError(3, 0, 1)
    $hSQL = _SQLite_Open()
    If @error > 0 Then
    _SQLite_Close()
    _SQLite_Shutdown()
    Return SetError(3, 0, 1)
    EndIf
    For $i = 0 To UBound($ARRAY, 2) - 1
    $tableStr &= "'field" & $i & "',"
    Next
    $tableStr = StringTrimRight($tableStr, 1) & ");"
    For $i = 0 To UBound($ARRAY) - 1
    $insertStr &= $insertBase
    For $k = 0 To UBound($ARRAY, 2) - 1
    $insertStr &= "'" & $ARRAY[$i][$k] & "',"
    Next
    $insertStr = StringTrimRight($insertStr, 1) & ");"
    Next
    If _SQLite_Exec($hSQL, $tableStr & $insertStr) <> $SQLITE_OK Then
    _SQLite_Close()
    _SQLite_Shutdown()
    Return SetError(3, 0, 1)
    EndIf
    If StringInStr($sCOL_ASC, ',') Then
    Local $aOrder = StringSplit($sCOL_ASC, ',')
    For $i = 1 To UBound($aOrder) - 1
    If StringInStr($sCOL_ASC, '|') Then
    Local $var = StringSplit($aOrder[$i], '|')
    $asc = ' ASC'
    If $var[2] = 1 Then $asc = ' DESC'
    If $NUM Then
    $sortOrder &= 'ABS(field' & $var[1] & ')' & $asc & ','
    Else
    $sortOrder &= 'field' & $var[1] & $asc & ','
    EndIf
    Else
    _SQLite_Close()
    _SQLite_Shutdown()
    Return SetError(4, 0, 1)
    EndIf
    Next
    $sortOrder = StringTrimRight($sortOrder, 1) & ';'
    Else
    If (StringLen($sCOL_ASC) > 2) And (StringInStr($sCOL_ASC, '|')) Then
    Local $var = StringSplit($sCOL_ASC, '|')
    $asc = ' ASC'
    If $var[2] = 1 Then $asc = ' DESC'
    If $NUM Then
    $sortOrder &= 'ABS(field' & $var[1] & ')' & $asc
    Else
    $sortOrder &= 'field' & $var[1] & $asc
    EndIf
    Else
    _SQLite_Close()
    _SQLite_Shutdown()
    Return SetError(4, 0, 1)
    EndIf
    EndIf
    If _SQLite_GetTable2d($hSQL, $sortStr & $sortOrder, $aResult, $iRows, $iCol) <> $SQLITE_OK Then
    _SQLite_Close()
    _SQLite_Shutdown()
    Return SetError(3, 0, 1)
    EndIf
    For $i = 1 To UBound($aResult) - 1
    For $j = 0 To UBound($ARRAY, 2) - 1
    $ARRAY[$i - 1][$j] = $aResult[$i][$j]
    Next
    Next
    _SQLite_Exec($hSQL, "DROP TABLE tblTEST;")
    _SQLite_Close()
    _logmem("_Array2DSortFree END")
    Return 0
    EndFunc ;==>_Array2DSortFree

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

    Func _check()
    ;~ _logmem("_check BEGINNING")
    $fScriptstatus = True
    GUICtrlSetBkColor($gfx, 0x32CD32)
    AdlibRegister("_compate_datetimes", 1000)
    ;~ _logmem("_check END")
    EndFunc ;==>_check

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

    Func _compate_datetimes()
    ;~ _logmem("_compate_datetimes BEGINNING")
    Local $aSplit, $sNextplanneddate, $aDateform

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

    ; Should we check the timer?
    If $fCheck_Timer Then
    ; Have we waited 1 sec
    If TimerDiff($iBegin) > 1000 Then
    ; Prevent any checking while the function runs
    $fCheck_Timer = False

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

    If UBound($aQueue) = 0 Then
    _stop()
    Return 0
    EndIf
    $aSplit = StringSplit($aQueue[0][1], " ")
    $sNextplanneddate = $aSplit[1]
    $aSplit = StringSplit($aSplit[2], ":")

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

    $aDateform = StringSplit($sNextplanneddate, "/")

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

    If $aDateform[3] * 365 + $aDateform[2] * 30 + $aDateform[1] = @YEAR * 365 + @MON * 30 + @MDAY Then
    If $aSplit[1] * 3600 + $aSplit[2] * 60 = @HOUR * 3600 + @MIN * 60 + @SEC Or $aSplit[1] * 3600 + $aSplit[2] * 60 < @HOUR * 3600 + @MIN * 60 + @SEC Then
    $aSplit = 0
    $aDateform = 0
    start_working()
    EndIf
    ElseIf $aDateform[3] * 365 + $aDateform[2] * 30 + $aDateform[1] < @YEAR * 365 + @MON * 30 + @MDAY Then
    $aSplit = 0
    $aDateform = 0
    start_working()
    EndIf
    $iCounter = $iCounter + 1
    GUICtrlSetData($hCounter, $iCounter)

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

    $fCheck_Timer = True
    ; Reset the timestamp
    $iBegin = Timerinit()
    EndIf
    EndIf

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

    $aSplit = 0
    $sNextplanneddate = 0
    $aDateform = 0
    ;~ _logmem("_compate_datetimes END")
    EndFunc ;==>_compate_datetimes

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

    Func start_working()
    _logmem("start_working BEGINNING")
    Local $sError, $sStatus, $sNewStartDatetime, $ShellExecute, $aSQL[1][6], $aTasks[1][2], $i

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

    _SQLite_Startup()
    $DB = _SQLite_Open($usedb)

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

    $Query = _sqlitequeryceck($DB, "SELECT laufende_nr, arbeitspunkt_name FROM arbeitspunkte WHERE arbeitsplan_id=(SELECT arbeitsplan_id FROM aufgabenliste WHERE id=" & $aQueue[0][0] & ") AND status='Aktiv' ORDER BY laufende_nr ASC")
    While _SQLite_FetchData($Query, $Row) = $SQLITE_OK
    ReDim $aTasks[$i + 1][2]
    $aTasks[$i][0] = $Row[0]
    $aTasks[$i][1] = $Row[1]
    $i = $i + 1
    WEnd
    ;~ _SQLite_QueryFinalize($Query)

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

    $i = 0
    $Query = _sqlitequeryceck($DB, "SELECT a.arbeitsplan_id, ap.arbeitsplan_name, a.geplante_startzeit, app.arbeitspunkt_name, app.befehl, app.parameter FROM aufgabenliste a, arbeitsplaene ap, arbeitspunkte app WHERE a.arbeitsplan_id=(SELECT arbeitsplan_id FROM aufgabenliste WHERE id=" & $aQueue[0][0] & ") AND a.arbeitsplan_id=ap.arbeitsplan_id AND a.arbeitsplan_id=app.arbeitsplan_id AND app.status='Aktiv' ORDER BY app.laufende_nr")
    While _SQLite_FetchData($Query, $Row) = $SQLITE_OK
    ReDim $aSQL[$i+1][6]
    $aSQL[$i][0] = $Row[0]
    $aSQL[$i][1] = $Row[1]
    $aSQL[$i][2] = $Row[2]
    $aSQL[$i][3] = $Row[3]
    $aSQL[$i][4] = $Row[4]
    $aSQL[$i][5] = $Row[5]
    $i = $i + 1
    WEnd
    ;~ _SQLite_QueryFinalize($Query)

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

    _SQLite_Exec($DB, "UPDATE aufgabenliste SET startzeit=" & @HOUR & @MIN & @SEC & " WHERE id=" & $aQueue[0][0])
    ;~ , arbeitspunkt_id=(SELECT arbeitspunkt_id FROM arbeitspunkte WHERE arbeitsplan_id=(SELECT arbeitsplan_id FROM aufgabenliste WHERE id=" & _GUICtrlListView_GetItemText($a_listview_bot, 0, 0) & ") AND laufende_nr=" & _GUICtrlListView_GetItemText($a_listview_top, 0, 0) & ")
    ;~ _sqliteerrorcheck(@error)

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

    For $i = 0 To UBound($aSQL) - 1
    $sStatus = " ... wird gestartet"
    If $aSQL[$i][4] = "" Then
    $sError = " "
    _schreibe_log($sError, $aSQL[$i][0], $aSQL[$i][1], $aSQL[$i][2], $aSQL[$i][3], $aSQL[$i][4], $aSQL[$i][5], $sStatus)
    $sNewStartDatetime = _new_datetime($aSQL[$i][0])
    _SQLite_Exec($DB, "UPDATE aufgabenliste set geplante_startzeit='" & $sNewStartDatetime & "' WHERE arbeitsplan_id=" & $aSQL[$i][0])
    _sqliteerrorcheck(@error)
    $sError = "OK"
    $sStatus = " ... ist beendet"
    _schreibe_log($sError, $aSQL[$i][0], $aSQL[$i][1], $aSQL[$i][2], $aSQL[$i][3], $aSQL[$i][4], $aSQL[$i][5], $sStatus)
    Else
    $sError = " "
    _schreibe_log($sError, $aSQL[$i][0], $aSQL[$i][1], $aSQL[$i][2], $aSQL[$i][3], $aSQL[$i][4], $aSQL[$i][5], $sStatus)
    $aSQL[$i][4] = StringRegExpReplace($aSQL[$i][4], "\\", "/")
    $ShellExecute = RunWait($aSQL[$i][4], "c:", @SW_HIDE)
    If $ShellExecute <> 0 Then
    $sError = "FEHLER"
    $sStatus = " Es ist ein Fehler aufgetreten."
    Else
    $sError = "OK"
    $sStatus = " ... ist beendet"
    EndIf
    _schreibe_log($sError, $aSQL[$i][0], $aSQL[$i][1], $aSQL[$i][2], $aSQL[$i][3], $aSQL[$i][4], $aSQL[$i][5], $sStatus)
    EndIf
    $aTasks = 0
    Next

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

    Sleep(1000)
    _load()
    _SQLite_Close()
    _SQLite_Shutdown()

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

    _logmem("start_working END")
    EndFunc ;==>start_working

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

    Func _stop()
    _logmem("_stop BEGINNING")
    AdlibUnRegister("_compate_datetimes")
    $fScriptstatus = False
    GUICtrlSetBkColor($gfx, 0xFF0000) ;~ rot
    Return 0
    _logmem("_stop END")
    EndFunc ;==>_stop

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

    Func _add_date($day_to_add)
    ;~ _logmem("_add_date BEGINNING")
    Local $iDays_of_month, $mday, $mon, $year
    If @MON = 01 Or @MON = 03 Or @MON = 03 Or @MON = 05 Or @MON = 07 Or @MON = 08 Or @MON = 10 Or @MON = 12 Then
    $iDays_of_month = 31 ; großer Monat
    ElseIf @MON = 04 Or @MON = 06 Or @MON = 09 Or @MON = 11 Then
    $iDays_of_month = 30 ; mittlerer Monat
    ElseIf @MON = 02 Then
    If Mod(@YEAR, 4) = 0 Then
    $iDays_of_month = 29 ; Schaltjahr
    Else
    $iDays_of_month = 28 ; kleiner Monat
    EndIf
    EndIf

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

    If @MDAY + $day_to_add > $iDays_of_month Then ; Wenn Tage größer als Monat, Monat erhöhen
    If @MON + 1 > 12 Then ; Wenn Monat größer als 12 wird, Jahr erhöhen
    $mday = "01"
    $mon = "01"
    $year = @YEAR + 1
    Else
    $mday = "01"
    $mon = @MON + 1
    $year = @YEAR
    EndIf
    Else
    $mday = @MDAY + $day_to_add
    $mon = @MON
    $year = @YEAR
    EndIf

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

    If StringLen($mday) < 2 Then
    $mday = "0" & $mday
    EndIf
    If StringLen($mon) < 2 Then
    $mon = "0" & $mon
    EndIf
    If StringLen($year) < 2 Then
    $year = "0" & $year
    EndIf
    Return $mday & "/" & $mon & "/" & $year
    ;~ _logmem("_add_date END")
    EndFunc ;==>_add_date

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

    Func _add_time($sStarttime, $admze) ;~~>> admze = count of minutes !!
    ;~ _logmem("_add_time BEGINNING")
    Local $aStarttime = StringSplit($sStarttime, ":")
    Local $min, $hour, $admze_std, $admze_min
    If $admze > 60 Then
    $admze_std = Int($admze / 60, 0)
    $admze_min = Int(Mod($admze, 60))
    If $aStarttime[2] + $admze_min > 60 Then
    If $aStarttime[1] + $admze_std + 1 > 24 Then
    $min = ($aStarttime[2] + $admze_min) - 60
    $hour = 0
    Else
    $min = ($aStarttime[2] + $admze_min) - 60
    $hour = $aStarttime[1] + $admze_std + 1
    EndIf
    Else
    $min = $aStarttime[2] + $admze_min
    $hour = $aStarttime[1] + $admze_std
    EndIf
    Else
    If $aStarttime[2] + $admze > 60 Then
    If $aStarttime[1] + 1 > 24 Then
    $min = ($aStarttime[2] + $admze) - 60
    $hour = 0
    Else
    $min = ($aStarttime[2] + $admze) - 60
    $hour = $aStarttime[1] + 1
    EndIf
    ElseIf $aStarttime[2] + $admze = 60 Then
    If $aStarttime[1] + 1 > 24 Then
    $min = ($aStarttime[2] + $admze) - 60
    $hour = 0
    ElseIf $aStarttime[1] + 1 = 24 Then
    $min = "00"
    $hour = "00"
    Else
    $min = "00"
    $hour = $aStarttime[1] + 1
    EndIf
    Else
    $min = $aStarttime[2] + $admze
    $hour = $aStarttime[1]
    EndIf
    EndIf
    If StringLen($min) < 2 Then
    $min = "0" & $min
    EndIf
    If StringLen($hour) < 2 Then
    $hour = "0" & $hour
    EndIf
    $aStarttime = 0
    Return $hour & ":" & $min
    ;~ _logmem("_add_time END")
    EndFunc ;==>_add_time

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

    Func _sort_wday_array($ARRAY)
    ;~ _logmem("_sort_wday_array BEGINNING")
    If $ARRAY[1] = @WDAY Then
    Return $ARRAY
    Else
    For $i = 1 To $ARRAY[0]
    If $ARRAY[$i] > @WDAY Then
    $ARRAY = _sort_wday_array_increase($ARRAY)
    Return $ARRAY
    EndIf
    Next
    $ARRAY = _sort_wday_array_decrease($ARRAY)
    Return $ARRAY
    EndIf
    ;~ _logmem("_sort_wday_array END")
    EndFunc ;==>_sort_wday_array

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

    Func _sort_wday_array_increase($ARRAY)
    ;~ _logmem("_sort_wday_array_increase BEGINNING")
    Local $i
    _ArrayAdd($ARRAY, "")
    If $ARRAY[1] > @WDAY Then
    Else
    Do
    $ARRAY[$ARRAY[0] + 1] = $ARRAY[1]
    $i = 1
    Do
    $ARRAY[$i] = $ARRAY[$i + 1]
    $i = $i + 1
    Until $i = $ARRAY[0] + 1
    Until $ARRAY[1] = @WDAY Or $ARRAY[1] > @WDAY
    EndIf
    _ArrayDelete($ARRAY, UBound($ARRAY))
    Return $ARRAY
    ;~ _logmem("_sort_wday_array_increase END")
    EndFunc ;==>_sort_wday_array_increase

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

    Func _sort_wday_array_decrease($ARRAY)
    ;~ _logmem("_sort_wday_array_decrease BEGINNING")
    Local $i
    _ArrayAdd($ARRAY, "")
    Do
    $ARRAY[$ARRAY[0] + 1] = $ARRAY[1]
    $i = 1
    Do
    $ARRAY[$i] = $ARRAY[$i + 1]
    $i = $i + 1
    Until $i = $ARRAY[0] + 1
    Until $ARRAY[1] = @WDAY Or $ARRAY[1] < @WDAY
    _ArrayDelete($ARRAY, UBound($ARRAY))
    Return $ARRAY
    ;~ _logmem("_sort_wday_array_decrease END")
    EndFunc ;==>_sort_wday_array_decrease

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

    Func _new_datetime($ap_id)
    _logmem("_new_datetime BEGINNING")
    Local $Row, $Query, $day_to_add, $newDate, $TimeIncreased, $z
    $Query = _sqlitequeryceck($DB, "SELECT minute, wochentag, von, bis FROM zeitplan WHERE arbeitsplan_id=" & $ap_id)
    _SQLite_FetchData($Query, $Row)
    _sqliteerrorcheck(@error)
    _SQLite_QueryFinalize($Query)

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

    ;$Row[1] = $wochentag
    Local $aWday = StringSplit($Row[1], ",")
    $aWday = _sort_wday_array($aWday)

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

    If $Row[0] = "" Then ;FALL 1 - zu einer bestimmten Uhrzeit
    For $i = 1 To $aWday[0]
    If $aWday[$i] = @WDAY Then ;---Wochentag dabei---
    If $Row[3] > @HOUR & ":" & @MIN & ":" & @SEC Then ;Fall 1.1
    ;~ ConsoleWrite("Fall 1 . 1: Wochentag = Heute -> Uhrzeit noch nicht erreicht: " & @MDAY & "/" & @MON & "/" & @YEAR & " " & $Row[3] & @CR)
    Return @MDAY & "/" & @MON & "/" & @YEAR & " " & $Row[3]
    ElseIf $Row[3] < @HOUR & ":" & @MIN & ":" & @SEC Then ;Fall 1.2
    If $Row[1] = @WDAY Then ;Nur der Wochentag
    $day_to_add = 7
    Else
    If $aWday[2] = 1 Then
    $day_to_add = 7 - (($aWday[2] - @WDAY) * -1)
    ElseIf ($aWday[2] - @WDAY) > 0 Then
    $day_to_add = ($aWday[2] - @WDAY)
    ElseIf ($aWday[2] - @WDAY) < 0 Then
    $day_to_add = ($aWday[2] - @WDAY) + 7
    EndIf
    EndIf
    $newDate = _add_date($day_to_add)
    ;~ ConsoleWrite("Fall 1 . 2: Wochentag = Heute -> Uhrzeit vorbei: " & $newDate & " " & $Row[3] & @CR)
    Return $newDate & " " & $Row[3]
    EndIf
    EndIf
    Next
    ;---Wochentag NICHT dabei--- # Fall 1.3
    If ($aWday[1] - @WDAY) > 0 Then ; #1
    $day_to_add = ($aWday[1] - @WDAY)
    $newDate = _add_date($day_to_add)
    ;~ ConsoleWrite("Fall 1 . 3 #1: " & $newDate & " " & $Row[3] & @CR)
    Return $newDate & " " & $Row[3]
    ElseIf ($aWday[1] - @WDAY) < 0 Then ; #2
    $day_to_add = ($aWday[1] - @WDAY) + 7
    $newDate = _add_date($day_to_add)
    ;~ ConsoleWrite("Fall 1 . 3 #2: " & $newDate & " " & $Row[3] & @CR)
    Return $newDate & " " & $Row[3]
    EndIf
    Else
    For $i = 1 To $aWday[0] ;---Wochentag dabei---
    If $aWday[$i] = @WDAY Then
    If $Row[2] > @HOUR & ":" & @MIN & ":" & @SEC Then ;FALL 2.1
    ;~ ConsoleWrite("Fall 2 . 1: Wochentag = Heute -> Uhrzeit noch nicht erreicht: " & @MDAY & "/" & @MON & "/" & @YEAR & " " & $Row[2] & @CR)
    Return @MDAY & "/" & @MON & "/" & @YEAR & " " & $Row[2]
    ElseIf $Row[2] < @HOUR & ":" & @MIN & ":" & @SEC And @HOUR & ":" & @MIN & ":" & @SEC < $Row[3] Then ;FALL 2.2
    $z = 1
    Do
    $TimeIncreased = _add_time($Row[2], ($Row[0] * $z))
    $z = $z + 1
    Until $TimeIncreased > @HOUR & ":" & @MIN & ":" & @SEC

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

    If ($TimeIncreased < $Row[3]) Or ($TimeIncreased = $Row[3]) Then ;FALL 2.2
    ;~ ConsoleWrite("Fall 2 . 2 #1: " & @MDAY & "/" & @MON & "/" & @YEAR & " " & $TimeIncreased & @CR)
    Return @MDAY & "/" & @MON & "/" & @YEAR & " " & $TimeIncreased
    Else ;FALL 2.2 #2
    $aWday = _sort_wday_array($aWday)
    If $aWday[2] = 1 Then
    $day_to_add = 7 - (($aWday[2] - $z) * -1)
    ElseIf ($aWday[2] - @WDAY) > 0 Then
    $day_to_add = ($aWday[2] - $z)
    ElseIf ($aWday[2] - @WDAY) < 0 Then
    $day_to_add = ($aWday[2] - $z) + 7
    EndIf

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

    $newDate = _add_date($day_to_add)
    ;~ ConsoleWrite("Fall 2 . 2 #2: " & $newDate & " " & $Row[2] & @CR)
    Return $newDate & " " & $Row[2]
    EndIf
    ElseIf (@HOUR & ":" & @MIN & ":" & @SEC > $Row[3]) Or (@HOUR & ":" & @MIN & ":" & @SEC = $Row[3]) Then ;FALL 2.3
    $aWday = _sort_wday_array($aWday)
    For $i = 0 To UBound($aWday) - 1
    ;~ ConsoleWrite(@CR & "$aWday[$i]: " & $aWday[$i])
    Next
    If $Row[1] = @WDAY Then ;Nur der Wochentag
    $day_to_add = 7
    Else
    If $aWday[2] = 1 Then
    $day_to_add = 7 - (($aWday[2] - @WDAY) * -1)
    ElseIf ($aWday[2] - @WDAY) > 0 Then
    $day_to_add = ($aWday[2] - @WDAY)
    ElseIf ($aWday[2] - @WDAY) < 0 Then
    $day_to_add = ($aWday[2] - @WDAY) + 7
    EndIf
    EndIf
    $newDate = _add_date($day_to_add)
    ;~ ConsoleWrite("Fall 2 . 3: " & $newDate & " " & $Row[2] & @CR)
    Return $newDate & " " & $Row[2]
    EndIf
    EndIf
    Next
    If ($aWday[1] - @WDAY) > 0 Then ; #1
    $day_to_add = ($aWday[1] - @WDAY)
    $newDate = _add_date($day_to_add)
    ;~ ConsoleWrite("Fall 2 . 4 #1 " & $newDate & " " & $Row[2] & @CR)
    Return $newDate & " " & $Row[2]
    ElseIf ($aWday[1] - @WDAY) < 0 Then ; #2
    $day_to_add = ($aWday[1] - @WDAY) + 7
    $newDate = _add_date($day_to_add)
    ;~ ConsoleWrite("Fall 2 . 4 #2 " & $newDate & " " & $Row[2] & @CR)
    Return $newDate & " " & $Row[2]
    EndIf
    EndIf
    _logmem("_new_datetime END")
    EndFunc

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

    ; Hilfe MsgBox
    Func hilfe()
    MsgBox(64, "Hilfe", "Hilfe") ;~ COOMING SOON
    EndFunc ;==>hilfe

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

    ; Info MsgBox
    Func info()
    MsgBox(64, "Info", "Info") ;~ COOMING SOON
    EndFunc ;==>info

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

    Func _sqlitequeryceck($DB, $sQuery)
    Local $retQuery
    If _SQLite_Query($DB, $sQuery, $retQuery) <> 0 Then
    _sqliteerrorcheck(@error)
    _SQLite_QueryFinalize($retQuery)
    Return 0
    EndIf
    Return $retQuery
    EndFunc ;==>_sqlitequeryceck

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

    Func _sqliteerrorcheck($sql_error)
    If $sql_error = -1 Then
    ConsoleWriteError("Fehler, _SQLite_Exec Error: " & $sql_error & ". SQLite reported an error (Check return value)")
    ElseIf $sql_error = 1 Then
    ConsoleWriteError("Fehler, _SQLite_Exec Error: " & $sql_error & ". Error calling SQLite API 'sqlite3_exec'")
    ElseIf $sql_error = 2 Then
    ConsoleWriteError("Fehler, _SQLite_Exec Error: " & $sql_error & ". Call prevented by SafeMode")
    ElseIf $sql_error = 3 Then
    ConsoleWriteError("Fehler, _SQLite_Exec Error: " & $sql_error & ". Error Processing Callback from within _SQLite_GetTable2d")
    ElseIf $sql_error = 4 Then
    ConsoleWriteError("Fehler, _SQLite_Exec Error: " & $sql_error & ". Error while converting SQL statement to UTF-8")
    EndIf
    EndFunc ;==>_sqliteerrorcheck

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

    Func _schreibe_log($sError, $sAp_id, $sAp_name, $sGeplante_startzeit, $sApp_name, $sBefehl, $sParameter, $sStatus)
    Local $hfile = FileOpen("log11111111111.txt", 1)
    ;Beispiel: [12.11.2012 16:14:30][OK] Arbeitsplan_ID: 1 | Arbeitsplan_Name: AP 1 | Geplante_Startzeit: 16:00 | Arbeitspunkt_Name: Hello World | Status: wurde gestartet
    FileWriteLine($hfile, "[" & @MDAY & "/" & @MON & "/" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & "][" & $sError & "] " & $sAp_id & " | " & _
    $sAp_name & " | " & $sGeplante_startzeit & " | " & $sApp_name & " | " & $sBefehl & " " & $sParameter & " | " & $sStatus)
    FileClose($hfile)
    EndFunc ;==>_schreibe_log

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

    Func _logmem($sPos)
    Local $hfl = FileOpen($fl_name,1)
    If $hfl = -1 Then MsgBox(0,'Memstats File Open Error','File Name = ' & $fl_name)

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

    Local $aMem = _winapi_getprocessmemoryinfo()

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

    FileWrite($hfl, StringFormat('Current Private Space = %010i ' & $aMem[0], $aMem[1], $aMem[2], $aMem[3], $aMem[4], $aMem[5], $aMem[6], $aMem[7], $aMem[8], $aMem[9]) & " " & $sPos & " [" & _now() & "]" & @lf)

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

    FileClose($hfl)
    $hfl = 0
    EndFunc

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

    Func _ReduceMemory($i_PID = -1)
    If $i_PID <> -1 Then
    ;kernel32.dll - OpenProcess - Opens an existing local process object.
    Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
    ;psapi.dll - EmptyWorkingSet - Removes as many pages as possible from the working set of the specified process.
    Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0])
    ;kernel32.dll - CloseHandle - Closes an existing local process object.
    DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0])
    Else
    ;s.o.
    Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
    EndIf
    Return $ai_Return[0]
    EndFunc ;==>_ReduceMemory

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

    Func _exit()
    ;~ AdlibUnRegister("_ReduceMemory")
    _SQLite_Close($usedb)
    _SQLite_Shutdown()
    Exit
    EndFunc ;==>_exit

    [/autoit]

    Mein MemLog sagt (2 Durchläufe):

    Code
    Current Private Space = 0030285824 7870 Scriptstart --------- [28.01.2013 14:57:17]
    Current Private Space = 0030662656 7968 _load BEGINNING [28.01.2013 14:57:23]
    	Current Private Space = 0030662656 7968 _load SQL-1 [28.01.2013 14:57:23]
    	Current Private Space = 0030720000 7982 _load SQL-1 [28.01.2013 14:57:23]
    	Current Private Space = 0030720000 7982 _load SQL-2 [28.01.2013 14:57:23]
    	Current Private Space = 0031162368 8090 _load SQL-2 [28.01.2013 14:57:24]
    	Current Private Space = 0031174656 8093 _load before _Array2DSortFree [28.01.2013 14:57:24]
    		Current Private Space = 0031174656 8093 _Array2DSortFree BEGINNING [28.01.2013 14:57:24]
    		Current Private Space = 0031277056 8118 _Array2DSortFree END [28.01.2013 14:57:24]
    	Current Private Space = 0031277056 8118 _load after _Array2DSortFree [28.01.2013 14:57:24]
    Current Private Space = 0031277056 8118 _load END [28.01.2013 14:57:24]
    
    
    Current Private Space = 0031293440 8122 start_working BEGINNING [28.01.2013 14:57:27]
    Current Private Space = 0031571968 8190 _new_datetime BEGINNING [28.01.2013 14:57:27]
    Current Private Space = 0031571968 8190 _load BEGINNING [28.01.2013 14:57:28]
    	Current Private Space = 0031571968 8190 _load SQL-1 [28.01.2013 14:57:28]
    	Current Private Space = 0031625216 8203 _load SQL-1 [28.01.2013 14:57:28]
    	Current Private Space = 0031625216 8203 _load SQL-2 [28.01.2013 14:57:28]
    	Current Private Space = 0031625216 8203 _load SQL-2 [28.01.2013 14:57:28]
    	Current Private Space = 0031625216 8203 _load before _Array2DSortFree [28.01.2013 14:57:28]
    		Current Private Space = 0031625216 8203 _Array2DSortFree BEGINNING [28.01.2013 14:57:28]
    		Current Private Space = 0031698944 8221 _Array2DSortFree END [28.01.2013 14:57:28]
    	Current Private Space = 0031707136 8223 _load after _Array2DSortFree [28.01.2013 14:57:28]
    Current Private Space = 0031707136 8223 _load END [28.01.2013 14:57:28]
    Current Private Space = 0031707136 8223 start_working END [28.01.2013 14:57:28]
    
    
    Current Private Space = 0031707136 8223 start_working BEGINNING [28.01.2013 14:57:30]
    Current Private Space = 0031797248 8245 _new_datetime BEGINNING [28.01.2013 14:57:30]
    Current Private Space = 0031797248 8245 _stop BEGINNING [28.01.2013 14:57:31]
    	Current Private Space = 0031797248 8245 _load BEGINNING [28.01.2013 14:57:31]
    	Current Private Space = 0031797248 8245 _load SQL-1 [28.01.2013 14:57:31]
    	Current Private Space = 0031846400 8257 _load SQL-1 [28.01.2013 14:57:31]
    	Current Private Space = 0031846400 8257 _load SQL-2 [28.01.2013 14:57:31]
    	Current Private Space = 0031846400 8257 _load SQL-2 [28.01.2013 14:57:31]
    	Current Private Space = 0031846400 8257 _load before _Array2DSortFree [28.01.2013 14:57:31]
    		Current Private Space = 0031846400 8257 _Array2DSortFree BEGINNING [28.01.2013 14:57:31]
    		Current Private Space = 0031899648 8270 _Array2DSortFree END [28.01.2013 14:57:32]
    	Current Private Space = 0031899648 8270 _load after _Array2DSortFree [28.01.2013 14:57:32]
    	Current Private Space = 0031899648 8270 _load END [28.01.2013 14:57:32]
    Current Private Space = 0031899648 8270 start_working END [28.01.2013 14:57:32]
    Alles anzeigen

    Wie man sehen kann, wird an den SQL Stellen der Speicher erhöht. Das Array wird größer, würde ich noch verstehen ... aber wieso es dabei bleibt, verstehe ich nicht ... oder sieht zufällig jmd noch einen dicken SQL Fehler o.O?

    Grüße

  • Variablen schließen nicht? - Seht ihr einen Fehler?

    • Yaerox
    • 28. Januar 2013 um 08:07

    Und der Tipp aus dem englischen Forum mit dem AdlibRegister war korrekt. Nach fast 10 Wochen Fehlersuche hab ich ihn *___*

  • Variablen schließen nicht? - Seht ihr einen Fehler?

    • Yaerox
    • 25. Januar 2013 um 15:16

    Wie du vll. selbst gesehen hast das mit dem Array lag daran dass man erst laden klicken muss, hab ich vergessen zu erwähnen. Sorry.

    Bei mir war es bisher mit dem von 1stellig auf 2stellig nicht nur, auch zwischendurch .... hmmm :/

    Was heisst meine Schlussfolgerung ... ich war oder bin der Meinung wenn jetzt kein Fehler mehr in dem Code ist muss ja AutoIt einen haben, da es ja nicht normal ist das ein programm im Speicher ununterbrochen wächst ;)

    Ich habe noch einen heißen Tipp aus dem englischen Forum bekommen ... AdlibRegister ... ich habe ein Sleep(1000) und Adlib ist bei 1000, d.h. ich habe wohlmöglich alles was noch offen war an Variablen etc. nochmal geöffnet oder sowas ... habe den Fehler behoben und beobachte grad das Script ... bisher sieht es gut aus, es läuft aber auch erst seit ~ 3 Stunden ... abwarten und mal hoffen dass dort der Fehler war...

    Grüße

  • Variablen schließen nicht? - Seht ihr einen Fehler?

    • Yaerox
    • 25. Januar 2013 um 10:46

    Bei den letzten 4 Scripts die aufgebaut waren wie: GUI + Control + eine Schleife die 40.000 Items zu einem Control hinzufügt, und dann löscht) kam die Antwort: Ich kann keinen Fehler sehen ...

    Dann haben noch zwei andere das Problem erklärt dann kam nie wieder eine Antwort :/

  • Variablen schließen nicht? - Seht ihr einen Fehler?

    • Yaerox
    • 25. Januar 2013 um 09:26

    Bei der Nutzung von Garbage Collectoren ist bei mir bisher immer dann der zugesicherte Speicher in die Luft geschossen.

    Aber ich meine auch wenn es nur ein wenig ist, er sollte doch nicht steigen? Und das wiederum müsste bedeuten ich müsste irgendwo einen Fehler haben, oder es liegt an AutoIt. Das ist ja auch wieso ich euch beten wollte da mal drüber zu gucken ^^
    Das deprimierende ist, es sind mittlerweile rel. viele Befehle in AutoIt die in meinen Augen Speicherfehler hervorrufen. Habe schon zig Testscripts geschrieben und jedesmal das gleiche :/

  • Variablen schließen nicht? - Seht ihr einen Fehler?

    • Yaerox
    • 25. Januar 2013 um 09:16

    Ouhh mist, die ist abhanden gekommen ^^

    Problem: Ich starte das Dingen, es läuft durch. Hier wird quasi simuliert, dass Batch-Dateien abgearbeitet werden. Simulation -> daher auch die primitive immer gleiche feste Zuweisung in der Funktion lade_aktive_aps.

    Man schaue sich das Spiel im Taskmanager an. Bei mir lag der Arbeitspeicher nach dem start bei ~ 11.600K ... Nach ca. 16 Stunden war er bei ~11.750K. Dies heisst dass entweder eine der genutzen Funktionen von AutoIt nicht den gesamten Speicher freigibt, oder ich irgendwo eine Variable o.ä. jedesmal öffne und nicht schließe.

    Meine Tests: Je 100x und 300x eine Batch Datei starten: Run, Run @ComSpec, RunWait, RunWait @ComSpec, ShellExecute, ShellExecute CMD, ShellExecuteWait, ShellExecuteWait CMD ... Ergebis. Bis auf Run und RunWait sind alle Scripts im Speicher gestiegen. Daher nutze ich hier Run.
    Dann habe ich ein Testscript geschrieben, dass Einfach nur in eine Datei ('log') etwas schreibt. 2 Tests gemacht mit 100.000 Einträgen, speicher steigt nicht.

    Somit bin ich der Meinung wenn das oben gespoilerte Script im Speicher noch steigt, müsste wenn es mein Verschulden ist ja noch ein Fehler bei den deklarationen oder so vorhanden sein, sonst ergibt das ja keinen Sinn.

    Grüße

  • Wie kommt ihr auf euren Nicknamen?

    • Yaerox
    • 25. Januar 2013 um 08:47
    Zitat von 80x25

    Altersbedingt habe ich noch auf anderen Systemen entwickelt (mein erster PC hatte 8 MHz !). Da gab es natürlich ein paar technische Begrenzungen mehr als heutzutage...

    Bis heute programmiere ich noch größtenteils auf Unix-/Linux-Server ohne echte grafische Oberflächen - wo die Bildschirmbegrenzung bei 80 Zeichen x 25 Zeilen liegt.

    Das macht erfinderisch bei der Gestaltung von Masken...

    So hab ich in der Schule bis zum August auch programmiert :D

    Schön COMAL und PASCAL mit Blockgrafik :D

  • Variablen schließen nicht? - Seht ihr einen Fehler?

    • Yaerox
    • 25. Januar 2013 um 08:38

    Hallo zusammen,

    es klingt vielleicht doof, aber könnte mir mal bitte jemand von euch sagen, ob in dem folgenden Script Fehler sind im Sinne von: Ich deklariere eine Variable oder so, und gebe sie nicht frei?
    Ihr würdet mir echt sehr helfen. Danke im Vorraus.

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>

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

    Opt("GUIOnEventMode", 1)
    Opt("MustDeclareVars", 1)
    OnAutoItExitRegister("_exit")

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

    Global $aLVERSATZ_bot[1][3]
    Global $aLVERSATZ_top[5][2]
    Global $ablaufstatus

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

    ;#GUI 1
    Global $aufgabenlistefenster = GUICreate("Aufgabenliste", 250, 390)

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

    Global $zaehler_label = 0
    Global $hzaehler_label = GUICtrlCreateLabel("0", 50, 72, 200, 20)
    Global $aladeaktiveap_button = GUICtrlCreateButton("Lade aktive AP", 140, 40, 100, 30)
    Global $astart_button = GUICtrlCreateButton("Start", 30, 5, 50, 30)
    Global $astop_button = GUICtrlCreateButton("Stop", 30, 40, 50, 30)

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

    GUISetState(@SW_SHOW, $aufgabenlistefenster)

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

    ;Aufgabenliste
    GUICtrlSetOnEvent($aladeaktiveap_button, "lade_aktive_aps")
    GUICtrlSetOnEvent($astart_button, "pruefe_ablauf")
    GUICtrlSetOnEvent($astop_button, "beende_ablauf")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit", $aufgabenlistefenster)

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

    While 1
    Sleep(100)
    WEnd

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

    Func lade_aktive_aps()
    $aLVERSATZ_bot[0][0] = "0"
    $aLVERSATZ_bot[0][1] = "18/01/2013 08:00:00"
    $aLVERSATZ_bot[0][2] = "Test AP"
    EndFunc ;==>lade_aktive_aps

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

    Func pruefe_ablauf()
    $ablaufstatus = True
    AdlibRegister("vergleiche_zeitstempel", 1000)
    EndFunc ;==>pruefe_ablauf

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

    Func vergleiche_zeitstempel()
    Local $a_row0, $naechste_geplante_startdatum, $aDatumForm
    If UBound($aLVERSATZ_bot) = 0 Then
    beende_ablauf()
    Return 0
    EndIf
    $a_row0 = StringSplit($aLVERSATZ_bot[0][1], " ")
    $naechste_geplante_startdatum = $a_row0[1]
    $a_row0 = StringSplit($a_row0[2], ":")

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

    $aDatumForm = StringSplit($naechste_geplante_startdatum, "/")

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

    If $aDatumForm[3] * 365 + $aDatumForm[2] * 30 + $aDatumForm[1] = @YEAR * 365 + @MON * 30 + @MDAY Then
    If $a_row0[1] * 3600 + $a_row0[2] * 60 = @HOUR * 3600 + @MIN * 60 + @SEC Or $a_row0[1] * 3600 + $a_row0[2] * 60 < @HOUR * 3600 + @MIN * 60 + @SEC Then
    $a_row0 = 0
    $aDatumForm = 0
    starte_ablauf()
    EndIf
    ElseIf $aDatumForm[3] * 365 + $aDatumForm[2] * 30 + $aDatumForm[1] < @YEAR * 365 + @MON * 30 + @MDAY Then
    $a_row0 = 0
    $aDatumForm = 0
    starte_ablauf()
    EndIf
    $zaehler_label = $zaehler_label + 1
    GUICtrlSetData($hzaehler_label, $zaehler_label)
    $a_row0 = 0
    $naechste_geplante_startdatum = 0
    $aDatumForm = 0
    EndFunc ;==>vergleiche_zeitstempel

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

    Func starte_ablauf()
    Local $sFehler, $sStatus, $ShellExecute
    Local $aBatch[5][5] = [[1, 1, $aLVERSATZ_bot[0][1], "Dateien erzeugen", ""], _
    [2, 2, $aLVERSATZ_bot[0][1], "Dateien von neu nach backup kopieren", ""], _
    [3, 3, $aLVERSATZ_bot[0][1], "Dateien von neu nach alt kopieren", ""], _
    [4, 4, $aLVERSATZ_bot[0][1], "Dateien verschieben", ""], _
    [5, 5, $aLVERSATZ_bot[0][1], "_neu_einplanen", ""]]

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

    ReDim $aLVERSATZ_top[5][2]
    For $i = 0 To UBound($aBatch) - 1
    $aLVERSATZ_top[$i][0] = $aBatch[$i][1] * 10
    $aLVERSATZ_top[$i][1] = $aBatch[$i][3]
    Next

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

    For $i = 0 To UBound($aBatch) - 1
    $sStatus = " ... wird gestartet"
    If $aBatch[$i][4] = "" Then
    $sFehler = " "
    _schreibe_log($sFehler, $aBatch[$i][4], $sStatus)
    $sFehler = "OK"
    $sStatus = " ... ist beendet"
    _schreibe_log($sFehler, $aBatch[$i][4], $sStatus)
    Else
    $sFehler = " "
    _schreibe_log($sFehler, $aBatch[$i][4], $sStatus)
    $ShellExecute = Run($aBatch[$i][4], "c:", @SW_HIDE)
    If $ShellExecute <> 0 Then
    $sFehler = "FEHLER"
    $sStatus = " Es ist ein Fehler aufgetreten."
    Else
    $sFehler = "OK"
    $sStatus = " ... ist beendet"
    EndIf
    _schreibe_log($sFehler, $aBatch[$i][4], $sStatus)
    EndIf

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

    If UBound($aLVERSATZ_top) = 1 Then
    $aLVERSATZ_top[0][0] = ""
    $aLVERSATZ_top[0][1] = ""
    Else
    _ArrayDelete($aLVERSATZ_top, 0)
    EndIf
    Next
    Sleep(1000)

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

    If UBound($aLVERSATZ_bot) = 1 Then
    $aLVERSATZ_bot[0][0] = ""
    $aLVERSATZ_bot[0][1] = ""
    $aLVERSATZ_bot[0][2] = ""
    Else
    _ArrayDelete($aLVERSATZ_bot, 0)
    EndIf
    $sFehler = 0
    $sStatus = 0
    $ShellExecute = 0
    $aBatch = 0
    lade_aktive_aps()
    EndFunc ;==>starte_ablauf

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

    Func beende_ablauf()
    AdlibUnRegister("vergleiche_zeitstempel")
    $ablaufstatus = False
    Return 0
    EndFunc ;==>beende_ablauf

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

    Func _exit()
    Exit
    EndFunc ;==>_exit

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

    Func _schreibe_log($sFehler, $sBefehl, $sStatus)
    Local $hfile
    $hfile = FileOpen("log_woBATCHwoSQLwoLV.txt", 1)
    FileWriteLine($hfile, "[" & @MDAY & "/" & @MON & "/" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & "][" & $sFehler & "] " & $sBefehl & " " & $sStatus)
    FileClose($hfile)
    EndFunc ;==>_schreibe_log

    [/autoit]
  • Quellcode durchsuchen/Stringregexp richtig benutzen

    • Yaerox
    • 23. Januar 2013 um 09:06

    Learning by doing ;) Je nachdem ob du schonmal programmiert hast oder nicht, ist es alles sehr ähnlich ... habe vor zig jahren mal Pascal und Komal gemacht, jetzt C/C++ und AutoIt und habe nun mit PHP noch angefangen ... es ist meist nur andere Syntax aber vom Grundgedanken des Programmierens ist es meiner Ansicht nach ziemlich ähnlich ...

  • AutoIT PNG Bilder ausgeben

    • Yaerox
    • 18. Januar 2013 um 09:11

    Ich arbeite mit GDI+ und dann _GDIPlus_ImageSaveToFile und speicher die Bilder als .png.

  • Wie kommt ihr auf euren Nicknamen?

    • Yaerox
    • 18. Januar 2013 um 09:08

    Meine Usernamen sind platt ^^ Genauso platt wie meine Nicks bei diversen Games ...

    Yaerox -> Ich liebe Scootertuning (als Hobby) und vorallem die Yamaha Aerox.
    XO -> XOXO -> Höre schon seit ... puhh ^^ glaube 5 oder 6 Jahren Casper, daher das XO.

    Mittlerweile heisse ich in allen Games auch Yaerox mit Ausnahme CS, da bin ich die erste und einzig wahre Sterbehilfe AG (ja, erster ESL Account mit diesem Namen :D).

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™