Nach Systemzeit eine Aktion auslösen

  • Hallo,

    ich mal wieder.
    Wie bekommt man es hin das man nach der Systemzeit eine Aktion auslöst oder bessser gesagt nach den ausgewählten kriterien ?

    Habe mir drei Listen gemacht die man über Combo Boxen auswählen kann.

    Spoiler anzeigen
    [autoit]

    $file1 = FileOpen(@ScriptDir & "\Liste\liste.log",1)
    FileWriteLine($file1, "Gedruckt und Gesendet"& @CRLF)
    FileWriteLine($file1, "Gedruckt" & @CRLF)
    FileWriteLine($file1, "Gesendet")
    FileClose($file1)
    $file2 = FileOpen(@ScriptDir & "\Liste\listetage.log",1)
    FileWriteLine($file2, "Tag"& @CRLF)
    FileWriteLine($file2, "Montag" & @CRLF)
    FileWriteLine($file2, "Dienstag" & @CRLF)
    FileWriteLine($file2, "Mittwoch" & @CRLF)
    FileWriteLine($file2, "Donnertag" & @CRLF)
    FileWriteLine($file2, "Freitag" & @CRLF)
    FileWriteLine($file2, "Samstag" & @CRLF)
    FileWriteLine($file2, "Sonntag" & @CRLF)
    FileWriteLine($file2, "Montag bis Freitag")
    FileClose($file2)
    $file3 = FileOpen(@ScriptDir & "\Liste\listestunden.log",1)
    FileWriteLine($file3, "6.00"& @CRLF)
    FileWriteLine($file3, "7.00" & @CRLF)
    FileWriteLine($file3, "8.00" & @CRLF)
    FileWriteLine($file3, "9.00" & @CRLF)
    FileWriteLine($file3, "10.00" & @CRLF)
    FileWriteLine($file3, "11.00" & @CRLF)
    FileWriteLine($file3, "12.00" & @CRLF)
    FileWriteLine($file3, "13.00" & @CRLF)
    FileWriteLine($file3, "14.00" & @CRLF)
    FileWriteLine($file3, "15.00" & @CRLF)
    FileWriteLine($file3, "16.00" & @CRLF)
    FileWriteLine($file3, "17.00" & @CRLF)
    FileWriteLine($file3, "18.00" & @CRLF)
    FileWriteLine($file3, "19.00" & @CRLF)
    FileWriteLine($file3, "20.00" & @CRLF)
    FileWriteLine($file3, "21.00" & @CRLF)
    FileWriteLine($file3, "22.00" & @CRLF)
    FileWriteLine($file3, "23.00" & @CRLF)
    FileWriteLine($file3, "00.00" & @CRLF)
    FileWriteLine($file3, "1.00" & @CRLF)
    FileWriteLine($file3, "2.00" & @CRLF)
    FileWriteLine($file3, "3.00" & @CRLF)
    FileWriteLine($file3, "4.00" & @CRLF)
    FileWriteLine($file3, "5.00")
    FileClose($file3)

    [/autoit]


    Daraus mache ich wiederum eine Liste "Logliste.log" mit den ausgewählten Einträgen.

    Angezeigt werden diese in 3 List Boxen

    Spoiler anzeigen
    [autoit]

    $com1 = FileOpen(@ScriptDir & "\Liste\logliste.log",0)
    $com11 = FileReadLine($com1, 1)
    $com12 = FileReadLine($com1, 2)
    $com13 = FileReadLine($com1, 3)
    FileClose($com1)
    $List1 = GUICtrlCreateList($com11, 205, 178, 130, 19, BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE,$LBS_MULTIPLESEL))
    $List2 = GUICtrlCreateList($com12, 375, 178, 100, 19, BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE,$LBS_MULTIPLESEL))
    $List3 = GUICtrlCreateList($com13, 505, 178, 50, 19, BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE,$LBS_MULTIPLESEL))

    [/autoit]


    Aber wie bekomme ich es hin das die Aktion dann auch nach Zeit und Datum ausgeführt wird ?
    Ähm bevor das hier aufkommt, traue mir noch nicht zu das ganze mit einen Array zu machen. :whistling:


    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

  • Ich weiss nicht genau was du meinst...
    aber vielleicht geht's mit @HOUR und @MIN ... zumindest mit der Zeit, bei den
    Tagen weiss ich auch nicht genau.

  • Genau Zacharja.
    Das ganze müsste mit @Hour etc. gehn. Ein ungetestetes Bsp.:

    [autoit]

    If @Hour == 21 and @Min == 15 and @Sec == 0 Then
    MsgBox(1, "Uhrzeit", "Es ist " & @Hour & ":" & @Min & ":" & @Sec & " Uhr!")
    EndIf
    While 1
    WEnd

    [/autoit]


    Kein Garantie, dass es geht[MSIE_newline_end ]

  • sorry für die späte Rückmeldung,

    @ Zacharja
    ja irgendwie in dieser Richtung muss es wohl sein weiss halt nur nicht wie.

    @Leon
    hatte das mal so getestet aber er greift die Zeit einfach nicht ab. Muss man das nicht in eine Schleife packen?

    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

  • Hallo oh-ha,

    du solltest dein komplettes Skript und die benötigte "Logliste.log" einstellen.
    Lies dir mal die Hilfe zu _nowCalc und _DateDiff durch, denn diese beiden Befehle wirst du warscheins benötigen

    mfg (Auto)Bert

  • Hallo AutoBert

    oh ha das sind etwas über 2000 Zeilen mit etwas sensiblen Daten drin.
    in der Logliste.log steht einfach nur das drin.
    Logliste.log:
    Gesendet
    Freitag
    10.00

    Werde mir das mal in der Hilfe mit _nowCalc und _DateDiff durchlesen.

    Edit: Denke mal ich weiss jetzt wie du das meinst. Einen Timer im Skript laufen lassen der bei erreichten Sekunden eine Aktion auslöst.
    Dann wäre jeder angegebene Wochen-Tag = 604800sec und bei jeden Tag = 86400sec, müßte man nur noch den Startpunkt bestimmen wenn es denn so gehen sollte.
    Puh wie bekommt man denn so was hin???


    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

    Einmal editiert, zuletzt von oh-ha (31. Januar 2010 um 02:10)

  • moin moin,

    habe mal ein wenig getestet und das ist dabei rausgekommen.

    [autoit]

    While 1
    $td = _NowTime(4) ;(4) = zeigt nur Stunden und Minuten an zB 10:00
    If $td = ("09:31") Then
    MsgBox(1, "geht", _NowTime(4))
    If $td = ("09:31") Then ; nur zum Testen
    ExitLoop
    EndIf
    EndIf
    Sleep(100)
    WEnd

    [/autoit]


    Das geht jetzt auch so weit zumindest schon mal mit der Zeit.

    mfg
    jojono

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

    Einmal editiert, zuletzt von oh-ha (31. Januar 2010 um 09:35)

    • Offizieller Beitrag

    Ich hatte mal so ein Programm geschrieben. Damit kann man Programme datum-/zeitgesteuert starten lassen.
    Vielleicht möchtest Du es verwenden (angepasst an die neue AutoIt-Version):

    Spoiler anzeigen
    [autoit]


    #include <StaticConstants.au3>
    #include <Date.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <EditConstants.au3>
    #include <DateTimeConstants.au3>
    #include <GUIConstantsEx.au3>

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

    Opt('GUIOnEventMode', 1) ; OnEvent-Mode einschalten

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

    Global $sTitle = 'Start-Liste v1.1' ; Fenstertitel
    Global $sAppDir = @AppDataDir & '\Start-Liste\' ; Pfad für das Programm festlegen
    If Not FileExists($sAppDir) Then DirCreate($sAppDir) ; wenn Verzeichnis nicht vorhanden, dann anlegen
    Global $sDBFile = $sAppDir & 'Start-Liste.sldb' ; Datenbank-Datei festlegen
    Global Const $DTM_SETFORMAT_ = 0x1032 ; Konstante zum setzen des Formats für das Date-Control

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

    Global $hGui = GUICreate($sTitle, 800, 600) ; Fenster erstellen
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End') ; Funktion "_End" aufrufen, wenn Fenster geschlossen wird
    GUISetBkColor(0xCCCCCC) ; Hintergrundfarbe für das Fenster
    GUISetFont(10) ; Standard-Zeichensatz auf 10er Schrift setzen
    Global $hTime = GUICtrlCreateLabel(@HOUR & ':' & @MIN & ':' & @SEC, 680, 10, 100, 20, $SS_RIGHT) ; Aktuelle Zeit anzeigen
    GUICtrlSetFont(-1, 16, 800) ; Aktuelle Zeit in 16er Schrift und 800er Breite anzeigen
    GUICtrlCreateGroup('Neuer Eintrag', 10, 60, 780, 60) ; Gruppe -Anfang-
    GUICtrlCreateLabel('Datum / Uhrzeit:', 20, 88, 100, 24) ; Text anzeigen
    Global $hDate = GUICtrlCreateDate('', 120, 85, 140, 24, $DTS_TIMEFORMAT) ; Datum/Uhrzeit-Control erstellen
    GUICtrlSendMsg($hDate, $DTM_SETFORMAT_, 0, 'dd.MM.yyyy / HH:mm') ; Das Format für das Date-Control festlegen
    GUICtrlCreateLabel('Datei:', 280, 88, 40, 20) ; Text anzeigen
    Global $hFilename = GUICtrlCreateInput('', 320, 85, 330, 24, BitOR($ES_LEFT, $ES_AUTOHSCROLL, $ES_READONLY)) ; Readonly-Input zur Anzeige von Pfad und Datei
    Global $hSelect = GUICtrlCreateButton('...', 650, 85, 30, 24) ; Datei-Auswahl-Button erstellen
    GUICtrlSetOnEvent(-1, '_SelectFile') ; Diese Funktion aufrufen, wenn der Button gedrückt wird
    Global $hAdd = GUICtrlCreateButton('Hinzufügen', 700, 85, 80, 24) ; "Hinzufügen"-Button erstellen
    GUICtrlSetOnEvent(-1, '_NewEntry') ; Diese Funktion aufrufen, wenn der Button gedrückt wird
    GUICtrlCreateGroup('', -99, -99, 1, 1) ; Gruppe -Ende-
    Global $hListView = GUICtrlCreateListView('Datum / Uhrzeit|Datei', 10, 140, 780, 400, $LVS_SHOWSELALWAYS) ; ListView erstellen
    GUICtrlSetOnEvent(-1, '_ClickListView') ; Diese Funktion aufrufen, wenn auf eine Spalten-Überschrift geklickt wird
    Global $hContext = GUICtrlCreateContextMenu($hListView) ; Kontextmenü für das ListView erstellen
    GUICtrlCreateMenuItem('Markierte Einträge entfernen', $hContext) ; Kontextmenü-Eintrag erstellen
    GUICtrlSetOnEvent(-1, '_DelItem') ; Diese Funktion aufrufen, wenn der Kontextmenüeintrag ausgewählt wird
    _ListViewLoad($hListView, $sDBFile) ; Datenbank laden
    _GUICtrlListView_SetColumnWidth($hListView, 0, 150) ; Breite von ListViewspalte 0 auf 150 Pixel Breite setzen
    _GUICtrlListView_SetColumnWidth($hListView, 1, $LVSCW_AUTOSIZE) ; Breite von ListViewspalte 1 automatisch anpassen
    _GUICtrlListView_RegisterSortCallBack($hListView) ; Sortierfunktion registrieren
    _SortListView(1) ; Sortieren nach Spalte 1
    _SortListView(0) ; Sortieren nach Spalte 0 (Eintrag mit nächstem Datum oben)
    $sMsg = 'Die in der Liste eingetragenen Dateien werden zur angegebenen Zeit per ShellExecute gestartet.' & @CRLF
    $sMsg &= 'Bitte nur Dateien angeben, die selbst ausführbar (.exe) oder die mit einem ausführbaren Programm verknüpft sind.'
    GUICtrlCreateLabel($sMsg, 15, 550, 740, 40) ; Hinweistext anzeigen
    GUISetState() ; Fenster anzeigen
    AdlibRegister('_CheckDate', 1000) ; Funktion alle 1000 ms aufrufen (prüfen, ob die Zeit eines Eintrags bereits erreicht bzw. überschritten wurde)

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

    While True ; Endlosschleife
    Sleep(20) ; Sleep wird beim OnEvent-Mode benötigt, um den Prozessor nicht zu 100% auszulasten
    WEnd

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

    Func _End()
    AdlibUnRegister('_CheckDate')
    _GUICtrlListView_UnRegisterSortCallBack($hListView) ; Sortierfunktion deregistrieren
    Exit ; Programm beenden
    EndFunc ;==>_End

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

    Func _CheckDate()
    GUICtrlSetData($hTime, @HOUR & ':' & @MIN & ':' & @SEC) ; Die Uhrzeit aktualisieren
    Local $iCount, $sPath, $sWorkingDir
    $iCount = _GUICtrlListView_GetItemCount($hListView) ; Anzahl der ListView-Einträge ermitteln
    For $i = $iCount - 1 To 0 Step -1 ; Schleife für alle ListView-Einträge rückwärts durchlaufen, wegen DeleteItem
    If _DateConvert(_GUICtrlListView_GetItemText($hListView, $i)) <= _NowCalc() Then ; Wenn die Zeit erreicht/überschritten wurde, dann...
    $sPath = _GUICtrlListView_GetItemText($hListView, $i, 1) ; Dateiname + Pfad ermitteln
    $sWorkingDir = StringRegExpReplace($sPath, '(.+\\).+', '$1') ; Pfad als WorkingDir festlegen
    ShellExecute($sPath, '', $sWorkingDir) ; Datei mit ShellExecute aufrufen
    _GUICtrlListView_DeleteItem($hListView, $i) ; und den Eintrag aus dem ListView entfernen
    _ListViewSave($hListView, $sDBFile) ; geänderte ListView abspeichern
    EndIf
    Next
    EndFunc ;==>_CheckDate

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

    Func _SelectFile()
    Local $sFile = FileOpenDialog('Bitte eine Datei auswählen!', '', '(*.*)', 3, '', $hGui) ; Datei-Auswahl-Dialog aufrufen
    If Not @error Then GUICtrlSetData($hFilename, $sFile) ; Wenn kein Fehler aufgetreten ist, dann den Pfad ins Input-Control übernehmen
    EndFunc ;==>_SelectFile

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

    Func _NewEntry()
    Local $sDate, $sProg
    $sDate = GUICtrlRead($hDate) ; Datum/Uhrzeit auslesen
    ; Wenn Datum in der Vergangenheit liegt, dann Fehlermeldung ausgeben und Funktion verlassen
    If _DateConvert($sDate) < _NowCalc() Then Return MsgBox(16 + 262144, $sTitle, 'Datum/Uhrzeit muss in der Zukunft liegen!', 0, $hGui)
    $sProg = GUICtrlRead($hFilename) ; Pfad und Dateiname auslesen
    ; Wenn Pfad ein Leerstring ist (nichts ausgewählt), dann Fehlermeldung ausgeben und Funktion verlassen
    If $sProg = '' Then Return MsgBox(16 + 262144, $sTitle, 'Bitte eine Datei auswählen!', 0, $hGui)
    GUICtrlCreateListViewItem($sDate & '|' & $sProg, $hListView) ; ListView-Eintrag erstellen
    _GUICtrlListView_SetColumnWidth($hListView, 1, $LVSCW_AUTOSIZE) ; Breite von ListViewspalte 1 automatisch anpassen
    GUICtrlSetData($hFilename, '') ; Anzeige für den Dateipfad leeren
    GUICtrlSetData($hDate, _NowCalc()) ; Datum/Uhrzeit-Control wieder auf die aktuelle Zeit setzen
    _GUICtrlListView_BeginUpdate($hListView) ; Listview sperren
    _SortListView(1) ; Sortieren nach Spalte 1
    _SortListView(0) ; Sortieren nach Spalte 0 (Eintrag mit nächstem Datum oben)
    _GUICtrlListView_EndUpdate($hListView) ; Listview wieder freigeben
    _ListViewSave($hListView, $sDBFile) ; geänderte ListView abspeichern
    EndFunc ;==>_NewEntry

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

    Func _ClickListView()
    Local $iHeaderItem = GUICtrlGetState($hListView) ; Welche Spaltenüberschrift wurde angeklickt
    _GUICtrlListView_BeginUpdate($hListView) ; Listview sperren
    _SortListView($iHeaderItem) ; Sortieren nach entsprechender Spalte
    _GUICtrlListView_EndUpdate($hListView) ; Listview wieder freigeben
    EndFunc

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

    Func _SortListView($iHeaderItem)
    Local $iCount = _GUICtrlListView_GetItemCount($hListView) ; Anzahl der Listview-Einträge holen
    For $i = 0 To $iCount - 1 ; Schleife, um alle Listview-Einträge durchzugehen
    _GUICtrlListView_SetItemText($hListView, $i, _DateConvert(_GUICtrlListView_GetItemText($hListView, $i))) ; die Daten in Sortierreihenfolge bringen
    Next
    _GUICtrlListView_SortItems($hListView, $iHeaderItem) ; ListView-Einträge sortieren
    For $i = 0 To $iCount - 1 ; Schleife, um alle Listview-Einträge durchzugehen
    _GUICtrlListView_SetItemText($hListView, $i, _DateReConvert(_GUICtrlListView_GetItemText($hListView, $i))) ; die Daten wieder in Anzeigereihenfolge bringen
    Next
    EndFunc

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

    Func _DateConvert($sDate)
    ; Datum/Uhrzeit in das Format umwandeln, das auch von _NowCalc() verwendet wird
    Return StringRegExpReplace($sDate, '(\d{2})\.(\d{2})\.(\d{4}) / (\d{2}):(\d{2})', '$3/$2/$1 $4:$5:00')
    EndFunc ;==>_DateConvert

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

    Func _DateReConvert($sDate)
    ; Datum/Uhrzeit wieder in das deutsche Format umwandeln
    Return StringRegExpReplace($sDate, '(\d{4})/(\d{2})/(\d{2}) (\d{2}):(\d{2}):\d{2}', '$3.$2.$1 / $4:$5')
    EndFunc

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

    Func _DelItem()
    _GUICtrlListView_DeleteItemsSelected($hListView) ; alle markierten ListView-Einträge entfernen
    _ListViewSave($hListView, $sDBFile) ; geänderte ListView abspeichern
    EndFunc ;==>_DelItem

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

    Func _ListViewLoad($hListView, $sFilename) ; Datenbank-Datei laden
    Local $sItem, $hFile
    $hFile = FileOpen($sFilename, 0) ; Datei zum lesen öffnen
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    _GUICtrlListView_BeginUpdate($hListView) ; Listview sperren
    While True ; Endlosschleife
    $sItem = FileReadLine($hFile) ; Zeile aus der Datei lesen
    If @error Then ExitLoop ; wenn das Ende der Datei erreicht ist, dann Endlosschleife verlassen
    GUICtrlCreateListViewItem($sItem, $hListView) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
    WEnd
    _GUICtrlListView_EndUpdate($hListView) ; Listview wieder freigeben
    FileClose($hFile) ; Datei schließen
    EndIf
    EndFunc ;==>_ListViewLoad

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

    Func _ListViewSave($hListView, $sFilename) ; Datenbank-Datei speichern
    Local $iCount, $hFile, $sItem
    $iCount = _GUICtrlListView_GetItemCount($hListView) ; Anzahl der Listview-Einträge holen
    $hFile = FileOpen($sFilename, 2) ; Datei zum speichern (überschreiben) öffnen
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    For $i = 0 To $iCount - 1 ; Schleife, um alle Listview-Einträge durchzugehen
    $sItem = _GUICtrlListView_GetItemTextString($hListView, $i) ; die Werte aus dem Listview-Eintrag holen
    FileWriteLine($hFile, $sItem) ; und in die Datei schreiben
    Next
    FileClose($hFile) ; Datei schließen
    EndIf
    EndFunc ;==>_ListViewSave

    [/autoit]
  • Oh DANKE dir,

    nehme das gerne und mit Freuden an dein Skript, hatte so was gesucht aber nichts vergleichbares gefunden.
    Erspart mit echt eine menge Arbeit.

    Setze ich das hier mal auf gelöst.


    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit