GetSystemTimeAsFileTime: Unterschied zwischen den Versionen
Aus API-Wiki
(Die Seite wurde neu angelegt: Hier steht noch nichts :-() |
|||
Zeile 1: | Zeile 1: | ||
− | + | Ermittelt die aktuelle Zeit im Format der [[FILETIME]]-Struktur. | |
+ | |||
+ | <VB> | ||
+ | Private Declare Sub GetSystemTimeAsFileTime Lib "kernel32.dll" ( _ | ||
+ | ByRef lpSystemTimeAsFileTime As FILETIME) | ||
+ | </VB> | ||
+ | |||
+ | ==Parameter== | ||
+ | ''lpSystemTimeAsFileTime'' Variable vom Typ [[FILETIME]], welche die Zahl der vergangenden Zehntel-Mikrosekunden beinhaltet, die seit dem 01.01.1601 vergangen sind | ||
+ | |||
+ | == Beispiel == | ||
+ | |||
+ | <vb> | ||
+ | Private Type FILETIME | ||
+ | dwLowDateTime As Long | ||
+ | dwHighDateTime As Long | ||
+ | End Type | ||
+ | |||
+ | Private Declare Sub GetSystemTimeAsFileTime Lib "kernel32.dll" ( _ | ||
+ | ByRef lpSystemTimeAsFileTime As FILETIME) | ||
+ | |||
+ | Private Declare Sub CopyMemory Lib "kernel32.dll" _ | ||
+ | Alias "RtlMoveMemory" ( _ | ||
+ | ByRef Dest As Any, _ | ||
+ | ByRef Source As Any, _ | ||
+ | ByVal cbCopy As Long) | ||
+ | |||
+ | Private Sub Command1_Click() | ||
+ | |||
+ | Dim FTime As FILETIME | ||
+ | Dim V As Variant | ||
+ | Dim C As Double | ||
+ | Dim Days As Double | ||
+ | Dim Hours As Long | ||
+ | Dim Minutes As Long | ||
+ | Dim Seconds As Long | ||
+ | Dim Frac As Double | ||
+ | Dim CurDate As Date | ||
+ | |||
+ | V = CDec(0) ' Variant vorbereiten | ||
+ | |||
+ | Call GetSystemTimeAsFileTime(FTime) | ||
+ | CopyMemory ByVal (VarPtr(V) + 8), FTime, 8 ' Um mit einem 64-Bit-Integer rechnen | ||
+ | ' zu können wird dieser in einen Variant | ||
+ | ' vom Typ Decimal übertragen. | ||
+ | |||
+ | C = 24# * 60 * 60 * 10000000 ' Anzahl der Zehntel-Microsekunden pro Tag | ||
+ | Days = Int(V / C) | ||
+ | V = V - Days * C | ||
+ | |||
+ | CurDate = DateAdd("d", Days, CVDate("01.01.1601")) | ||
+ | |||
+ | C = 60# * 60 * 10000000 | ||
+ | Hours = Int(V / C) | ||
+ | V = V - Hours * C | ||
+ | |||
+ | C = 60# * 10000000 | ||
+ | Minutes = Int(V / C) | ||
+ | V = V - Minutes * C | ||
+ | |||
+ | C = 10000000 | ||
+ | Seconds = Int(V / C) | ||
+ | Frac = V - Seconds * C ' Rest in Einheiten von 100ns | ||
+ | |||
+ | Frac = Frac / 10 ' Rest in µs | ||
+ | Frac = Frac / 1000 ' Rest in ms | ||
+ | |||
+ | Debug.Print CurDate & " " & TimeSerial(Hours, Minutes, Seconds) & " and " & Frac & " ms" | ||
+ | |||
+ | End Sub | ||
+ | </vb> | ||
+ | |||
+ | == Hinweise == | ||
+ | Unter W98 beschränkt sich die Genauigkeit der Zeitangabe auf Millisekunden. Ein Vorteil gegenüber der Funktion GetSystemTime ist nicht zu erkennen. | ||
+ | |||
+ | ==Betriebssystem:== | ||
+ | Die API-Funktion '''GetSystemTimeAsFileTime ''' ist unter folgenden Betriebssystemen funktionsfähig: | ||
+ | |||
+ | *Windows 95 und später. Bei Windows 9x ist die Zahl der Polygonpunkte auf ca 16000 beschränkt. | ||
+ | *Windows NT 3.1 und später | ||
+ | |||
+ | [[Kategorie:Kernel]] |
Version vom 10. Juni 2008, 15:44 Uhr
Ermittelt die aktuelle Zeit im Format der FILETIME-Struktur.
<VB> Private Declare Sub GetSystemTimeAsFileTime Lib "kernel32.dll" ( _
ByRef lpSystemTimeAsFileTime As FILETIME)
</VB>
Inhaltsverzeichnis
Parameter
lpSystemTimeAsFileTime Variable vom Typ FILETIME, welche die Zahl der vergangenden Zehntel-Mikrosekunden beinhaltet, die seit dem 01.01.1601 vergangen sind
Beispiel
<vb> Private Type FILETIME
dwLowDateTime As Long dwHighDateTime As Long
End Type
Private Declare Sub GetSystemTimeAsFileTime Lib "kernel32.dll" ( _
ByRef lpSystemTimeAsFileTime As FILETIME)
Private Declare Sub CopyMemory Lib "kernel32.dll" _
Alias "RtlMoveMemory" ( _ ByRef Dest As Any, _ ByRef Source As Any, _ ByVal cbCopy As Long)
Private Sub Command1_Click()
Dim FTime As FILETIME Dim V As Variant Dim C As Double Dim Days As Double Dim Hours As Long Dim Minutes As Long Dim Seconds As Long Dim Frac As Double Dim CurDate As Date V = CDec(0) ' Variant vorbereiten Call GetSystemTimeAsFileTime(FTime) CopyMemory ByVal (VarPtr(V) + 8), FTime, 8 ' Um mit einem 64-Bit-Integer rechnen ' zu können wird dieser in einen Variant ' vom Typ Decimal übertragen. C = 24# * 60 * 60 * 10000000 ' Anzahl der Zehntel-Microsekunden pro Tag Days = Int(V / C) V = V - Days * C CurDate = DateAdd("d", Days, CVDate("01.01.1601"))
C = 60# * 60 * 10000000 Hours = Int(V / C) V = V - Hours * C C = 60# * 10000000 Minutes = Int(V / C) V = V - Minutes * C C = 10000000 Seconds = Int(V / C) Frac = V - Seconds * C ' Rest in Einheiten von 100ns Frac = Frac / 10 ' Rest in µs Frac = Frac / 1000 ' Rest in ms Debug.Print CurDate & " " & TimeSerial(Hours, Minutes, Seconds) & " and " & Frac & " ms"
End Sub </vb>
Hinweise
Unter W98 beschränkt sich die Genauigkeit der Zeitangabe auf Millisekunden. Ein Vorteil gegenüber der Funktion GetSystemTime ist nicht zu erkennen.
Betriebssystem:
Die API-Funktion GetSystemTimeAsFileTime ist unter folgenden Betriebssystemen funktionsfähig:
- Windows 95 und später. Bei Windows 9x ist die Zahl der Polygonpunkte auf ca 16000 beschränkt.
- Windows NT 3.1 und später