Hi,
ich wollte mal wissen ob und wie es möglich ist die serverzeit vom normalen Microsofrt Zeit server (time.microsoft.com) auszulesen, oder ob man irgendwie die automatische aktualisierung der uhrzeit im pc aktivieren kann?
lg phil-it
Hi,
ich wollte mal wissen ob und wie es möglich ist die serverzeit vom normalen Microsofrt Zeit server (time.microsoft.com) auszulesen, oder ob man irgendwie die automatische aktualisierung der uhrzeit im pc aktivieren kann?
lg phil-it
Wo hat das ganze was mit Autoit zu tun?
Wenn es Dir darum geht, mit AutoIt die Zeit von einem NTP-Server zu holen, dann habe ich hier ein Script (nicht von mir, nur archiviert):
#include <Date.au3>
$time = _TimeSync()
MsgBox(0, '', 'Rechnerzeit:' & @TAB & _NowCalc() & @CRLF & 'Atomzeit: ' & @TAB & $time)
;**************************************************************************************************
; Ab hier beginnen die Funktionen, zum holen der Zeit aus dem Internet (Quelle: http://www.autoitscript.com/forum/)
;**************************************************************************************************
Func _TimeSync()
Local $ntpServer = '1.de.pool.ntp.org'
UDPStartup()
Dim $socket = UDPOpen(TCPNameToIP($ntpServer), 123)
If @error <> 0 Then Return SetError(1)
Local $status = UDPSend($socket, MakePacket('1b0e010000000000000000004c4f434ccb1eea7b866665cb00000000000000000000000000000000cb1eea7b866665cb'))
;~ Local $status = UDPSend($socket, MakePacket('1b0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'))
If $status = 0 Then Return SetError(1)
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
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 = -(UnsignedToLong($TZinfo[1]) + (UnsignedToLong($TZinfo[4]) * ($TZinfo[0] < 2)) + (UnsignedToLong($TZinfo[7]) * ($TZinfo[0] = 2)))
Local $UTC = _DateAdd('s', $value, '1900/01/01 00:00:00')
Return _DateAdd('n', $TZoffset, $UTC)
EndIf
SetError(1)
EndFunc ;==>_TimeSync
;**************************************************************************************************
Func MakePacket($d)
Local $p = ''
While $d
$p &= Chr(Dec(StringLeft($d, 2)))
$d = StringTrimLeft($d, 2)
WEnd
Return $p
EndFunc ;==>MakePacket
;**************************************************************************************************
Func UnsignedHexToDec($n)
Local $ones = StringRight($n, 1)
$n = StringTrimRight($n, 1)
Return Dec($n) * 16 + Dec($ones)
EndFunc ;==>UnsignedHexToDec
;**************************************************************************************************
; http://support.microsoft.com/kb/189323
; Gibt Die Zahl mit Vorzeichen zurück.
; Bei Fehler (kleiner 0 oder größer MAXINT_4) wird der übergebene Wert zurückgegeben und @error auf 1 gesetzt.
Func UnsignedToLong($value)
Local Const $OFFSET_4 = 4294967296
Local Const $MAXINT_4 = 2147483647
If $value < 0 Or $value >= $OFFSET_4 Then Return SetError(1, 0, $value) ;' Overflow
If $value <= $MAXINT_4 Then
Return $value
Else
Return $value - $OFFSET_4
EndIf
EndFunc ;==>UnsignedToLong
;**************************************************************************************************
danke oscar es funktioniert, und es funktioniert!