Hi an alle,
ich suche ein Befehl in C unter Windows mit dem ich System Datum ablesen und dann wieder neu setzen kann.
Mein BIOS hat eine Macke und Speicher immer ein falsches Jahr ab.
Vielen Dank im Voraus
Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge
die win32 api zu auslesen der systemzeit heist GetSystemTime(). die funktion zum setzen der systemzeit heisst SetSystemTime(). für GetSystemTime() braucht man unter nt, w2k und xp die entsprechenden rechte.
WM_HOPETHISHELPS
Danke Thomas für so eine schnelle Antwort.
Nach langem herumprobieren und suchen, komme ich mit GetSystemTime() nicht weiter.
Ich bräuchte ein kleines Beispiel, oder ein Hinweis, wo ich eins finden kann.
Die definition:
VOID GetSystemTime(
LPSYSTEMTIME lpSystemTime // system time
);
mit
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME, FAR *LPSYSTEMTIME;
d.h. z.b. so:
SYSTEMTIME st;
GetSystemTime(&st);
dann gilt:
1601 1 0 der rest ist selbsterklärend
mr.escape
Vielen Dank, es funktioniert wie geplant. Gibt es auch etwas vergleichbares zu Setsystemtime/Getsystemtime aber dass es mit DOS funktioniert (Programmaufruf schon im Autoexec)?
TIME /t
DATE /t
zum auslesen
und
TIME 12:00
DATE 31-12-02
zum setzen
mr.escape
Hi,
ich nehme an, hier handelt es sich um DOS-Befehle. In dem Umfeld kann ich leider nicht mit Variablen umgehen. Ich will nämlich die Zahlenwerte für Tag und Monat unverändert übernehmen und nur die Jahreszahl modifizieren.
Unter anderem dank Deine Hilfe kann ich die Korrektur machen (Listing sehe unten), sie braucht aber Windows (ist auch logisch - API)
#include "stdafx.h"
#include "windows.h"
void main()
{
SYSTEMTIME sm;
GetSystemTime(&sm);
sm.wYear=2003;
SetSystemTime(&sm);
}
Nachhinein habe ich festgestellt, dass es mir lieber wäre die Datumsänderung durchzuführen noch, bevor Windows hochgefahren wird, darum der Gedanke mit Autoexec und nicht wie jetzt mit Autotstart.
Folgendes programm als konsolenanwendung erstellen
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include
und in der registry als "service" eintragen (datei heisst c:\\date2003.exe)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices]
"Datum2003"="C:\\date2003.exe"
Wo und wie die backslashes kommen, bitte direkt nachschauen.
mr.escape