Uhrzeit aktualisieren

  • Ich möchte via AutoIT (innerhalb eines Scrips) die Systemzeit aktualisieren.

    Gibt es eine Webseite wo man das einfach auslesen kann?
    Ich bräuchte die exakte Zeit (PBT oder sowas).

    Evtl. ein Beispielskript, da ich mich mit der IE.au3 nicht so gut auskenne.

    Gruß

    • Offizieller Beitrag

    ExBerliner: Ist das nicht wieder mit Kanonen auf Spatzen geschossen? Sollte mit 1Registry-Eintrag und einem DLLCall machbar sein, auch wenn ich den Call gerade nicht kenne... Muss man halt ein bisschen googlen. Dafür würde ich nur ein Fremdprogarmm hernehmen, wenn es in AutoIt als nicht möglich erwiesen wäre...
    Aber eine Möglichkeit stellt es natürlich dar.

    peethebee

  • Der Tip mit dem DLLcall von Peethebee ist sicher interessant, aber mit den Win APIs kenn ich mich nicht aus - da weiß ich nicht mal nach was ich googlen müßte.

    Ja Fremdprogramme kann ich natürlich auch verwenden, aber wenn man das in eine eigene Anwendung integrieren möchte ist es auch wieder doof.

    So der Preis für die hilfreichste Antwort geht an gtaspider :klatschen:

    Das Programm dort hat nur ein paar kleine Schwierigkeiten,
    die erste ist, dass man für die richtige Zeitzonen den Registryeintrag ändern muss (Windows Systemsprache...) - und dann habe ich immer noch einen Fehler von einer Stunde (vermutlich Sommer/Winterzeitsache).

    Ich hab das Programm für meine Zwecke verbogen, so dass ich es in anderen Skripten verwenden kann:

    Spoiler anzeigen
    [autoit]


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

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

    Dim $a,$a1,$a3,$b,$b1,$b2,$recv, $g_IP

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

    $hour=2 ; GMT+1 +1Sommerwinterzeit
    $min=0
    $vz=1; Zeitverschiebung +1 oder -1 zu GMT
    $update=1 ;bei 1: die Systemuhr wird aktualisert

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

    $a1=($hour*3600+$min*60)*$vz ;Zeitverschiebung zum Server (=GMT) in Sekunden
    timeupdate()
    Exit

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

    Func timeupdate()
    ;Test auf Internetverbindung
    $a3 = ping("www.yahoo.com",1000)
    If $a3 = 0 Then
    MsgBox(0,"Info","Internet Access is Required to Sync Time")
    Return
    EndIf

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

    $IP = StringSplit('129.6.15.28,129.6.15.29,132.163.4.101,132.163.4.102,132.163.4.103,' _
    & '128.138.140.44,192.43.244.18,69.25.96.13,216.200.93.8,' _
    & '208.184.49.9,207.126.98.204,64.236.96.53,68.216.79.113',',')

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

    $IP_UDP =StringSplit("131.107.1.10,207.200.81.113",",") ; Server die mit UDP arbeiten

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

    $g_IP=$IP[1] ;Index bestimmt einen Server - Bei Bedarf UDP Zeiten auswählen

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

    tcpsync()
    EndFunc

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

    Func setpctime()
    $b1=StringSplit(StringLeft(_DateAdd ( 's', $a, "1900/01/01 00:00:00"),10),'/')
    $b2=StringSplit(StringRight(_DateAdd ( 's', $a, "1900/01/01 00:00:00"),8),':')
    _SetTime($b2[1],$b2[2],$b2[3])
    _SetDate($b1[3],$b1[2],$b1[1])
    EndFunc

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

    Func tcpsync()

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

    TCPStartUp()
    $socket = TCPConnect( $g_IP, 37 )
    If $socket = -1 Then
    MsgBox(0,"RFC868 via TCP Failed - trying UDP",$g_IP )
    udpsync()
    EndIf

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

    While 1
    If $socket > 0 Then
    $recv = TCPRecv( $socket, 512 )
    EndIf
    If $recv <> "" Then
    $a = Asc(StringMid($recv,1,1))*256^3+Asc(StringMid($recv,2,1))*256^2+Asc(StringMid($recv,3,1))*256+Asc(StringMid($recv,4,1))+$a1
    If $update=1 Then setpctime()
    ExitLoop
    EndIf
    WEnd
    TCPCloseSocket ( $socket )
    TCPShutdown ( )
    EndFunc

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

    Func udpsync()
    $a=UDPStartup()
    $socket = UDPOpen($g_IP, 37)
    If @error <> 0 Then Return
    $begin = TimerInit()
    While 1
    If $socket[1] > 0 Then
    UDPSend($socket, "")
    $recv = UDPRecv( $socket, 512 )
    EndIf
    If $recv <> "" Then
    $a = Asc(StringMid($recv,1,1))*256^3+Asc(StringMid($recv,2,1))*256^2+Asc(StringMid($recv,3,1))*256+Asc(StringMid($recv,4,1))+$a1
    If $update=1 Then setpctime()
    $socket[1] = 0
    ExitLoop
    EndIf
    If TimerDiff($begin)>5000 Then
    MsgBox(0,"RFC868 via UDP Failed","Please Choose Another Server and Try Again!")
    Return
    EndIf
    WEnd
    UDPCloseSocket($socket)
    UDPShutdown()
    EndFunc

    [/autoit]

    Vielen Dank für euere Unterstützung

    Einmal editiert, zuletzt von Unicom (3. Oktober 2006 um 13:04)