FoxPro/Visual FoxPro - Sincronizar hora de server

 
Vista:

Sincronizar hora de server

Publicado por Para Alexcoin (1041 intervenciones) el 04/05/2009 19:49:45
Este codigo te reemplaza la hora de la terminal por la hora del servidor, se corre una sola vez cuando entras al sistema y despues solo tomas la hora del equipo local como siempre. Si funciona en VFP6

* tcserver es el nombre del servidor con el
* que sincronizamos (ej. \PC1)
parameter v_retorno
*v_sys = sys(5)
v_sys = "\NS1" && nombre del servidor

if upper(left(v_sys,2)) # "C:" && equipo local
if at("\",v_sys) = 1 && equipo de red con \
v_nomred = subs(v_sys,1,at("",v_sys,3)-1)
v_equipo = fecha(v_nomred)
else && equipo de red mapeado
run/N2 net use > mapred.txt
copy file mapred.txt to c:college21mapred.txt
erase mapred.txt
v_nomred = filetostr("c:college21mapred.txt")
v_nomred1 = allt(subs(v_nomred,at(left(v_sys,2),v_nomred)+3))
v_nomred2 = subs(v_nomred1,1,at("",v_nomred1,3)-1)
v_equipo = fecha(v_nomred2)
endif
else
v_equipo = dtoc(date())
endif

return v_equipo

function fecha
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)+; && sincroniza fecha y hora
NumtoWord(lndayofweek)+ NumtoWord(lnday) + ; && con fecha y hora del servidor
NumtoWord(lnhour)+ NumtoWord(lnminute)+; &&
NumtoWord(lnsecond)+ NumtoWord(0) &&
lcsystemdate = ctod(allt(str(lnday))+"/"+allt(str(lnmonth))+"/"+allt(str(lnyear)))

*/ colocamos la hora en el equipo local
nres = SetSystemTime(@lcsystemtime) && sincroniza fecha y hora
return nres # 0 && con fecha y hora del servidor
clear dlls
* return lcsystemdate
else
messagebox("El Equipo: <"+tcserver+"> donde esta el programa"+chr(13)+ ;
"está apagado o no hay conexión",16,"College XXI")
clear dlls
return allt(str(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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Sincronizar hora de server

Publicado por alexcoinc (450 intervenciones) el 04/05/2009 21:10:22
Gracias por tu respuesta.

Tengo varias dudas iniciales:

1) Hago un .prg con estas líneas que enviaste ?
2) Coro este archivo con DO TATA.PRG desde el prg inicial de mi aplicación ?
3) Tu dices que:

* tcserver es el nombre del servidor con el que sincronizamos (ej. PC1)

parameter v_retorno
*v_sys = sys(5)
v_sys = "NS1" && nombre del servidor

El v_sys es el nombre del servidor... ese nombre del equipo servidor de mi red es que se obtiene desde Mi PC. ??

4) Cuando finalice el (Do).. la hora de mi cliente esta sincronizada con la del servidor ??

5) Hasta cuando dura esta hora sincronizada... es decir es mientras esta el programa activo ??

Que bueno que me ayudaras para probar la rutina !! que debe funcionar como dices !!

Gracias otra vez y espero Tú ayuda.

Alexcoinc
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sincronizar hora de server

Publicado por enrique (1041 intervenciones) el 04/05/2009 21:52:43
Respuestas

1) Si, haz un PRG
2) Si, ejecutalo desde tu aplicación
3) Es el nombre del servidor (o equipo) y es unico para toda la red. (consejo este dato deberias guardarlo en alguan archivo de parametros
4) Si
5) Cuando se sincroniza es como si cambiaras la hora a mano en el terminal (para siempre)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sincronizar hora de server

Publicado por alexcoinc (450 intervenciones) el 05/05/2009 14:54:13
ENRIQUE

Gracias otravez

Una duda en este momento: El nombre del equipo servidor es aquel que me muestra cuando yo le digo click derecho en mi pc, luego propiedades, luego nombre de equipo.... ES EL NOMBRE ??

Y me refiero a este nombre desde una terminal asi: \nombredelservidor
Es decir doble contra slash y seguido el nombre del servidor.

Duda: Se podrá hacer referencia a este equipo con la dirección IP ??

Gracias nuevamente.

Enrique: Como vos me has sacado de varios apuros en meses atras... no quiero perder contacto contigo en este momento mucho mas a sabiendas que voy a ensayar tu rutina.. que hacemos para no perder contacto y lo mas importante no perder tu amistad informática ??

alexcoinc

email: [email protected]
www.alexco.tk
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sincronizar hora de server

Publicado por enrique (1041 intervenciones) el 05/05/2009 16:09:38
Si el nombre del server es como vos decis; con respecto a la direccion IP probalo creo que debería funcionar (recorda que la IP debe ser estática y no dinamica)

Y con respecto al último comentario..... que te puedo cobrar ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sincronizar hora de server

Publicado por alexcoinc (450 intervenciones) el 05/05/2009 17:04:55
Enrique

Voy a ensayarlo.. Ok.

Respecto al último comentario: Hay cosas como el conocimiento que Vos sabes.. No tienen Precio... Ojala.. y te pudiera pagar algo.. pero la lucha en este medio es ardua y por eso uno busca estos medios .. el foro.. para tratar de menguar algo el costo de las realizaciones..

Otra vez gracias y te informo mas adelante .. hoy o a mas tardar mañana si me funciono.. Ok
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sincronizar hora de server

Publicado por Pablo (433 intervenciones) el 04/05/2009 23:14:16
Mira, la rutina escrita yo no la tengo pero si esta publicada y la puedes manipular para tu aplicacion. esta el codigo fuente prueba y me avisas si te anduvo.

la direccion es

http://premium-soft.com/rincon_del_programador.htm

busca el ejemplo numero 46, eso es lo que vos esta buscando.

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sincronizar hora de server

Publicado por alexcoinc (450 intervenciones) el 05/05/2009 14:46:24
PABLO

BAje de la dirección el ejemplo 46 y me da un ocx... de verdad no lo entiendo... me das luces por favor !!

alexcoinc
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sincronizar hora de server

Publicado por Pablo (433 intervenciones) el 06/05/2009 00:16:31
Mira Alexonic, la verdad es que yo al programa no lo baje y por lo tanto lo lo use y desconozco del error, te pase la pagina para ayudarte con el problema. La verdad es que si el programa te puede llegar a servir tendrias que publicar el error en el foro o bien el codigo fuente a ver si alguien te puede ayudar con la ocx.
Espero igualmente haberte ayudado.

Pablo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sincronizar hora de server

Publicado por Antonio R. Moquete Mejia (207 intervenciones) el 06/05/2009 22:45:25
PREGUNTAS

1) SOLO CAPTURAR LA HORA DEL SERVIDOR, DE CUALQUIER ESTACION, CORRIENDO UNA LINEA DE CODIGOS?

SI ES ESTO, YO LO HAGO ASI

! NET TIME \SERVER /SET /Y

NET TIME = COMANDO DE DOS

\SERVER= NOMBRE DEL SERVIDOR

/SET = ENVIAR PARAMETRO

/Y = REPUESTA AL PARAMETRO

NOTA:
ESTO CAMBIA SI ES EN ESPAÑOL EL DOS POR /S.

SI QUIEREN PRUEBEN ESTO EN EL PUNTO COMMAND DE WINDOWS

CMD

LUEGO

NET TIME \SERVER /SET /Y

Y AHI TIENES SIEMPRE LA HORA DEL SERVER CUANDO QUIERAS, ES MAS SI LE CAMBIAS LA HORA A LA MAQUINA QUE ESTAS PUEDES POR SEGURIDAD PONER QUE LOS USUARIOS NO CAMBIEN LA HORA A LAS ESTACIONES.

Y YA ESTA LA APLICACIN COJERA LA HORA Y LA FECHA DEL SERVER
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar