GetSystemTimeAsFileTime: Unterschied zwischen den Versionen

Aus API-Wiki
Wechseln zu: Navigation, Suche
Zeile 17: Zeile 17:
  
 
== Beispiel ==
 
== Beispiel ==
 
 
<vb>
 
<vb>
 
Private Type FILETIME
 
Private Type FILETIME
Zeile 27: Zeile 26:
 
                     ByRef lpSystemTimeAsFileTime As FILETIME)
 
                     ByRef lpSystemTimeAsFileTime As FILETIME)
  
Private Declare Sub CopyMemory Lib "kernel32.dll" _
+
Private Sub Command1_Click()
                    Alias "RtlMoveMemory" ( _
+
 
                    ByRef Dest As Any, _
+
    Dim FTime As FILETIME
                    ByRef Source As Any, _
+
 
                    ByVal cbCopy As Long)
+
    Call GetSystemTimeAsFileTime(FTime)
 +
    Debug.Print "High: " & FTime.dwHighDateTime & " Low: " & FTime.dwLowDateTime
 +
 
 +
End Sub
 +
</vb>
  
 +
== Beispiel für Anwendung mit Variant ==
 +
 +
<vb>
 +
Private Declare Sub GetSystemTimeAsFileTime Lib "kernel32.dll" ( _
 +
                    ByRef lpSystemTimeAsFileTime As Any)
 +
 +
' Die Deklaration von FILETIME wird hier nicht benötigt
 +
                   
 
Private Sub Command1_Click()
 
Private Sub Command1_Click()
  
Zeile 47: Zeile 58:
 
     V = CDec(0) ' Variant vorbereiten
 
     V = CDec(0) ' Variant vorbereiten
 
      
 
      
     Call GetSystemTimeAsFileTime(FTime)
+
     Call GetSystemTimeAsFileTime(ByVal (VarPtr(V) + 8))
    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-Mikrosekunden pro Tag
+
     C = 24# * 60 * 60 * 10000000 ' Anzahl der Zehntel-Microsekunden pro Tag
 
     Days = Int(V / C)
 
     Days = Int(V / C)
 
     V = V - Days * C
 
     V = V - Days * C
Zeile 76: Zeile 84:
  
 
End Sub
 
End Sub
</vb>
 
 
== Beispiel für Anwendung mit Variant==
 
<vb>
 
Private Declare Sub GetSystemTimeAsFileTime Lib "kernel32.dll" ( _
 
                    ByRef lpSystemTimeAsFileTime As Any)
 
 
Private Sub Command1_Click()
 
  
    Dim FTime As FILETIME
 
    Dim V As Variant
 
   
 
    V = CDec(0) ' Variant vorbereiten
 
   
 
    Call GetSystemTimeAsFileTime(ByVal (VarPtr(V) + 8))
 
 
    Debug.Print V ' V enthält jetzt den Wert des 64-Bit-Integers
 
 
End Sub
 
 
</vb>
 
</vb>
  

Version vom 15. Juni 2008, 12:28 Uhr

Ermittelt die aktuelle Zeit im Format der FILETIME-Struktur.

Deklarationen

<VB> Private Declare Sub GetSystemTimeAsFileTime Lib "kernel32.dll" ( _

                   ByRef lpSystemTimeAsFileTime As FILETIME)

' Alternative Deklaration zur Verwendung mit Variants vom Typ Decimal Private Declare Sub GetSystemTimeAsFileTime Lib "kernel32.dll" ( _

                   ByRef lpSystemTimeAsFileTime As Any)

</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 Sub Command1_Click()

   Dim FTime As FILETIME
  
   Call GetSystemTimeAsFileTime(FTime)
   Debug.Print "High: " & FTime.dwHighDateTime & " Low: " & FTime.dwLowDateTime

End Sub </vb>

Beispiel für Anwendung mit Variant

<vb> Private Declare Sub GetSystemTimeAsFileTime Lib "kernel32.dll" ( _

                   ByRef lpSystemTimeAsFileTime As Any)

' Die Deklaration von FILETIME wird hier nicht benötigt

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(ByVal (VarPtr(V) + 8))
   
   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. Unter XP ist die Zeitauflsöung 1µs.


Betriebssystem:

Die API-Funktion GetSystemTimeAsFileTime ist unter folgenden Betriebssystemen funktionsfähig:

  • Windows 95 und später.
  • Windows NT 3.1 und später