VB °æ (¾«»ªÇø)

·¢ÐÅÈË: student (earth), ÐÅÇø: VB
±ê  Ìâ: ÈçºÎʹÓàNetRemoteTOD À´´Ó·þÎñÆ÷»ñÈ¡ Date ºÍʱ¼äÐ
·¢ÐÅÕ¾: ¹þ¹¤´ó×϶¡Ïã (2001Äê11ÔÂ25ÈÕ19:17:50 ÐÇÆÚÌì), Õ¾ÄÚÐżþ

±¾ÎÄÐÅÏ¢ÊÊÓÃÓÚ:
Microsoft Visual FoxPro for Windows, version 6.0 :
Microsoft Windows NT 4.0
Microsoft Windows 2000 4.0
¸ÅÊö
ÔÚ Microsoft Windows NT 4.0 »ò Microsoft Windows 2000 ÖÐ, ¿ÉÒÔÏóÏÂÃæÒ»ÑùÓàN
ET ÃüÁîÀ´»ñÈ¡·þÎñÆ÷µÄÈÕÆÚºÍʱ¼ä:
NET TIME \\ServerName
Òª±ÜÃâÍâ¿Ç³ÌÐòµÄд¦ÀíµÄϵͳ¿ªÏú, ¿ÉÒÔÔÚ Windows NT ÏÂÒÔ±à³Ì·½Ê½ÓàNetRemote
TOD API º¯Êý»ñÈ¡ÕâЩÐÅÏ¢.
¸ü¶àÐÅÏ¢
×¢Òâ: ÔÚ Windows 2000 ÖÕ¶Ë·þÎñ³ÌÐòÏÂÕâЩ´úÂëÔÚ Visual FoxPro Öв»Äܹ¤×÷.
±£´æ²¢ÔËÐÐÒÔÏ´úÂë, ÔÚÒÔÏÂÐÐÖÐÖ¸¶¨ÄãÏë²éѯʱ¼äµÄ·þÎñÆ÷Ãû:
server_name = "yourservername"
* NetRemoteTOD µÄµÚÒ»¸ö²ÎÊýÊÇÒ»¸öÖ¸Ïò°üº¬·þÎñÆ÷ÃûµÄ
* Unicode ´®µÄÖ¸Õë.
*
* µÚ¶þ¸ö²ÎÊýÊÇÖ¸Ïò°üº¬Ò»¸öÖ¸Ïò TIME_OF_DAY_INFO ½á¹¹µÄÖ¸ÕëµÄÒ»¸ö×Ö½ÚÊý×éµÄÖ¸
Õë(Ì«ÞÖ¿ÚÁË,Ô­ÎļûÏÂ)
* a pointer to a byte array containing a pointer to a TIME_OF_DAY_INFO struc
ture
* µÚ¶þ¸ö²ÎÊýµÄ '@' Ç°×º ('integer @')
* ±íÃ÷¸Ã²ÎÊý°´Ö·´«µÝ. ÔÚ³ÌÐòµÄÉÔºó,
* ³ÌÐòʹÓàRTLMoveMemory() À´»ñÈ¡Õâ¸öÖ¸Ïò×Ö½ÚÊý×éµÄÖ¸ÕëµÄÄÚÈÝ
DECLARE INTEGER NetRemoteTOD IN netapi32 STRING @,  INTEGER @
* ×¢ÒâÔ´µØÖ· ('inbuffer') ¶¨ÒåΪ integer,
* ÓëÉÏÃæµÄ NetRemoteTOD µÄµÚ¶þ¸ö²ÎÊýÒ»ÖÂ.
DECLARE INTEGER RtlMoveMemory IN win32api ;
   STRING @outbuffer, ;
   INTEGER inbuffer, ;
   INTEGER bytes2copy
* TIME_OF_DAY_INFO ½á¹¹°üÀ¨
* 11 ¸ö DWORD ºÍ 1 ¸ö long,
* ¹² 48 ×Ö½Ú, Òò´Ë tdbuffout
* ³õʼ»¯Îª:
tdbuffout=REPLICATE(CHR(0), 48)
tdbuffin = 0
* ·þÎñÆ÷Ãû±ØÐëת»»Îª Unicode
* ¸Ã API º¯ÊýÐÐΪµÄ²îÒìÈ¡¾öÓÚ
* Ä¿±ê¼ÆËã»úÊDz»ÊÇÒ»¸ö Win2000 »úÆ÷ -
*
* Èç¹ûÊÇ Win2000, Ôò·þÎñÆ÷Ãû±ØÐëÇ°ÃæÓР"\\";
* ·ñÔò, ¾Í²»ÄÜÓÐ.
server_name = "yourservername"
try_server_name = STRCONV(server_name, 5)
rc = NetRemoteTOD(@try_server_name, @tdbuffin)
IF rc = 0
   * ¸´ÖÆ tdbuffin ËùÖ¸ÏòµÄµØÖ·ÖеÄÄÚÈݵ½ tdbuffout
   =RtlMoveMemory(@tdbuffout, tdbuffin, 48)
ELSE
   * µ÷ÓÃʧ°Ü, Òò´ËÄ¿±ê¿ÉÄÜÊÇÒ»¸ö Win2000 ¿ò;
   * ÖØÊÔº¯Êýµ÷ÓÃ, Ìí¼Óǰ׺ "\\" µ½ server_name
   try_server_name = STRCONV("\\" + server_name, 5)
   rc = NetRemoteTOD(@try_server_name, @tdbuffin)
   IF rc = 0
      * ¸´ÖÆ tdbuffin ËùÖ¸ÏòµÄµØÖ·ÖеÄÄÚÈݵ½ tdbuffout
      =RtlMoveMemory(@tdbuffout, tdbuffin, 48)
   ELSE
      ? "NetRemoteTOD() call failed. Return code is: ", rc
      RETURN
   ENDIF
ENDIF
* Ê°È¡³ö TIME_OF_DAY_INFORMATION »º´æÖеÄÊʵ±²¿·Ö.
* ¸Ã»º´æ½«°üº¬ÓзþÎñÆ÷µÄ UTC (È«Çò×ù±êʱ¼ä) of the server,
* ¶ÔÓÚÕýÈ·µÄ±¾µØÊ±¼ä,ÇÒ±ØÐëµ÷Õûµ½ TOD_TIMEZONE ·Ö.
* str2long() ×ª»» DWORDS ºÍ LONGS ´Ó´®±íʾµ½ÊýÖµ.
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))
* ¼õÈ¥Õâ¸ö»ùÏß (³ËÒÔ 60, »ñµÃÃëÊý)
* À´´Ó datetime ÖµÀ´»ñµÃ·þÎñÆ÷µÄ±¾µØÊ±¼ä
*
* ¿ÉÑ¡µØ, Òª×ª»»·þÎñÆ÷µÄ±¾µØÊ±¼äµ½¹¤×÷Õ¾µÄ±¾µØÊ±¼ä, Ê¹ÓàWin32 API º¯Êý
* SystemTimeToTzSpecificLocalTime, ¸Ãº¯Êý½ö¿ÉÓÃÓÚ Windows NT.
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
*************************************************************
* ²ÎÊý: µÍ¸ß ASCII ¸ñʽµÄ 4 ×Ö½Ú×Ö·û´® (m.longstr)
* ·µ»Ø: ³¤ÕûÐÍÖµ
* Ê¾Àý:
* 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
Ô¶³Ì UTC Ê±¼äºÍ·þÎñÆ÷µÄ±¾µØÊ±¼ä³öÏÖÔÚ Visual FoxPro ×ÀÃæÉÏ.
²Î¿¼
MSDN ÖеĠ"NetRemoteTOD" ºÍ "RTLMovememory" Ö÷Ìâ

--
¡ù À´Ô´:¡¤¹þ¹¤´ó×϶¡Ïã bbs.hit.edu.cn¡¤[FROM: 202.118.236.168]
[°Ù±¦Ïä] [·µ»ØÊ×Ò³] [Éϼ¶Ä¿Â¼] [¸ùĿ¼] [·µ»Ø¶¥²¿] [Ë¢ÐÂ] [·µ»Ø]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
Ò³ÃæÖ´ÐÐʱ¼ä£º2.081ºÁÃë