Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Get Time From Server Syncronize Time With a Network Serv
Message
From
07/07/2006 13:48:39
 
 
To
07/07/2006 13:43:28
General information
Forum:
Visual FoxPro
Category:
Windows API functions
Environment versions
Visual FoxPro:
VFP 9 SP1
OS:
Windows XP SP2
Network:
Windows 2003 Server
Database:
MS SQL Server
Miscellaneous
Thread ID:
01134535
Message ID:
01134537
Views:
19
Well, that will teach me to search my own stuff. I already had a copy of this from when it was first put on msft's website! Sheesh! :o)

>I was working on converting some VB code using netremotetod to VFP code when I came across this handy code. Can't believe I didn't find it before doing a search - it's dated 2/24/2005.
>
>http://support.microsoft.com/kb/249716
>
>*--Change server_name to your server name
>
>* NetRemoteTOD's first parameter is a pointer to a
>* Unicode string that contains the server name.
>*
>* The second parameter is a pointer to a byte array
>* that contains a pointer to a TIME_OF_DAY_INFO structure
>
>* The '@' in front of the second parameter ('integer @')
>* dereferences this pointer to the byte array. Later in the
>* program, the program uses RTLMoveMemory() to
>* dereference the pointer this byte array contains
>DECLARE INTEGER NetRemoteTOD IN netapi32 STRING @,  INTEGER @
>
>* Note that the source address ('inbuffer') is declared as an integer,
>* to be consistent with the second parameter in NetRemoteTOD above.
>DECLARE INTEGER RtlMoveMemory IN win32api ;
>   STRING @outbuffer, ;
>   INTEGER inbuffer, ;
>   INTEGER bytes2copy
>
>
>* the TIME_OF_DAY_INFO structure
>* contains 11 DWORDs and 1 long, for
>* a total of 48 bytes. Therefore, tdbuffout is
>* initialized as:
>tdbuffout=REPLICATE(CHR(0), 48)
>tdbuffin = 0
>
>* the server name must be converted to Unicode
>* This API function behaves differently depending on
>* whether the target is a Win2000 computer or not -
>*
>* If Win2000, the servername must be preceded by "\\";
>* otherwise, it must not.
>
>server_name = "your_server_name"
>try_server_name = STRCONV(server_name, 5)
>rc = NetRemoteTOD(@try_server_name, @tdbuffin)
>IF rc = 0
>   * copy the contents pointed to by the address in tdbuffin to
>   * tdbuffout
>   =RtlMoveMemory(@tdbuffout, tdbuffin, 48)
>ELSE
>   * call failed. Therefore, the target is possibly a Win2000 box;
>   * Retry the function call, prepending "\\" to the server_name
>   try_server_name = STRCONV("\\" + server_name, 5)
>   rc = NetRemoteTOD(@try_server_name, @tdbuffin)
>   IF rc = 0
>      * copy the contents pointed to by the address in tdbuffin to
>      * tdbuffout
>      =RtlMoveMemory(@tdbuffout, tdbuffin, 48)
>   ELSE
>      ? "NetRemoteTOD() call failed. Return code is: ", rc
>      RETURN
>   ENDIF
>ENDIF
>
>* Pick out the appropriate parts of the TIME_OF_DAY_INFORMATION
>* buffer. This buffer will contain the UTC (Universal Coordinated
>* Time) of the server, and must be adjusted by TOD_TIMEZONE minutes
>* for the correct local time.
>
>* str2long() converts the DWORDS and LONGS from their string
>* representation back to numbers.
>tod_month = str2long(SUBSTR(tdbuffout, 37, 4))
>tod_day = str2long(SUBSTR(tdbuffout, 33, 4))
>tod_year = str2long(SUBSTR(tdbuffout, 41, 4))
>tod_hours = str2long(SUBSTR(tdbuffout, 9, 4))
>tod_mins = str2long(SUBSTR(tdbuffout, 13, 4))
>tod_secs = str2long(SUBSTR(tdbuffout, 17, 4))
>
>* Subtract this bias (times 60, to obtain seconds)
>* from the datetime value to obtain the
>* server's local time
>*
>* Alternatively, to convert the server's local time to
>* the workstation's local time, use the Win32 API function
>* SystemTimeToTzSpecificLocalTime, available under
>* Windows NT only.
>tod_timezone = str2long(SUBSTR(tdbuffout, 25, 4)) * 60
>
>serverdatetime = DATETIME(tod_year, tod_month, tod_day, ;
>   tod_hours, tod_mins, tod_secs)
>
>? "UTC time of server is: ", serverdatetime
>? "Server's local time is: ", serverdatetime - tod_timezone
>
>*************************************************************
>FUNCTION str2long
>*************************************************************
>* passed:  4-byte character string (m.longstr) in low-high ASCII format
>* returns:  long integer value
>* example:
>*	m.longstr = "1111"
>*	m.longval = str2long(m.longstr)
>
>PARAMETERS m.longstr
>
>PRIVATE i, m.retval
>
>m.retval = 0
>FOR i = 0 TO 24 STEP 8
>   m.retval = m.retval + (ASC(m.longstr) * (2^i))
>   m.longstr = RIGHT(m.longstr, LEN(m.longstr) - 1)
>NEXT
>RETURN m.retval
>
.·*´¨)
.·`TCH
(..·*

010000110101001101101000011000010111001001110000010011110111001001000010011101010111001101110100
"When the debate is lost, slander becomes the tool of the loser." - Socrates
Vita contingit, Vive cum eo. (Life Happens, Live With it.)
"Life is not measured by the number of breaths we take, but by the moments that take our breath away." -- author unknown
"De omnibus dubitandum"
Previous
Reply
Map
View

Click here to load this message in the networking platform