Sincronizar server novell a terminal
Tengo una aplicación en visual fox en la que debo hacer uso de algun servicio de netware (api) para sincronizar la hora de la terminal (PC) con la del servidor novell 5.0. Debe existir alguna funcion mas de bajo nivel que SYSTIME(). Si es posible alguien reponder esto y mostrar un ejemplo. Gracias desde patagonia.-
a mi em paso Y JUSTO CON UN PROGRAMA EN FOXRPO
MANAGER....
LO QUE HICE FUE QUITAR EL CLIENTE NOVELL DESDE LA ESTACION E INSTALÉ EL CLIENTE DE WINDOWS PARA NETWARE....
MANAGER....
LO QUE HICE FUE QUITAR EL CLIENTE NOVELL DESDE LA ESTACION E INSTALÉ EL CLIENTE DE WINDOWS PARA NETWARE....
Existe una función que aplica pa lo que tu deseas (de hecho hay unas cuantas por la Internet).
Si el objetivo sincronizar todos los relojes de las PC en una LAN (independientemente del origen horario), quizas te sirva esta funcion.
* 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
Saludos
Si el objetivo sincronizar todos los relojes de las PC en una LAN (independientemente del origen horario), quizas te sirva esta funcion.
* 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
Saludos
