FoxPress – Mayo 2000

 

La hora del Servidor

 

         

       Por Gotzon (alias GEO)(Sacado del FoxBoard)

http://www.fpress.com/

 

 

Puede ser que en alguna ocasión te interese saber la hora del Servidor de una red local para unificar todos los relojes de tus aplicaciones Fox con la hora del Servidor. Una de las mejores formas es usar un COM en el servidor que con la función TIME() te devuelva la hora. No obstante, si quieres usar las funciones del API de Win podrías escribir esto:

 

 

* tcserver es el nombre del servidor con el

* que sincronizamos (i.e. \\PC1)
* lparameter tcserver

*/ declaramos las funciones a utilizar
declare integer NetRemoteTOD in ;

netapi32 STRING@, INTEGER@

 

declare RtlMoveMemory IN WIN32API as ;

   CopyMemory STRING@, INTEGER, INTEGER

declare integer SetSystemTime in ;

kernel32 STRING@

* conversión a UNICODE
lcserver = strconv(strconv(tcserver,1),5)+chr(0)
lnptr = 0
lctimeofday = replicate(chr(0),48)
lcsystemtime = space(0)

*/ tomamos la hora
nres = NetRemoteTOD(@lcserver,@lnptr)

local lnyear, lnmonth, lndayofweek, lnday,;

 lnhour, lnminute, lnsecond,;

 lnmillsecond
if nres = 0 then

=CopyMemory(@lctimeofday,;

 @lnptr, 48)
lnyear = DWordtoNum(substr(;

 lctimeofday,41,4))
lnmonth = DWordtoNum(substr(;

 lctimeofday,37,4))
lndayofweek = DWordtoNum(substr(;

 lctimeofday,45,4))
lnday = DWordtoNum(substr(;

 lctimeofday,33,4))
lnhour = DWordtoNum(substr(;

 lctimeofday,9,4))
lnminute = DWordtoNum(substr(;

 lctimeofday,13,4))
lnsecond = DWordtoNum(substr(;

lctimeofday,17,4))
lcsystemtime =
  NumtoWord(lnyear)+;

NumtoWord(lnmonth)+;

NumtoWord(lndayofweek)+;

NumtoWord(lnday) + ;

NumtoWord(lnhour)+;

NumtoWord(lnminute)+;

NumtoWord(lnsecond)+;

NumtoWord(0)

 

*/ colocamos la hora en el equipo local
nres = SetSystemTime(@lcsystemtime)
return nres # 0

else

? "No está trabajando" + space(5) +;

   transform(nres)
endif
return

***************************
function DwordToNum
lparameter tcDWORD
local ln0,ln1,ln2,ln3
ln0=asc(subs(tcDWORD,1,1))
ln1=asc(subs(tcDWORD,2,1)) * (256)
ln2=asc(subs(tcDWORD,3,1)) * (256^2)
ln3=asc(subs(tcDWORD,4,1)) * (256^3)
return ln3 + ln2 + ln1 + ln0

**************************
function NumtoWord
lparameter tnNum
lcresult = chr(0)+chr(0)
if tnNum < (2^15 - 1) then

lcresult = chr(mod(;

  tnNum,256))+chr(int(tnNum/256))
else

   * no es un número válido
endif
return lcresult

 

 

 

 

FoxPress – Abril de 2000

© 1993-2000 FoxPress. All rights reserved