1 ضمیمه
بدست آوردن تاریخ و زمان از سرور
In Microsoft Windows NT 4.0, Windows 2000, Windows XP, and Windows Server 2003, you can obtain the date and time from a server by using the NET command line utility with the following syntax:
NET TIME \\ServerName
Note Specify the server name whose time you want to query in the following line:
server_name = "yourservername"
ببخشید که کد درست دیده نمیشود فایل ضمیمه را از انتهای همین پیام میتوانید دانلود کنید
یا به آدرس زیر مراجعه کنید
http://support.microsoft.com/default...b;en-us;249716
* 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 = "s-karkonan"
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("\\" + s-karkonan, 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