Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Windows Datum mit C ablesen und setzten.

Mandaryn / 7 Antworten / Baumansicht Nickles

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

bei Antwort benachrichtigen
thomas woelfer Mandaryn „Windows Datum mit C ablesen und setzten.“
Optionen

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

this posting contains no tpyos.
bei Antwort benachrichtigen
Mandaryn Nachtrag zu: „Windows Datum mit C ablesen und setzten.“
Optionen

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.

bei Antwort benachrichtigen
mr.escape Mandaryn „Windows Datum mit C ablesen und setzten.“
Optionen

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

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
Mandaryn Nachtrag zu: „Windows Datum mit C ablesen und setzten.“
Optionen

Vielen Dank, es funktioniert wie geplant. Gibt es auch etwas vergleichbares zu Setsystemtime/Getsystemtime aber dass es mit DOS funktioniert (Programmaufruf schon im Autoexec)?

bei Antwort benachrichtigen
mr.escape Mandaryn „Vielen Dank, es funktioniert wie geplant. Gibt es auch etwas vergleichbares zu...“
Optionen

TIME /t
DATE /t
zum auslesen
und
TIME 12:00
DATE 31-12-02
zum setzen

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
Mandaryn mr.escape „TIME /t DATE /t zum auslesen und TIME 12:00 DATE 31-12-02 zum setzen mr.escape“
Optionen

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.

bei Antwort benachrichtigen
mr.escape Mandaryn „Windows Datum mit C ablesen und setzten.“
Optionen

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
"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen