La hora del Servidor
Por Gotzon (alias GEO)(Sacado del FoxBoard)
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