• Offizieller Beitrag


    Aber trotzdem Danke, dass Du es ausprobiert hast. :rock:

    Ich bin für Verbesserungsvorschläge immer zu haben. :)

    Bei dem Test mit dem Font ist mir auch noch aufgefallen, dass dann die Sekundenanzeige gelegentlich flackert, was ein weiterer Grund gegen die Label-Variante ist.

    Aber von der Idee her wäre es nicht schlecht gewesen.

    • Offizieller Beitrag

    Man erstellt ein Fenster mit Style ($WS_POPUP) und ExStyle (BitOr($WS_EX_TOOLWINDOW, $WS_EX_LAYERED)):

    [autoit]

    $GUI = GUICreate("Test", 400, 160, $X, $Y, $WS_POPUP, BitOr($WS_EX_TOOLWINDOW, $WS_EX_LAYERED))

    [/autoit]

    $WS_POPUP sorgt für ein rahmenloses Fenster
    $WS_EX_TOOLWINDOW für "kein Eintrag in der Taskleiste"
    $WS_EX_LAYERED für Transparenz, wenn zusätzlich ein PIC-Control mit einem GIF als letztes Control erstellt wird
    Die Farbe des obersten, linken Pixels dieses GIFs ist dann die transparente Farbe

  • hiho,

    hab da so 2 ideen für dieses projekt, mal gucken ob sie umsetzenswert sind.

    so wie ich das sehe, kann man ja zz als wecker nur feste uhrzeiten bestimmen.
    ich fänd es auch sinnvoll, dass man zB auswählen kann, dass in x min, h geweckt werden soll (eier kochen, 3 h mittagsschlaf, ...)

    zusätzlich könnte man die wecker funktion so erweitern, dass unendlich viele weckzeiten eingestellt werden können.
    der eine braucht nur 1 wecker, der andere 3, wieder ein anderer 5.

    ich stelle mir das so vor, dass diese anzeige nur 1 mal erscheint, man seine einstellungen vornimmt, und diese dann im listview (o.ä.) angezeigt und wieder geladen/gelöscht werden können.

    • Offizieller Beitrag

    Für Deine 1. Idee gibt es bereits den Timer (Erinnerung in ...).
    Ein frei einstellbarer Timer (mit Slider) befindet sich auf meiner ToDo-Liste. Bis dahin mußt Du Dir die Werte entsprechend anpassen.

    Die 2. Idee habe ich mal auf die ToDo-Liste gesetzt. Obwohl ich mehr als 2 Weckzeiten eigentlich nicht benötige. Für individuelle Termine läuft bei mir Rainlendar.

    Zur Zeit bastel ich gerade an dem Vorschlag von Pee mit den Graphic-Controls.

  • Moin

    also bei mir läuft die atomuhr nicht richtig.
    Das script verstellt mir auf meinem Rechner (Arbeit) die Uhrzeit.
    Seltsamerweise auf meinem Rechner daheim funzt alles.

    Autoitversion ist die selbe.

    Jemand ne Idee woran das liegen könnte?

  • Hi Oscar,

    "verstellt die Uhrzeit" heisst: vor Programmstart ist die Uhr richtig gestellt, nach _SetAtomTime() ist die Uhr verstellt.
    die Abweichung beträgt 6-8 Stunden, ist unterschiedlich.

    Nicht funzen:
    1) OS WinXP SP2, Adminrechte, in der RouterFW ist Port 433 testweise offen (nachdem vorher schon nichts ging).
    2) OS Win2K, Adminrechte, no FW klappt auch nicht.
    3) beim 3ten Rechner wos funzt dieselbe Config wie beim ersten, WinXP SP2, Adminrechte und RouterFW _ohne_ Port 433

    liegt wahrscheinlich an _SetAtomTime()

    AutoIt-Version 3.2.12.0

    für den Spass noch meine persönlichen Ergänzungen :)

    Spoiler anzeigen
    [autoit]


    Global $doit=-1
    Global $stundenschlag=-1
    GLOBAL $MINLAST,$MINNOW,$HOURLAST,$HOURNOW,$SECLAST,$SECNOW

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

    #Region Endlosschleife
    If $H <> @HOUR Then ; Wenn sich die Stunden verändert haben,
    _SetClock($GUI_H1, $GUI_H2, @HOUR) ; dann die Control-IDs der Stunden an die Funktion _SetClock() übergeben
    $H = @HOUR ; Neuen Vergleichswert setzen
    if $stundenschlag=0 Then
    $stundenschlag=-1
    EndIf
    EndIf
    If $M <> @MIN Then ; Wenn sich die Minuten verändert haben,
    _SetClock($GUI_M1, $GUI_M2, @MIN) ; dann die Control-IDs der Minuten an die Funktion _SetClock() übergeben
    if $doit=0 Then
    $doit=-1

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

    EndIf
    $M = @MIN ; Neuen Vergleichswert setzen
    EndIf
    If $S <> @SEC Then ; Wenn sich die Sekunden verändert haben,
    _SetClock($GUI_S1, $GUI_S2, @SEC) ; dann die Control-IDs der Sekunden an die Funktion _SetClock() übergeben
    $MINLAST=$M

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

    $MINNOW=@MIN
    $HOURLAST=$H
    $HOURNOW=@HOUR
    $SECLAST=$S
    $SECNOW=@SEC

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

    if $doit<0 Then
    if $MINNOW="00" Then
    $doit=4;

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

    ElseIf $MINNOW="15" Then
    $doit=1;

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

    ElseIf $MINNOW="30" Then
    $doit=2;

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

    ElseIf $MINNOW="45" Then
    $doit=3;

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

    EndIf
    EndIf
    if $doit>0 Then
    _Play_Glocke()
    EndIf
    if ($doit<=0) Then
    if (@MIN="00" AND $doit=0) Then
    if $stundenschlag<0 Then
    $stundenschlag=@HOUR
    if $stundenschlag>12 Then $stundenschlag=$stundenschlag-12
    if $stundenschlag=00 Then $stundenschlag=12
    EndIf
    EndIf
    if $stundenschlag>0 Then
    _Play_Stunde()
    EndIf
    EndIf
    $S = @SEC ; Neuen Vergleichswert setzen
    EndIf

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

    Func _Play_Stunde()
    if Mod(@SEC,3)=0 Then
    Dim $glocke1=@ScriptDir&"\snd\glocken.wav"
    Dim $SoundID1 = _SoundOpen($glocke1)

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

    $stundenschlag=$stundenschlag-1
    _SoundPlay($SoundID1, 0)
    EndIf
    EndFunc
    Func _Play_Glocke()
    if Mod($SECNOW,2)=0 Then
    Dim $glocke=@ScriptDir&"\snd\new.wav"
    Dim $SoundID = _SoundOpen($glocke)
    $doit=$doit-1
    _SoundPlay($SoundID, 0)
    EndIf
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von Zippelmitz (5. Juni 2008 um 16:22)

    • Offizieller Beitrag

    Kannst Du bitte mal das folgende Script testen:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <ButtonConstants.au3>
    #include <DateTimeConstants.au3>
    #include <EditConstants.au3>
    #include <Date.au3>
    Global $ntpServer = "1.de.pool.ntp.org" ; NTP-Server zum synchronisieren der Uhrzeit über das Internet
    MsgBox(0,'', _TimeSync())

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

    Func _SummerTime() ; Abgeguckt bei der Funktion _Date_GetSummerTime.au3 von Bugfix (http://www.autoit.de)
    Local $aSummer[2], $ret = 0
    For $i = 25 To 31
    If _DateToDayOfWeekISO(@YEAR, 3, $i) = 6 Then
    $aSummer[0] = @YEAR & '/03/' & $i ; Anfang der Sommerzeit
    EndIf
    If _DateToDayOfWeekISO(@YEAR,10, $i) = 6 Then
    $aSummer[1] = @YEAR & '/10/' & $i ; Ende der Sommerzeit
    EndIf
    Next
    $ret = (_DateDiff('D',$aSummer[0], _NowCalc())>0) And (_DateDiff('D',$aSummer[1], _NowCalc())<0) ; Aktuelles Datum innerhalb der Sommerzeit?
    Return $ret ; dann ist $ret = 1, sonst 0
    EndFunc

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

    ;**************************************************************************************************
    ; Ab hier beginnen die Funktionen, zum holen der Zeit aus dem Internet (Quelle: http://www.autoitscript.com/forum/)
    ; Einige Änderungen von mir zwecks Anpassung an mein Script
    ;**************************************************************************************************
    Func _TimeSync()
    UDPStartup()
    Dim $socket = UDPOpen(TCPNameToIP($ntpServer), 123)
    If @error <> 0 Then
    Return SetError(1)
    EndIf
    ;$status = UDPSend($socket, MakePacket('1b0e010000000000000000004c4f434ccb1eea7b866665cb00000000000000000000000000000000cb1eea7b866665cb'))
    Local $status = UDPSend($socket, MakePacket('1b0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'))
    If $status = 0 Then
    Return SetError(1)
    EndIf
    Local $data = '', $a = TimerInit() ; Timer setzen, damit im Fehlerfall die Schleife abgebrochen wird
    While $data = ''
    $data = UDPRecv($socket, 100)
    sleep(100)
    If TimerDiff($a) > 1000 Then ExitLoop ; Wenn Timer > 1sek. (Fehler), dann Schleife verlassen
    WEnd
    If $data <> '' Then
    UDPCloseSocket($socket)
    UDPShutdown()
    Local $unsignedHexValue = StringMid($data,83,8); Extract time from packet. Disregards the fractional second.
    Local $value = UnsignedHexToDec($unsignedHexValue)
    Local $TZinfo = _Date_Time_GetTimeZoneInformation()
    Local $TZoffset = $TZinfo[1]*-(1+_Summertime()) ; Sommerzeit addieren
    Local $UTC = _DateAdd('s',$value,'1900/01/01 00:00:00')
    Sleep(100)
    Return _DateAdd('n',$TZoffset,$UTC)
    EndIf
    SetError(1)
    EndFunc
    ;**************************************************************************************************
    Func MakePacket($d)
    Local $p = ''
    While $d
    $p &= Chr(Dec(StringLeft($d,2)))
    $d = StringTrimLeft($d,2)
    WEnd
    Return $p
    EndFunc
    ;**************************************************************************************************
    Func UnsignedHexToDec($n)
    Local $ones = StringRight($n,1)
    $n = StringTrimRight($n,1)
    Return dec($n)*16+dec($ones)
    EndFunc
    ;**************************************************************************************************

    [/autoit]

    Wird dabei Datum und Uhrzeit korrekt ausgegeben?

    • Offizieller Beitrag

    Bitte dieses Script mal testen:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <ButtonConstants.au3>
    #include <DateTimeConstants.au3>
    #include <EditConstants.au3>
    #include <Date.au3>
    Global $ntpServer = "1.de.pool.ntp.org" ; NTP-Server zum synchronisieren der Uhrzeit über das Internet
    MsgBox(0,'', _TimeSync())

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

    Func _SummerTime() ; Abgeguckt bei der Funktion _Date_GetSummerTime.au3 von Bugfix (http://www.autoit.de)
    Local $aSummer[2], $ret = 0
    For $i = 25 To 31
    If _DateToDayOfWeekISO(@YEAR, 3, $i) = 6 Then
    $aSummer[0] = @YEAR & '/03/' & $i ; Anfang der Sommerzeit
    EndIf
    If _DateToDayOfWeekISO(@YEAR,10, $i) = 6 Then
    $aSummer[1] = @YEAR & '/10/' & $i ; Ende der Sommerzeit
    EndIf
    Next
    $ret = (_DateDiff('D',$aSummer[0], _NowCalc())>0) And (_DateDiff('D',$aSummer[1], _NowCalc())<0) ; Aktuelles Datum innerhalb der Sommerzeit?
    Return $ret ; dann ist $ret = 1, sonst 0
    EndFunc

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

    ;**************************************************************************************************
    ; Ab hier beginnen die Funktionen, zum holen der Zeit aus dem Internet (Quelle: http://www.autoitscript.com/forum/)
    ; Einige Änderungen von mir zwecks Anpassung an mein Script
    ;**************************************************************************************************
    Func _TimeSync()
    UDPStartup()
    Dim $socket = UDPOpen(TCPNameToIP($ntpServer), 123)
    If @error <> 0 Then
    Return SetError(1)
    EndIf
    ;$status = UDPSend($socket, MakePacket('1b0e010000000000000000004c4f434ccb1eea7b866665cb00000000000000000000000000000000cb1eea7b866665cb'))
    Local $status = UDPSend($socket, MakePacket('1b0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'))
    If $status = 0 Then
    Return SetError(1)
    EndIf
    Local $data = '', $a = TimerInit() ; Timer setzen, damit im Fehlerfall die Schleife abgebrochen wird
    While $data = ''
    $data = UDPRecv($socket, 100)
    sleep(100)
    If TimerDiff($a) > 1000 Then ExitLoop ; Wenn Timer > 1sek. (Fehler), dann Schleife verlassen
    WEnd
    If $data <> '' Then
    UDPCloseSocket($socket)
    UDPShutdown()
    Local $unsignedHexValue = StringMid($data,83,8); Extract time from packet. Disregards the fractional second.
    Local $value = UnsignedHexToDec($unsignedHexValue)
    Local $TZinfo = _Date_Time_GetTimeZoneInformation()
    Local $TZoffset = $TZinfo[1]*-(1+_Summertime()) ; Sommerzeit addieren
    Local $UTC = _DateAdd('s',$value,'1900/01/01 00:00:00')
    MsgBox(0,'', 'UTC = ' & $UTC & ' +' & $TZoffset & ' min.')
    Sleep(100)
    Return _DateAdd('n',$TZoffset,$UTC)
    EndIf
    SetError(1)
    EndFunc
    ;**************************************************************************************************
    Func MakePacket($d)
    Local $p = ''
    While $d
    $p &= Chr(Dec(StringLeft($d,2)))
    $d = StringTrimLeft($d,2)
    WEnd
    Return $p
    EndFunc
    ;**************************************************************************************************
    Func UnsignedHexToDec($n)
    Local $ones = StringRight($n,1)
    $n = StringTrimRight($n,1)
    Return dec($n)*16+dec($ones)
    EndFunc
    ;**************************************************************************************************

    [/autoit]
  • Systemuhr: 16:54
    Out: UTC = 2008/06/05 14:54:05 +- 8589934472 min.

    2te MsgBox: 08:22:05


    SummerTime() -> True ;)

    ich fahr mal heim, bin noch auf arbeit...
    komm gleich wieder on...

    Einmal editiert, zuletzt von Zippelmitz (5. Juni 2008 um 17:03)

  • Das Offset kann man auch so berechnen:

    Spoiler anzeigen
    [autoit]

    Local $TZinfo = _Date_Time_GetTimeZoneInformation()
    ; Local $TZoffset = $TZinfo[1]*-(1+_Summertime()) ; Sommerzeit addieren
    Local $TZoffset = -( $TZinfo[1]+ ($TZinfo[4]*($TZinfo[0]<2)) + ($TZinfo[7]*($TZinfo[0]=2)))

    [/autoit]


    Dann braucht man _Summertime nicht ;)

    @Zippelmitz: Poste doch mal die Ausgabe von:

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>
    Local $TZinfo = _Date_Time_GetTimeZoneInformation()
    ConsoleWrite("DST: " & $TZinfo[0] & @CRLF)
    ConsoleWrite("bias: " & $TZinfo[1] & @CRLF)
    ConsoleWrite("Standard-extra bias: " & $TZinfo[4] & @CRLF)
    ConsoleWrite("Summer-extra bias: " & $TZinfo[7] & @CRLF)

    [/autoit]