MouseMove Frage

  • Hallo Leute.

    Ich habe mal wieder eine Frage zu meinem Programmschnipsel.
    Ich möchte dass sich die Maus zur eingestellten Uhrzeit von Zeit zu Zeit bewegt.
    Außerhalb dieser Uhrzeit soll das nicht mehr passieren. Quasi Sleep-Modus.
    Hier ist mein Programm nur irgendwie funktioniert das nicht so wie ich es will. :/


    [autoit]

    #include <Date.au3>

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

    Global $anfangszeit
    Global $endzeit
    $anfangszeit = InputBox("Startzeit","Startzeit festlegen","6:30")
    $endzeit = InputBox("Endzeit","Endzeit festlegen","16:00")

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

    Global $Zeit = @HOUR & ":" & @MIN
    MsgBox(0,"",$Zeit)

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

    _Main()

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

    Func _Main()

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

    EndFunc

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

    _MouseMove()

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

    Func _MouseMove()

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

    While 1
    Local $aPos = MouseGetPos()
    MouseMove($aPos[0]+1, $aPos[1]+1) ; Move the mouse cursor to the x, y position
    MouseMove($aPos[0]-1, $aPos[1]-1) ; Move the mouse cursor to the x, y position
    Sleep(200)
    ;Sleep (300000)
    $Zeit = @HOUR & ":" & @MIN
    If $Zeit < $anfangszeit Or $Zeit >= $endzeit Then

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

    If $Zeit
    Do

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

    $Zeit = @HOUR & ":" & @MIN
    MsgBox(0,"",$Zeit)
    Sleep (5000)

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

    Until $Zeit < $anfangszeit Or $Zeit >= $endzeit

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

    EndIf
    ;_MouseMove()

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

    WEnd

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

    EndFunc

    [/autoit]

    Könnte mir vielleicht jemand da etwas aus der Patsche helfen?

    Danke im Voraus, Hexpirator

  • Da ist einiges "komisch".

    Erstmal verwirren mich die ganzen doppelten Schleifen und Abfragen.
    "While WEnd" und "Do...Until" und dann auch noch eine IF Abfrage? Das lässt sich vermutlich auch mit einer einzigen Schleife mit integrierter Abfrage lösen

    Dann versuchst du Variablen zu vergleichen die einen Zahlenwert mit Doppelpunkt enthalten. Ich glaube, dass AutoIt in dem Fall nicht richtig mit der Formatierung klar kommt, da es sich ja nicht direkt um eine mathematische Zahl handelt.

    Du musst entweder Stunde und Minute nacheinander vergleichen, oder du musst die Zeit komplett in Minuten oder Stunden umrechnen.

    • Offizieller Beitrag

    Wie KloMeister schon schreibt, vergleichst Du zwei Strings miteinander. Dabei wird von links nach rechts verglichen und nicht nach Uhrzeit (das Format kennt AutoIt nicht).
    Also würde ich für die Eingabe nicht eine InputBox verwenden, sondern eine GUI mit GUICtrlCreateDate (Beispiel 3 in der Hilfe zeigt, wie man dann auch nur die Uhrzeit eingeben kann).
    Das schließt dann auch gleich Fehleingaben aus.
    Wenn Du dann die Uhrzeiten im Format "HH:MM:SS" speicherst, kannst Du _DateDiff für den Vergleich verwenden.
    Auf jeden Fall solltest Du auch beachten, dass die Anfangszeit größer als die Endzeit sein kann (Übernachtmodus).

  • Übernachtmodus:
    Excelformel: =Wenn(Startzeit>Zielzeit;fu_nachtmodus;fu_tagmodus)

    bedeutet doch im Umbau:

    Spoiler anzeigen
    [autoit]


    $Startzeit = "1800"
    $Zielzeit = "0500"

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

    ; =Wenn(Startzeit>Zielzeit;fu_nachtmodus;fu_tagmodus)
    If $Startzeit > $Zielzeit Then
    nachtmodus()
    ElseIf $Startzeit < $Zielzeit Then
    tagmodus()
    EndIf
    ;EndIf

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

    Func nachtmodus()
    MsgBox(64,"Nachtmodus","Es ist Nacht und draußen ist es dunkler als am Tag.")
    EndFunc

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

    Func tagmodus()
    MsgBox(64,"Tagmodus","Es ist Tag und im Sommer schein dann auch mal die Sonne.")
    EndFunc

    [/autoit]

    Das einmal als Ansatz für den Übernachtmodus. Start- und Zielzeit kannst Du HHMMSS nehmen, oder mit StringSplitt die HH,MM und SS in ein Array ausgeben lassen und dann nur die beiden ersten Arrays verwenden ohne die Doppelpunkte. Zum Beispiel für 21:37:58 nimmst Du array[1]&array[2], was dann folgendes Ergebniss hat 2137 (vierstellig für das Scriptbeispiel von mir. Ansonsten: fragen !!! ;)

    Edit: Beitrag ist zwar erst ca. elf Stunden alt, aber ich habe mal etwas weiter gescriptet und versucht es so gut es geht und nach besten Wissen und Gewissen dokumentiert.
    Ich versuche da die Zeiten in mathematische Zahlen umzuwandlen und dann mit diesen Werte zu arbeiten. Also ist 0630 (für Startzeit 6:30 Uhr) größer als 1630 (für Endzeit 16:30), dann Tagmodus, ansonsten Nachtmodus. Das war groß erklärt, was ich vor hatte. Ich weiß nicht ob StringSplit so die ideale Lösung ist, aber ich denke mal, das ist zumindest ein Lösungsweg/-ansatz. Sollte ich die Aussage von KloMeister, die da lautet: " Ich glaube, dass AutoIt in dem Fall nicht richtig mit der Formatierung klar kommt, da es sich ja nicht direkt um eine mathematische Zahl handelt." einfach so stehen lassen oder zumindest versuchen einen Lösungsweg/-ansatz zu suchen und zu finden? Und da ich mal wieder viel zu früh an meinem ersten langen Wochenende wach gewurden bin, im Bett lag und ich plötzlich überlegte, ob mal das evtl. doch umsetzen könnte. Punkte weg und dann habe ich doch zwei mathematische Zeichen, solange ich das Format HH:MM in der InputBox beachte. Also aufgestanden, Kaffee gemacht, Brötchen in Opfen, PC an und dann nach einem kleinen Frühstück mit heutiger Tageszeitung und Kaffee das umgesetzt, was irgendwie im Kopf war. Ergebniss:

    Spoiler anzeigen
    [autoit]


    $an_zeit = InputBox("Startzeit","Startzeit festlegen. Format ---> HH:MM","06:30")
    $end_zeit = InputBox("Endzeit","Endzeit festlegen. Format ---> HH:MM","16:00")

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

    ;Daten aus der InputBox auslesen und in jeweils zwei Teile splitten beim Doppelpunkt
    $s_answer = StringSplit($an_zeit, ":") ; Ergebnis: $s_answer[1] und $s_answer[2] ; also: 0630
    $e_answer = StringSplit($end_zeit, ":"); Ergebnis: $e_answer[1]&$e_answer[2] ; also 1600

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

    ; meine Nutzung der Excel-Formel "=Wenn(Startzeit>Zielzeit;fu_nachtmodus;fu_tagmodus)"
    If $e_answer[1]&$e_answer[2] < $s_answer[1]&$s_answer[2] Then
    nachtmodus()
    ElseIf $e_answer[1]&$e_answer[2] > $s_answer[1]&$s_answer[2] Then
    tagmodus()
    EndIf

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

    ; ab hier die Funktionen die ich nutze
    Func nachtmodus()
    MsgBox(64,"Nachtmodus","Es ist Nacht und draußen ist es dunkler als am Tag.")
    EndFunc

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

    Func tagmodus()
    MsgBox(64,"Tagmodus","Es ist Tag und im Sommer schein dann auch mal die Sonne.")
    EndFunc

    [/autoit]

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    5 Mal editiert, zuletzt von Alina (5. Dezember 2014 um 06:03)

  • Ich bin echt überwältigt von eurer Hilfsbereitschaft!
    Vielen Dank dafür Leute. Ich habe das letzte mal vor 5 jahren etwas mit autoit programmiert und dachte ich habe es noch drauf.
    So kann man sich täuschen.

    Großen Dank an Alina. Das bringt mich schon weiter. :)

  • @Alina
    Es gibt noch eine etwas leichtere bzw. übersichtlichere Variante um das zu erreichen, was du mit StringSplit erreicht hast:

    [autoit]

    $an_zeit = stringReplace($an_zeit, ":", "")
    $end_zeit = stringReplace($end_zeit,":", "")

    [/autoit]


    Macht die Sache zumindest bei der Abfrage übersichtlicher und spart Programmcode.


    Achja und wenn es nicht Tagmodus ist, dann muss es doch Nachtmodus sein? - also wieso ein ElseIf mit einer weiteren Prüfung?

    Tut da nicht auch ein einfaches:

    [autoit]

    Else
    tagmodus()

    [/autoit]


    ?

  • @hexpirator
    Dafür sind wir hier, zum helfen. ;)
    .
    @KloMeister
    Das mit StringSplit war von mir so gewählt, damit hexpirator erst ein "Neues" dazwischen hat und nicht gleich so viel.
    Das mit Else / ElseIf habe ich eigentlich nur gemacht, damit hexpirator evtl. selber schauen kann, was er möchte, wenn er sich die Hilfe durch sieht und ihm dann einfällt, es könnte auch noch eine Zwischenschicht geben, da ist dann ElseIf dran und das habe ich ihm dann ja schon gezeigt.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    Und weil morgen Nikolaus ist, gibt's von mir ein komplettes Beispielscript: :)

    Spoiler anzeigen
    [autoit]


    #include <Date.au3>
    #include <DateTimeConstants.au3>
    #include <GUIConstantsEx.au3>

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

    GUICreate("Auto-Mouse-Move", 380, 140)
    Global $idBegin = GUICtrlCreateDate("", 90, 20, 80, 30, $DTS_TIMEFORMAT)
    GUICtrlSetFont(-1, 14)
    GUICtrlSendMsg($idBegin, $DTM_SETFORMATW, 0, "HH:mm")
    GUICtrlCreateLabel('-', 190, 18, 30, 30)
    GUICtrlSetFont(-1, 20)
    Global $idEnd = GUICtrlCreateDate("", 220, 20, 80, 30, $DTS_TIMEFORMAT)
    GUICtrlSetFont(-1, 14)
    GUICtrlSendMsg($idEnd, $DTM_SETFORMATW, 0, "HH:mm")
    Global $idActivateAMM = GUICtrlCreateCheckbox('Aktiviere Auto-Mouse-Move', 100, 80, 200, 20)
    GUICtrlSetFont(-1, 10)
    GUISetState(@SW_SHOW)

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

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $idActivateAMM
    If BitAND(GUICtrlRead($idActivateAMM), $GUI_CHECKED) Then
    AdlibRegister('_MoveMouse', 500)
    Else
    AdlibUnRegister('_MoveMouse')
    EndIf
    EndSwitch
    WEnd

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

    Func _MoveMouse()
    Local $sTimeBegin = StringFormat('%04i/%02i/%02i ', @YEAR, @MON, @MDAY) & GUICtrlRead($idBegin) & ':00'
    Local $sTimeEnd = StringFormat('%04i/%02i/%02i ', @YEAR, @MON, @MDAY) & GUICtrlRead($idEnd) & ':00'
    $sTimeEnd = _DateAdd('D', Abs(_DateDiff('D', $sTimeBegin, $sTimeEnd)), $sTimeEnd)
    Local $sNow = _NowCalc()
    If _DateDiff('s', $sTimeBegin, $sNow) > 0 And _DateDiff('s', $sTimeEnd, $sNow) < 0 Then
    Local $aPos = MouseGetPos()
    MouseMove($aPos[0] + 2, $aPos[1] + 2)
    MouseMove($aPos[0] - 2, $aPos[1] - 2)
    MouseMove($aPos[0], $aPos[1])
    EndIf
    EndFunc ;==>_MoveMouse

    [/autoit]
  • Ich hatte auch mal das Problem mit der Zeit. Musste sie in 3 Rubriken aufteilen (Früh-, Spät- und Nachtschicht). Ich hab mich dafür entschieden die Uhrzeit in Ticks umzuwandeln.
    Das lies sich dann problemlos vergleichen

    Codeauszug von mir
    [autoit]

    Func _get_schicht($var); erkennt Früh- , Spät- oder Nachtschicht mit entsprechendem Datum
    Local $retVar = "Nachtschicht", $splitzzz
    Local $ticks = _TimeToTicks(@HOUR, @MIN, @SEC) / 1000
    If $ticks >= 19800 And $ticks < 48600 Then $retVar = "Frühschicht"
    If $ticks >= 48600 And $ticks < 77400 Then $retVar = "Spätschicht"
    If $var > 0 Then
    Select
    Case $retVar = "Frühschicht"
    $retVar = _NowDate() & " Spätschicht|" & _NowDate() & " Nachtschicht"
    Case $retVar = "Spätschicht"
    $retVar = _NowDate() & " Nachtschicht|" & _NowDate() & " Frühschicht"
    Case $retVar = "Nachtschicht"
    $retVar = _NowDate() & " Frühschicht|" & _NowDate() & " Spätschicht"
    EndSelect
    Else
    If $ticks < 19800 Then
    $splitzzz = StringSplit(_DateAdd('d', -1, _NowCalcDate()), "/")
    $retVar = $splitzzz[3] & "." & $splitzzz[2] & "." & $splitzzz[1] & " " & $retVar
    Else
    $retVar = _NowDate() & " " & $retVar
    EndIf
    EndIf
    Return $retVar
    EndFunc ;==>_get_schicht

    [/autoit]

    Das soll nur als Anschauung dienen.

  • danke für eure Hilfe.
    Ich habe jetzt eine Gui erstellt und komme mit der Formatierung nicht klar.

    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=c:\users\reimed1\desktop\autoit_scripte\form1.kxf
    $Form1_1 = GUICreate("Screeny", 530, 186, 311, 389)
    $i_sStunden = GUICtrlCreateInput("6", 56, 72, 83, 24, BitOR($ES_CENTER,$ES_NUMBER,$WS_BORDER,$WS_CLIPSIBLINGS), BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE))
    GUICtrlSetLimit(-1, 2)
    GUICtrlSetFont(-1, 10, 400, 0, "Lucida Sans Unicode")
    $Updown_sStunden = GUICtrlCreateUpdown($i_sStunden)
    GUICtrlSetLimit(-1, 23, 0)
    GUICtrlSetTip(-1, "Start Stunde")
    $i_sMinuten = GUICtrlCreateInput("30", 152, 72, 81, 24, BitOR($ES_CENTER,$ES_NUMBER,$WS_BORDER,$WS_CLIPSIBLINGS), BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE))
    GUICtrlSetLimit(-1, 2)
    GUICtrlSetFont(-1, 10, 400, 0, "Lucida Sans Unicode")
    $Updown_sMinuten = GUICtrlCreateUpdown($i_sMinuten)
    GUICtrlSetLimit(-1, 59, 0)
    GUICtrlSetTip(-1, "30")
    $i_eStunden = GUICtrlCreateInput("16", 296, 72, 81, 24, BitOR($ES_CENTER,$ES_NUMBER,$WS_BORDER,$WS_CLIPSIBLINGS), BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE))
    GUICtrlSetLimit(-1, 2)
    GUICtrlSetFont(-1, 10, 400, 0, "Lucida Sans Unicode")
    $Updown_eStunden = GUICtrlCreateUpdown($i_eStunden)
    GUICtrlSetLimit(-1, 23, 0)
    $i_eMinuten = GUICtrlCreateInput("0", 392, 72, 81, 24, BitOR($ES_CENTER,$ES_NUMBER,$WS_BORDER,$WS_CLIPSIBLINGS), BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE))
    GUICtrlSetLimit(-1, 2)
    GUICtrlSetFont(-1, 10, 400, 0, "Lucida Sans Unicode")
    $Updown_eMinuten = GUICtrlCreateUpdown($i_eMinuten)
    GUICtrlSetLimit(-1, 59, 0)
    $gr_Startzeit = GUICtrlCreateGroup("Startzeit", 32, 24, 225, 97)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $gr_Endzeit = GUICtrlCreateGroup("Endzeit", 272, 24, 225, 97)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $l_sStunden = GUICtrlCreateLabel("Stunden", 56, 50, 44, 17)
    $l_sMinuten = GUICtrlCreateLabel("Minuten", 152, 50, 42, 17)
    $l_eStunden = GUICtrlCreateLabel("Stunden", 296, 50, 44, 17)
    $l_eMinuten = GUICtrlCreateLabel("Minuten", 392, 50, 42, 17)
    $btn_OK = GUICtrlCreateButton("OK", 200, 136, 129, 33)
    Dim $Form1_1_AccelTable[1][2] = [["{ENTER}", $btn_OK]]
    GUISetAccelerators($Form1_1_AccelTable)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    MsgBox(0,"",$GUI_EVENT_CLOSE)
    Exit
    Case $btn_OK
    ExitLoop

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

    EndSwitch
    WEnd

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

    GUIDelete("Screeny")

    [/autoit]

    Ich wüsste gerne wie man die Zehlen statt 6 uhr 06 Uhr anzeigen und in der Variable abspeichern kann.
    Bin langsam am verzweifeln.

    Danke im Voraus für eure Hilfe.

  • [autoit]

    $Uhrzeit=""
    if $Zeit<10 then $Uhrzeit="0"
    $Uhrzeit&=$Zeit

    [/autoit]

    Ich hoffe ich hab dich richtig verstanden :)

    PS:
    Eventuell, wenn du das bei einer Änderung durch den nutzer machen möchtest:

    [autoit]


    Case $i_sStunden
    $hour=GUICtrlRead($i_sStunden)
    if $hour<10 then GUICtrlSetData($i_sStunden,"0"&$hour)

    [/autoit]


    In deine While-Schleife einfügen

  • Hallo Oscar. Du hattest absolut Recht irgendwie habe ich dein o. gepostetes Script nicht ganz zerbröseln können. Ich hab es mir gerade nochmal angeschaut. jetzt habe ich es kapiert.

    Danke nochmal.

  • Hallo Oscar.
    Danke für den Quellcode.
    Ich möchte jedoch nicht einfach deinen Quelltext kopieren, sondern selber nachvollziehen, was ich mache.
    Wenn ich das hier in der MSGBOX auslesen lasse, dann stehen in den Variablen eine 3 und eine 4 und keine Uhrzeit.
    Kann mir vielleicht jemand auf die Sprünge Helfen, was ich da falsch mache?

    [autoit]

    #include <ButtonConstants.au3>
    #include <DateTimeConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    Global $Form1 = GUICreate("Screeny", 186, 112, 470, 404)
    GUISetBkColor(0x000000)
    Global $inp_Startzeit = GUICtrlCreateDate("2014/12/11 06:34:13", 16, 32, 57, 21, BitOR($DTS_UPDOWN,$DTS_TIMEFORMAT))
    GUICtrlSendMsg($inp_Startzeit, $DTM_SETFORMATW, 0, "HH:mm")
    GUICtrlRead($inp_Startzeit)
    GUICtrlSetColor(-1, 0xE3E3E3)
    Global $inp_Endzeit = GUICtrlCreateDate("2014/12/11 06:34:20", 112, 32, 57, 21, BitOR($DTS_UPDOWN,$DTS_TIMEFORMAT))
    GUICtrlSendMsg($inp_Endzeit, $DTM_SETFORMATW, 0, "HH:mm")
    GUICtrlRead($inp_Endzeit)
    GUICtrlSetColor(-1, 0xE3E3E3)
    Global $Button1 = GUICtrlCreateButton("Button1", 16, 64, 153, 33)
    Global $Label1 = GUICtrlCreateLabel("Startzeit", 16, 8, 42, 17)
    GUICtrlSetColor(-1, 0xE3E3E3)
    Global $Label2 = GUICtrlCreateLabel("Endzeit", 112, 8, 39, 17)
    GUICtrlSetColor(-1, 0xE3E3E3)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    ;MsgBox(64,"",$inp_Startzeit)
    ;MsgBox(64,"",$inp_Endzeit)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $inp_Startzeit
    GUICtrlRead($inp_Startzeit)
    Case $inp_Endzeit
    GUICtrlRead($inp_Endzeit)
    Case $Button1
    ExitLoop
    EndSwitch
    WEnd

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

    MsgBox(64,"",$inp_Startzeit)
    MsgBox(64,"",$inp_Endzeit)

    [/autoit]
  • Danke Lottich.
    Manchmal ist die Lösung so einfach. Wenn man es weiß. :D

    eine frage habe ich allerdings noch.
    Und zwar, wie kann ich nach der Eingabe der Zeiten und beim Druck auf den Button das Fenster schließen, aber die unterfunktionen weiter laufen lassen?

    Einmal editiert, zuletzt von hexpirator (11. Dezember 2014 um 09:26)

  • Konkret zu deiner Frage.
    "Und zwar, wie kann ich nach der Eingabe der Zeiten und beim Druck auf den Button das Fenster schließen, aber die unterfunktionen weiter laufen lassen?"

    Dein Button sollte kein Exit enthalten ^^. Was du suchst ist entweder die GUI zu minimieren.
    Oder willst du das ganze Programm "verschwinden lassen und deinen Prozess als Deamon ohne oberfläche laufen lassen.
    Das kannst du mit GUIdestroy machen. dann läuft dein script weiter aber deine GUI ist weg

    was auch mal spannend währe ist die adlib Funktion
    siehe https://www.autoitscript.com/autoit3/docs/f…libRegister.htm
    Diese Funktionen triggert eine Funktion aller x Sekunden
    da mit könntest du zb soetwas hier machen

    Spoiler anzeigen

    "WIki adlib func
    Parameters function The name of the adlib function to be registered.
    time[optional] how often in milliseconds to call the function. Default is 250 ms."

    Ich kann gerne mal zu dem Thema ein Videotutorial erstellen da die Funktion doch etwas tickreich ist bzw vielen noch unbekannt

    Einmal editiert, zuletzt von GegX (11. Dezember 2014 um 10:17)

  • So bin nun soweit gekommen,

    [autoit]

    #include <ButtonConstants.au3>
    #include <DateTimeConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    Global $Form1 = GUICreate("Screeny", 186, 112, 470, 404)
    GUISetBkColor(0x000000)
    Global $inp_Startzeit = GUICtrlCreateDate("", 16, 32, 57, 21,$DTS_TIMEFORMAT)
    GUICtrlSendMsg($inp_Startzeit, $DTM_SETFORMATW, 0, "HH:mm")
    GUICtrlSetColor(-1, 0xE3E3E3)
    Global $inp_Endzeit = GUICtrlCreateDate("", 112, 32, 57, 21,$DTS_TIMEFORMAT)
    GUICtrlSendMsg($inp_Endzeit, $DTM_SETFORMATW, 0, "HH:mm")
    GUICtrlSetColor(-1, 0xE3E3E3)
    Global $Button1 = GUICtrlCreateButton("Starten", 16, 64, 153, 33)
    Global $Label1 = GUICtrlCreateLabel("Startzeit", 16, 8, 42, 17)
    GUICtrlSetColor(-1, 0xE3E3E3)
    Global $Label2 = GUICtrlCreateLabel("Endzeit", 112, 8, 39, 17)
    GUICtrlSetColor(-1, 0xE3E3E3)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $anf_zeit = GUICtrlRead($inp_Startzeit)
    $end_zeit = GUICtrlRead($inp_Endzeit)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    ;Case $inp_Startzeit

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

    ;Case $inp_Endzeit

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

    Case $Button1
    GUICtrlRead($inp_Startzeit)
    GUICtrlRead($inp_Endzeit)
    GUIDelete ($Form1)
    ExitLoop
    ;GUISetState(@SW_MINIMIZE, $Form1)
    EndSwitch
    WEnd

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

    MsgBox(64,"",GUICtrlRead($inp_Startzeit))
    MsgBox(64,"",GUICtrlRead($inp_Endzeit))

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

    ;Anfangs- und Endzeiten eingeben
    ;Global $anf_zeit = InputBox("Startzeit","Startzeit festlegen. Format ---> HH:MM","06:30")
    ;Global $end_zeit = InputBox("Endzeit","Endzeit festlegen. Format ---> HH:MM","16:00")

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

    ;Daten aus der InputBox auslesen und Doppelpunkt entfernen
    $anf_zeit = StringReplace($anf_zeit, ":","") ; Ergebnis: $anf_zeit 0630
    $end_zeit = StringReplace($end_zeit, ":",""); Ergebnis: $end_zeit 1600

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

    MsgBox(64,"anfang",$anf_zeit)
    MsgBox(64,"endzeit",$end_zeit)

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

    While 1

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

    ;Aktuelle Zeit holen
    $Zeit = @HOUR & @MIN

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

    ; Entscheidung
    If $Zeit < $anf_zeit Or $Zeit >= $end_zeit Then

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

    nachtmodus()

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

    Else

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

    tagmodus()

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

    EndIf

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

    WEnd

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

    ;EndFunc
    ; ab hier die Funktionen die ich nutze
    Func nachtmodus()

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

    Sleep(1000)
    ;Sleep (60000)
    MsgBox(64,"Nachtmodus","Es ist Nacht und draußen ist es dunkler als am Tag.")

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

    EndFunc

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

    Func tagmodus()

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

    Local $aPos = MouseGetPos()
    MouseMove($aPos[0]+1, $aPos[1]) ; Move the mouse cursor to the x, y position
    Sleep(5)
    MouseMove($aPos[0]-1, $aPos[1]) ; Move the mouse cursor to the x, y position
    ;Sleep(600000)
    Sleep(1000)
    MsgBox(64,"Tagmodus","Es ist Tag und im Sommer schein dann auch mal die Sonne.")

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

    EndFunc

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

    Mein Problem ist nun, dass ich eingeben kann was ich will, trotzdem wir die voreingestellte zeit ausgegeben.
    Kann einer mir das nachvollziehbar erläutern?
    Danke im Voraus.

  • Hi die Lösung ist einfach.
    Du musst die variablen erst auslesen bzw setzen wenn du auf den knopf drückst

    $anf_zeit = GUICtrlRead($inp_Startzeit)
    $end_zeit = GUICtrlRead($inp_Endzeit)
    sollte unter Case $Button1 stehen

    du setzt die Variablen einmal am anfang liest sie aber kein zweites mal aus

    Frag ruhig weiter. nur so lernt man es ^^

  • Super Hilfe hier!!!
    Vielen Dank!

    Eine Frage habe ich noch. Wenn ich eine Standart-Zeit anzeigen lassen will, wie könnte ich das tun?
    Sagen wir mal: Startzeit um 6:30 Uhr und Endzeit 16:00.


    Gruß, Hexpirator

    So ich habe das jetzt so gelöst. :rolleyes:

    [autoit]

    #include <ButtonConstants.au3>
    #include <DateTimeConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    Global $Form1 = GUICreate("Screeny", 186, 112, 470, 404)
    GUISetBkColor(0x000000)
    Global $inp_Startzeit = GUICtrlCreateDate("", 16, 32, 57, 21,$DTS_TIMEFORMAT)
    GUICtrlSendMsg($inp_Startzeit, $DTM_SETFORMATW, 0, "HH:mm")
    GUICtrlSetColor(-1, 0xE3E3E3)
    Global $inp_Endzeit = GUICtrlCreateDate("", 112, 32, 57, 21,$DTS_TIMEFORMAT)
    GUICtrlSendMsg($inp_Endzeit, $DTM_SETFORMATW, 0, "HH:mm")
    GUICtrlSetColor(-1, 0xE3E3E3)
    Global $Button1 = GUICtrlCreateButton("Starten", 16, 64, 153, 33)
    Global $Label1 = GUICtrlCreateLabel("Startzeit", 16, 8, 42, 17)
    GUICtrlSetColor(-1, 0xE3E3E3)
    Global $Label2 = GUICtrlCreateLabel("Endzeit", 112, 8, 39, 17)
    GUICtrlSetColor(-1, 0xE3E3E3)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    Global $anf_zeit
    Global $end_zeit
    ;vesuch
    WinWaitActive("Screeny", "", 10)
    ControlSend("Screeny","",$inp_Startzeit,"06")
    send ("{RIGHT}")
    ControlSend("Screeny","",$inp_Startzeit,"30")
    Send("{TAB}")
    ControlSend("Screeny","",$inp_Endzeit,"16")
    send ("{RIGHT}")
    ControlSend("Screeny","",$inp_Endzeit,"00")
    ControlFocus("Screeny","",$inp_Startzeit)
    send ("{LEFT}")

    [/autoit]

    Ich bin mir sicher, dass es dafür auch eine einfachere Lösung gibt, aber viele Wege führen nach Rom.

    Einmal editiert, zuletzt von hexpirator (15. Dezember 2014 um 07:51)