CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 5 of 5
  1. #1
    Join Date
    May 1999
    Posts
    3,332

    to whom it may concern: getting remote time

    If you ever need to get the time from a remote computer you can use the following code sample:

    option Explicit
    private Declare Function NetRemoteTOD Lib "Netapi32.dll" ( _
    tServer as Any, pBuffer as Long) as Long

    private Declare Function NetApiBufferFree Lib "Netapi32.dll" (byval lpBuffer as Long) as Long
    private Type TIME_OF_DAY_INFO
    tod_elapsedt as Long
    tod_msecs as Long
    tod_hours as Long
    tod_mins as Long
    tod_secs as Long
    tod_hunds as Long
    tod_timezone as Long
    tod_tinterval as Long
    tod_day as Long
    tod_month as Long
    tod_year as Long
    tod_weekday as Long
    End Type
    private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination as Any, Source as Any, byval Length as Long)

    private Sub Command1_Click()
    Dim lRet as Long
    Dim tod as TIME_OF_DAY_INFO
    Dim lpbuff as Long
    Dim tServer() as Byte
    tServer = "yourServerNameGoesHere" & vbNullChar
    lRet = NetRemoteTOD(tServer(0), lpbuff)
    If lRet = 0 then
    CopyMemory tod, byval lpbuff, len(tod)
    ' tod.tod_day, tod.tod_month, tod.tod_year are the fields to look for.
    End If
    NetApiBufferFree lpbuff
    End Sub



    this works only under NT!


  2. #2
    Join Date
    May 1999
    Posts
    3,332

    Release 2

    to make this more handy, I rewrote it completely:
    place this code in a standard module

    option Explicit
    private Declare Function NetRemoteTOD Lib "Netapi32.dll" ( _
    tServer as Any, pBuffer as Long) as Long

    private Type SYSTEMTIME
    wYear as Integer
    wMonth as Integer
    wDayOfWeek as Integer
    wDay as Integer
    wHour as Integer
    wMinute as Integer
    wSecond as Integer
    wMilliseconds as Integer
    End Type
    private Type TIME_ZONE_INFORMATION
    Bias as Long
    StandardName(32) as Integer
    StandardDate as SYSTEMTIME
    StandardBias as Long
    DaylightName(32) as Integer
    DaylightDate as SYSTEMTIME
    DaylightBias as Long
    End Type
    private Declare Function GetTimeZoneInformation Lib "kernel32" (lpTimeZoneInformation as TIME_ZONE_INFORMATION) as Long

    private Declare Function NetApiBufferFree Lib "Netapi32.dll" (byval lpBuffer as Long) as Long
    private Type TIME_OF_DAY_INFO
    tod_elapsedt as Long
    tod_msecs as Long
    tod_hours as Long
    tod_mins as Long
    tod_secs as Long
    tod_hunds as Long
    tod_timezone as Long
    tod_tinterval as Long
    tod_day as Long
    tod_month as Long
    tod_year as Long
    tod_weekday as Long
    End Type
    private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination as Any, Source as Any, byval Length as Long)


    public Function getRemoteTOD(byval strServer as string) as date
    Dim result as date
    Dim lRet as Long
    Dim tod as TIME_OF_DAY_INFO
    Dim lpbuff as Long
    Dim tServer() as Byte
    tServer = strServer & vbNullChar
    lRet = NetRemoteTOD(tServer(0), lpbuff)
    If lRet = 0 then
    CopyMemory tod, byval lpbuff, len(tod)
    NetApiBufferFree lpbuff
    result = DateSerial(tod.tod_year, tod.tod_month, tod.tod_day) + _
    TimeSerial(tod.tod_hours, tod.tod_mins - tod.tod_timezone, tod.tod_secs)
    getRemoteTOD = result
    else
    Err.Raise Number:=vbObjectError + 1001, _
    Description:="cannot get remote TOD"
    End If
    End Function




    to use it in your program, call it like this:

    private Sub Command1_Click()
    Dim d as date
    d = getRemoteTOD("your server name goes here")
    MsgBox d
    End Sub



    the function returns a VB Date,
    it raises an error, if NetRemoteTOD failed
    it takes care of time zone information (although I am not totally sure that I handle it correctly. It worked in my environment, though.)


  3. #3
    Join Date
    May 1999
    Location
    Oxford UK
    Posts
    1,459

    Re: Release 2

    Another great piece of work - would you like this one posted on the site too ? (I've nearly finished the 'sql servers in domain' one for you).


    Chris Eastwood

    CodeGuru - the website for developers
    http://codeguru.developer.com/vb

  4. #4
    Join Date
    May 1999
    Posts
    3,332

    Re: Release 2

    Hi Chris,

    sure, you can post it.

    Regards,
    Lothar


  5. #5
    Join Date
    May 1999
    Location
    Oxford UK
    Posts
    1,459

    Re: Release 2

    Hi Lothar

    I've added it at :

    http://codeguru.developer.com/vb/articles/1915.shtml


    Chris Eastwood

    CodeGuru - the website for developers
    http://codeguru.developer.com/vb

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured