To retrieve the current time from a NT server, we can use the
NetRemoteTOD (TimeOfDay) API function.
Note: NetRemoteTOD, as with a whole bunch of other API
functions, exist only under Windows NT environment. So this code will NOT
work in Windows 95 or 98.
Private Type TIME_OF_DAY_INFO
tod_elapsedt As Long
since 00:00:00, January 1, 1970.
tod_msecs As Long
from an arbitrary starting point _
(system reset).
tod_hours As Long
tod_mins As Long
tod_secs As Long
tod_hunds As Long
tod_timezone As Long
tod_tinterval As Long
clock. Each integral integer _
represents one ten-thousandth _
second (0.0001 second).
tod_day As Long
tod_month As Long
tod_year As Long
tod_weekday As Long
End Type
Private Declare Function apiNetRemoteTOD Lib "netapi32" _
Alias "NetRemoteTOD" _
(ByVal UncServerName As String, _
BufferPtr As Long) _
As Long
Private Declare Sub sapiCopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
(hpvDest As Any, _
hpvSource As Any, _
ByVal cbCopy As Long)
Public Function fGetServerTime(ByVal strServer As String) As String
On Error GoTo ErrHandler
Dim tSvrTime As TIME_OF_DAY_INFO, lngRet As Long
Dim lngPtr As Long
Dim strOut As String
Dim intHoursDiff As Integer
Dim intMinsDiff As Integer
If Not Left$(strServer, 2) = "\\" Then _
Err.Raise vbObjectError + 5000
strServer = StrConv(strServer, vbUnicode)
lngRet = apiNetRemoteTOD(strServer, lngPtr)
If Not lngRet = 0 Then Err.Raise vbObjectError + 5001
Call sapiCopyMemory(tSvrTime, ByVal lngPtr, Len(tSvrTime))
With tSvrTime
intHoursDiff = .tod_timezone \ 60
intMinsDiff = .tod_timezone Mod 60
strOut = .tod_month & "/" & .tod_day & "/" _
& .tod_year & " "
If .tod_hours > 12 Then
strOut = strOut & Format(.tod_hours - 12 - intHoursDiff, "00") _
& ":" & Format$(.tod_mins - intMinsDiff, "00") & ":" _
& Format$(.tod_secs, "00") & " PM"
Else
strOut = strOut & Format(.tod_hours - intHoursDiff, "00") _
& ":" & Format$(.tod_mins - intMinsDiff, "00") & ":" _
& Format$(.tod_secs, "00") & " AM"
End If
End With
fGetServerTime = strOut
ExitHere:
Exit Function
ErrHandler:
fGetServerTime = vbNullString
Resume ExitHere
End Function
|