Nachfolgender Tipp zeigt, wie sich die Atomzeit über das Internet auslesen und die aktuelle Systemzeit entsprechend der Atomzeit aktualisieren lässt. Alles, was Sie hierzu brauchen, ist die Adresse eines Time-Servers, sowie das Winsock-Control. Als Time-Server nehmen wir in unserem Beispiel time.gov. Die Atomzeit wird hierbei in folgendem Format übermittelt: xxxxx yy-mm-dd hh:mm:ss xx x x xx.x UTC(NIST) *. Man braucht dann lediglich das Datum und die Uhrzeit zu extrahieren und die Systemzeit über die SetSystemTime-Struktur neu zu setzen. Grund für die Verwendung von SetSystemTime ist folgender: Wir brauchen uns nicht um Sommer- oder Winterzeit zu kümmern! Wir können die benötigte SYSTEMTIME-Struktur also direkt ohne weitere Berechnung mit den vom Timer-Server übermittelten Daten füllen. Um das nachfolgende Beispiel zu testen, starten Sie ein neues Projekt, fügen über Projekt - Komponenten das Microsoft Winsock-Control hinzu und ziehen es auf die Form. Über einen CommandButton soll dann die Atomzeit ermittelt und die Systemzeit entsprechend aktualisiert werden. Option Explicit ' benötigte API-Deklarationen: Systemzeit setzen Private Type SYSTEMTIME wYear As Integer wMonth As Integer wDayOfWeek As Integer wDay As Integer wHour As Integer wMinute As Integer wSecond As Integer wMilliseconds As Integer End Type Private Declare Function SetSystemTime Lib "kernel32" ( _ lpSystemTime As SYSTEMTIME) As Long ' Systembenachrichtigung Private Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long Private Const HWND_BROADCAST = &HFFFF& Private Const WM_TIMECHANGE = &H1E Private Sub Command1_Click() ' Verbindung zum TimerServer herstellen With Winsock1 .RemotePort = 13 .RemoteHost = "time.gov" .Connect End With End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) ' Timerserver schickt uns Daten Dim sData As String Dim vArray As Variant Dim ST As SYSTEMTIME ' Daten abrufen Winsock1.GetData sData ' Atomzeit werden in folgendem Format übermitteln: ' xxxxx yy-mm-dd hh:mm:ss xx x x xx.x UTC(NIST) * ' Datum und Uhrzeit aus den Daten extahieren vArray = Split(sData, " ") If IsDate(vArray(1)) Then ' SYSTEMTIME-Struktur mit der Atomzeit "füllen" With ST .wDay = Val(Right$(vArray(1), 2)) .wMonth = Val(Mid$(vArray(1), 4, 2)) .wYear = 2000 + Val(Left$(vArray(1), 2)) .wHour = Val(Left$(vArray(2), 2)) .wMinute = Val(Mid$(vArray(2), 4, 2)) .wSecond = Val(Right$(vArray(2), 2)) End With ' Neue Systemzeit "setzen" SetSystemTime ST ' System über Zeit-Änderung benachrichtigen SendMessage HWND_BROADCAST, WM_TIMECHANGE, 0&, 0& MsgBox "Systemzeit wurde aktualisiert!" End If ' Verbindung trennen Winsock1.Close End Sub Private Sub Winsock1_Error( _ ByVal Number As Integer, _ Description As String, _ ByVal Scode As Long, _ ByVal Source As String, _ ByVal HelpFile As String, _ ByVal HelpContext As Long, _ CancelDisplay As Boolean) ' Fehler ' Winsock schließen Winsock1.Close End Sub Mit diesem Tipp haben Sie ab sofort eine Funkuhr in Ihrem PC Dieser Tipp wurde bereits 36.777 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats Januar 2025 Dieter Otter Zeilen einer MultiLine-TextBox ermitteln (VB.NET) Dieser Zipp zeigt, wie man die Zeilen einer MultiLine-TextBox exakt so ermitteln kann, wie diese auch in der TextBox dargestellt werden. Neu! sevPopUp 2.0 Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |