Probleme beim auslesen(ändern) der Systemzeit über WinApi
Übersicht

dubitatBetreff: Probleme beim auslesen(ändern) der Systemzeit über WinApi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich spiele im Moment ein wenig mit der WinApi rum und habe ein Problem mit der Systemzeit. Ich kriege einfach keine sinvollen Werte ausgelesen. Dokumentation der Befehle: Code: [AUSKLAPPEN] typedef struct _SYSTEMTIME {
WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds; } SYSTEMTIME, *PSYSTEMTIME; void WINAPI GetSystemTime( __out LPSYSTEMTIME lpSystemTime ); Mein BMax Code sieht daraufhin wie folgt aus (Ich kann mit dem Variablentyp WORD überhaupt nichts anfangen. In VisualBasic Beispielen sind Integer in der selben Struktur verwendet, weshalb ich das dann auch so gemacht habe: Code: [AUSKLAPPEN] Strict Extern "win32" Function win32_LoadLibrary:Int(lpFileName$z) = "LoadLibraryA@4" Function win32_GetProcAddress:Byte Ptr(hModule:Int, lpProcName$z) = "GetProcAddress@8" End Extern Function SetSystemTime() Local hModule:Int = win32_LoadLibrary("kernel32.dll") If hModule = 0 Then Return EndIf Type SystemTime Field wYear:Int Field wMonth:Int Field wDayOfWeek:Int Field wDay:Int Field wHour:Int Field wMinute:Int Field wSecond:Int Field wMilliseconds:Int End Type Type FileTimeDLL Field high:Int Field low:Int End Type Local GetDLLSystemTime(time:SystemTime) "win32"=win32_GetProcAddress(hModule, "GetSystemTime") Local GetDLLFileTime(time:SystemTime, time2:FileTimeDLL) "win32"=win32_GetProcAddress(hModule, "SystemTimeToFileTime") Local curr:SystemTime=New SystemTime GetDLLSystemTime(curr) Local currFile:FileTimeDLL=New FileTimeDLL GetDLLFileTime(curr,currFile) Print currFile.low End Function Ich bekomme weder eine vernünftige Ausgabe von curr.wYear,... noch von currFile.low. Letzlich ist mir das Datumsformat relativ egal, solange man damit irgendwie rechnen kann usw. Später soll die Systemzeit gesetzt werden können über das Programm. mfg dubitat |
||
Erare humanum est - Irren ist Menschlich |
![]() |
Suco-XBetreff: ..... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo.
Word = 2 byte. Short wäre also der richtige Datentyp. Ich habe es mal kurz ausgetestet und es klappt alles ohne Probleme: Code: [AUSKLAPPEN] Strict Extern "win32" Function GetLocalTime(structST:Byte Ptr) Function SetLocalTime(structST:Byte Ptr) End Extern Type SystemTime Field wYear:Short Field wMonth:Short Field wDayOfWeek:Short Field wDay:Short Field wHour:Short Field wMinute:Short Field wSecond:Short Field wMilliseconds:Short End Type Local test:SystemTime = New SystemTime GetLocalTime(test) Print "Jahr: "+test.wYear Print "Monat: "+test.wMonth Print "Tag: "+test.wDayOfWeek 'Mit den folgenden zwei Zeilen wird der Februar als Monat festgelegt. 'test.wMonth = 2 'SetLocalTime(test) Mir ist auch rätselhaft wieso du in diesem Fall mit LoadLibrary arbeitest!? Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schau dir mal http://www.willemer.de/informatik/cpp/timelib.htm an! Pub.StdC hat die Funktionen time_, localtime_ und strftime_ bereits implementiert (multiplattform). Mit localtime_ kannst du eine tm - Struktur füllen die so aufgebaut ist:
Code: [AUSKLAPPEN] struct tm {
int tm_sec; /* Sekunden - [0,61] */ int tm_min; /* Minuten - [0,59] */ int tm_hour; /* Stunden - [0,23] */ int tm_mday; /* Tag des Monats - [1,31] */ int tm_mon; /* Monat im Jahr - [0,11] */ int tm_year; /* Jahr seit 1900 */ int tm_wday; /* Tage seit Sonntag (Wochentag) - [0,6] */ int tm_yday; /* Tage seit Neujahr (1.1.) - [0,365] */ int tm_isdst; /* Sommerzeit-Flag */ } mfg olli |
||
vertex.dreamfall.at | GitHub |
dubitat |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Olli,
danke für deine prompte Hilfe. Kann ich damit auch irgendwie die Zeit setzen? Das ist der eigentlich einzige Grund, warum ich über die WindowsApi gehen wollte, weil ich die Systemzeit inkl. Datum ändern wollte. mfg dubitat |
||
Erare humanum est - Irren ist Menschlich |
dubitat |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Suco,
Ollis Antwort war schneller als die Benachrichtungsemail bei mir. Deine Lösung gefällt mir sehr gut und funktioniert super. Danke hierfür! (Ich habe vorhin nur Ollis Nachricht gelesen :S ) Wieso kann man als Datentyp nicht die Type Struktur angeben, sondern muss Byte Ptr angeben? mfg Lasse |
||
Erare humanum est - Irren ist Menschlich |
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
weil du damit einen Pointer auf den Struktureintrag angibst. und die WinAPI weiss dann, sie muss in dem Speicherbereich einschreiben. Damit sie die daten nicht zurückgeben muss | ||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
kann das iwer umschreiben, dass es auch unter win7 rennt? oder hat wer nen tipp, wo ich was dazu für win7 find? | ||
Gewinner der 6. und der 68. BlitzCodeCompo |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group