richtiger contdown

  • [autoit]

    $pos_a = (@desktopwidth)-120
    $pos_b = (@desktopheight)-60

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

    $zeit_a = ((90*60))
    $zeit_b = $zeit_a

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

    For $var=1 to $zeit_a
    ToolTip("noch "&($zeit_b)/60 &" Minuten" &,$pos_a,$pos_b)
    $zeit_b -= 1
    Sleep(1000)
    Next
    ToolTip("")

    [/autoit]

    aber jetzt wird z.B. angezeigt "noch 89,333333 Minuten"...
    ich will, dass da steht "noch 89 Minuten 20 Sekunden" oder "noch 89:20 Minuten"

    • Offizieller Beitrag

    Hi,

    hier erstmal ein genereller counter :

    Spoiler anzeigen
    [autoit]

    #include<Date.au3>
    HotKeySet("{esc}", "end")
    ; "YYYY/MM/DD[ HH:MM:SS]"
    While 1
    ToolTip("Date" & @CRLF & "============" & @CRLF & _counter("2006/10/12", "18:00:00") & " left", _
    @DesktopWidth - 100, 30)
    Sleep(1)
    WEnd

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

    ; "YYYY/MM/DD[ HH:MM:SS]"
    Func _counter($s_Date, $s_time)
    If _DateIsValid($s_Date & " " & $s_time) Then
    Local $NumberOfSeconds = _DateDiff("s", _NowCalc(), $s_Date & " " & $s_time)
    Return StringFormat("Days = %.02d" & @CRLF & "Hours = %.02d" & @CRLF & "Min = %.02d" & @CRLF & "Sec = %.02d" & @CRLF & _
    "Msec = %.03d", $NumberOfSeconds / 86400, Mod($NumberOfSeconds / 3600, 24), Mod(($NumberOfSeconds / 60), 60), _
    Mod($NumberOfSeconds, 60), 1000 - _MSec())
    Else
    Return -1
    EndIf
    EndFunc ;==>_counter

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

    Func _MSec()
    Local $stSystemTime = DllStructCreate('ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort')
    DllCall('kernel32.dll', 'none', 'GetSystemTime', 'ptr', DllStructGetPtr($stSystemTime))
    $sMilliSeconds = StringFormat('%03d', DllStructGetData($stSystemTime, 8))
    $stSystemTime = 0
    Return $sMilliSeconds
    EndFunc ;==>_MSec

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

    Func end()
    Exit (0)
    EndFunc ;==>end

    [/autoit]

    Du willst ja nur Minuten runterzählen. Das muss ich dann eben noch schnell basteln. :teufel:

    So long,

    Mega

  • danke schon mal,
    hab aber noch vergessen zu sagen, dass das programm, nachdem der pc eingeschaltet wurde, von 90min runterzählen sollte um dann irgendetwas zu machen (herunterfahren, programm ausführen etc.)
    in dem skript oben geht es afaik nur darum, auf ein bestimmtes datum runter zu ticken :musik2: ;)

    trotzdem danke für die antwort, vllt kann ich was aus dem skript oben für mein programm verwenden

    Einmal editiert, zuletzt von alexirsi (18. Oktober 2006 um 16:52)

    • Offizieller Beitrag

    Hi,

    okay. Du suchst eher dies:

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>
    If _countDown("00:00:10") Then MsgBox(0, "CountDown", "Jipi") ; SS:MM:SS

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

    Func _countDown($countdown)
    $begin = TimerInit()

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

    Local $string = ""

    While 1
    $start = Round(TimerDiff($begin) / 1000)

    $countUp = StringFormat("%.02d" & ":" & "%.02d" & ":" & "%.02d", _
    Mod($start / 3600, 24), Mod(($start / 60), 60), Mod($start, 60))

    $sec = _DateDiff('s', "2006/01/01 " & $countUp, "2006/01/01 " & $countdown)
    If $sec = 0 Then Return 1

    $string = StringFormat("%.02d" & ":" & "%.02d" & ":" & "%.02d", _
    Mod($sec / 3600, 24), Mod(($sec / 60), 60), Mod($sec, 60))

    ToolTip($string)
    Sleep(100)
    WEnd
    EndFunc ;==>_countDown

    [/autoit]

    Ich weiß ist etwas umständlich aber sollte gehen. :hammer:

    So long,

    Mega

    • Offizieller Beitrag

    Hallo!

    Letztens war mir langweilig und da hab ihc auch ein counter gebastelt mit ganz witzigen zusatz funktionen =) :

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <date.au3>

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

    $counter = "20:30";entweder eine uhrzeit hier eingeben (z.b. 20:30) oder eine zahl,wie viele sekunden (z.b. 10)
    $realtime = 1;Das anzeige format von $counter (also ob uhrzeit oder sekunde) 1=Uhrzeit 0=Sekunde
    $timeart = "s";Hier (wenn $realtime = 0) eingeben ob sekunde (s) minute (n) oder stunde (h)!
    $sleep = 50;Das Sleep (auf 50 ms damit nich zuviel cpu last..
    $shutdown = 0;Wenn der countown fertig ist herunterfahren? (ja=1 nein=0
    $beep = 1;Beepen wenn er fertig ist?

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

    $Form1 = GUICreate("", @DesktopWidth+20,@DesktopHeight+20, 0, 0, BitOR($WS_SYSMENU,$WS_POPUPWINDOW,$WS_BORDER))

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

    GUISetBkColor(0x000000)
    $lab = GUICtrlCreateLabel("00:"&$counter&":00:00", 300, 370, 800, 230)
    GUICtrlSetFont(-1, 70, 400, 0, "hooge 05_53")
    GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlSetBkColor(-1, 0x000000)

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

    $oldtime = @YEAR&"/"&@MON&"/"&@MDAY&" "&@HOUR&":"&@MIN&":"&@SEC
    $oldsec = @SEC

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

    If $realtime = 0 Then $oldtime = _DateAdd($timeart,$counter,$oldtime)
    $oldtime = StringSplit($oldtime," ")
    $olddate = $oldtime[1]
    $oldtime = $oldtime[2]
    If $realtime Then $oldtime = $counter
    GUISetState(@SW_SHOW)
    ;~ WinSetOnTop($Form1,"",1)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case Else
    $time = _GetTime($olddate,$oldtime)
    GUICtrlSetData($lab,$time)
    ;~ ControlSetText($Form1,"",$lab,$time)
    ;~ ToolTip( _DateDiff("s",$olddate&" 00:00:00",$olddate&" "&StringTrimRight($time,StringInStr($time,":")+1)))
    If _DateDiff("s",$olddate&" 00:00:00",$olddate&" "&StringTrimRight($time,StringInStr($time,":")+1)) = 0 Then
    GUICtrlSetData($lab,"00:00:00:000")
    ;~ Sleep(800)
    If $beep Then Beep()
    GUIDelete()
    If $shutdown Then
    Shutdown(1)
    TrayTip("","Shutdown",5)
    ExitLoop
    Else
    MsgBox(16,"","Time Passed!")
    Exit
    EndIf
    EndIf
    Sleep($sleep)
    EndSwitch
    WEnd

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _GetTime($Date, $time)
    If _DateIsValid($Date & " " & $time) Then
    Local $NumberOfSeconds = _DateDiff("s", _NowCalc(), $Date & " " & $time)

    ;~ If StringFormat("%.02d",$NumberOfSeconds / 86400) < 2 Then GUISetBkColor(0xff0000)
    Return StringFormat("%.02d:%.02d:%.02d:%.03d", Mod($NumberOfSeconds / 3600, 24), Mod(($NumberOfSeconds / 60), 60), _
    Mod($NumberOfSeconds, 60), 1000 - _MSec())
    Else
    Return -1
    EndIf
    EndFunc ;==>_counter

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

    Func _MSec()
    Local $stSystemTime = DllStructCreate('ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort')
    DllCall('kernel32.dll', 'none', 'GetSystemTime', 'ptr', DllStructGetPtr($stSystemTime))
    $sMilliSeconds = StringFormat('%03d', DllStructGetData($stSystemTime, 8))
    $stSystemTime = 0
    Return $sMilliSeconds
    EndFunc ;==>_MSec

    [/autoit]


    Mfg Spider

    • Offizieller Beitrag

    so ?

    [autoit]

    $countdowntime = 5000 ; z.B. durch Userabfrage
    SplashTextOn("Countdown", $countdowntime/1000 & " sec")
    For $i = $countdowntime To 0 Step -1000
    SplashTextOn("Countdown", $i/1000 & " sec")
    Sleep(1000)
    Next
    SplashOff()

    [/autoit]

    Oder möchtest du, dass eine Uhrzeit runtergezählt wird:
    15:27:59
    15:27:58
    15:27:57
    ...

    dazu ist in den vorigen Beiträgen alles gesgt.

    • Offizieller Beitrag

    Oder mit _IsPressed()

    [autoit]


    #Include <Misc.au3>
    $countdowntime = 15000 ; z.B. durch Userabfrage
    SplashTextOn("Countdown", $countdowntime/1000 & " sec")
    For $i = $countdowntime To 0 Step -1000
    SplashTextOn("Countdown", $i/1000 & " sec")
    If _IsPressed("78") Then Exit; F9
    Sleep(1000)
    Next
    SplashOff()

    [/autoit]
  • hiho,

    da ich die letzten tage frei hatte, konnte ich hier leider nicht weiterarbeiten.
    aber mein script nähert sich dem ende (freut euch *g*) und ich versuche jetzt diesen timer zu beenden.

    also per hotkeyset erstelle ich eine neue funktion.
    dann habe ich den countdown in einer funktion.

    wenn jetzt der "hotbutton" gedrückt wird, soll die countdown funktion beendet werden.
    und da liegt zZ mein prob. wie beende ich mit einer function eine andere function?

    also exit klappt super, aber da geht halt das ganze script aus. exitloop geht nur bei der eigenen function, 2 funktionen ineinander scheinen auch nicht zu gehen (fehlt immer wend) ....

    Spoiler anzeigen
    [autoit]


    HotKeySet("{space}", "_close")

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

    $Countdown = "00:00:20"
    If _countDown($Countdown) Then MouseClick("left", 1157, 191)

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

    ;Countdown Function

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

    Func _countDown($countdown)
    $begin = TimerInit()
    Local $string = ""
    While 1
    $start = Round(TimerDiff($begin) / 1000)
    $countUp = StringFormat("%.02d" & ":" & "%.02d" & ":" & "%.02d", _
    Mod($start / 3600, 24), Mod(($start / 60), 60), Mod($start, 60))
    $sec = _DateDiff('s', "2006/01/01 " & $countUp, "2006/01/01 " & $countdown)
    If $sec = 0 Then Return 1
    $string = StringFormat("%.02d" & ":" & "%.02d" & ":" & "%.02d", _
    Mod($sec / 3600, 24), Mod(($sec / 60), 60), Mod($sec, 60))
    ToolTip($string)
    Sleep(100)
    WEnd
    EndFunc

    func _close()
    ExitLoop ;geht natürlich nicht
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    HI,

    Spoiler anzeigen
    [autoit]

    #include<Date.au3>
    #include <Misc.au3>

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

    $dll = DllOpen("user32.dll")

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

    HotKeySet("{ESC}", "_close")

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

    $Countdown = "00:00:20"
    If _countDown($Countdown) Then MouseClick("left", 1157, 191)

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

    ;Countdown Function

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

    While 1
    Sleep(100)
    WEnd

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

    Func _countDown($Countdown)
    $begin = TimerInit()
    Local $string = ""
    While 1
    $start = Round(TimerDiff($begin) / 1000)
    $countUp = StringFormat("%.02d" & ":" & "%.02d" & ":" & "%.02d", _
    Mod($start / 3600, 24), Mod(($start / 60), 60), Mod($start, 60))
    $sec = _DateDiff('s', "2006/01/01 " & $countUp, "2006/01/01 " & $Countdown)
    If $sec = 0 Then Return 1
    $string = StringFormat("%.02d" & ":" & "%.02d" & ":" & "%.02d", _
    Mod($sec / 3600, 24), Mod(($sec / 60), 60), Mod($sec, 60))
    ToolTip($string)
    Sleep(100)
    If _IsPressed("20", $dll) Then
    ; MsgBox(0, "_IsPressed", "End Key Pressed")
    ExitLoop
    EndIf
    WEnd
    EndFunc ;==>_countDown
    DllClose($dll)

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

    Func _close()
    DllClose($dll)
    Exit ;geht natürlich nicht
    EndFunc ;==>_close

    [/autoit]

    So long,

    Mega

  • danke th.meger, das "geht" =)

    leider nicht ganz wie erwarte. zum einem bleibt der tooptip auf dem bildschirm (was nicht so schlimm wäre), zum anderen bricht er zwar den countdown ab, setzt das script aber nicht weiter fort.

    das prob ist, ich muss eine inet-site laden, mit den iefunctions wartet er aber nicht, bis fertig geladen wurde, da nur ein teil der site aktualisiert wird.
    also nutze ich sleep und nehm nen großzügigen wert.

    sollte die site nun schon nach 5 statt 20 sek fertig sein, soll man den timer mit einem tastendruck abbrechen können und das script läuft danach wie gewohnt weiter.
    das hier leider (noch) nicht der fall =/

    PS: ich glaube es hat sich erledigt =)

    so geht es

    Spoiler anzeigen
    [autoit]

    #include<Date.au3>
    #include <Misc.au3>

    $dll = DllOpen("user32.dll")

    $Countdown = "00:00:10"
    If _countDown($Countdown) Then ToolTip("")

    MouseClick("left", 1240, 188)

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

    ;Countdown Function

    Func _countDown($Countdown)
    $begin = TimerInit()
    Local $string = ""
    While 1
    $start = Round(TimerDiff($begin) / 1000)
    $countUp = StringFormat("%.02d" & ":" & "%.02d" & ":" & "%.02d", _
    Mod($start / 3600, 24), Mod(($start / 60), 60), Mod($start, 60))
    $sec = _DateDiff('s', "2006/01/01 " & $countUp, "2006/01/01 " & $Countdown)
    If $sec = 0 Then Return 1
    $string = StringFormat("%.02d" & ":" & "%.02d" & ":" & "%.02d", _
    Mod($sec / 3600, 24), Mod(($sec / 60), 60), Mod($sec, 60))
    ToolTip($string)
    Sleep(1 )
    If _IsPressed("1b", $dll) Then
    ExitLoop
    EndIf
    WEnd
    EndFunc ;==>_countDown
    DllClose($dll)

    [/autoit]
  • vllt hab ich auch im code was falsch, und denke nur dass er die seite nicht zuende lädt.
    wenn du mir helfen magst, poste ich es gerne nochmal.

    mal gucken ob ichs aufs wesentliche reduzieren kann *hehe*

    Spoiler anzeigen
    [autoit]

    #include <IE.au3>
    $sUrl = "Link1"
    $LinkProdukte = "Link2"

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

    ;starte ie-instanz
    $oIE = _IECreate ($sUrl,0,1,1,0)
    $oHWND = _IEPropertyGet($oIE, "hwnd")
    WinSetState ($oHWND, "", @SW_MAXIMIZE )

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

    ;...
    ;loginseite wird geladen (bis sie komplett fertig ist)
    ;anschließend wird User/Pw eingegeben und abgeschickt
    ;es läd sich eine neue seite (bis zuende)
    ;dann kommt

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

    ;lade neue seite
    _IENavigate($oIE, $LinkProdukte)

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

    ;_IELoadWait($oIE) hat auch nix gebracht, aber die funktion ist auch in _IENavigate enthalten, so dass ich sie eigentlich rausgelassen habe

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

    ;...
    ;hier soll auf was geklickt werden, dass aber erst da ist, wenn die seite komplett geladen wurde
    ;befehl wird aber sofort ausgeführt

    [/autoit]

    wie die seite aufgebaut ist, sieht man hier, falls es doch was damit zu tun haben könnte.
    oder liegt es daran, dass sich nach der loginseite eine neue seite aufbaut die nichtmehr $oIE ist? wobei er ja da noch wartet, bis sie fertig geladen ist.