Ayuda con la hora del servidor

Hola, estoy trabajando con el window 2003 server en el servidor, y tengo algunas estaciones de trabajo que tienen el window 98. Como sistema operativo, estas con unas pentium 1, pero tengo problemas con el reloj de su computadora, ya que se me adelantan siempre la hora y para solucionar eso quiero actualizar antes de grabar ujn registro con la hora del servidor, ese es mi problema que he bajado algunas rutinas del internet que me permiten hacer eso, me funcionan bien en mi computadora de trabajo que tengo con window xp, pero cuando los pruebo en las computadoras con windows 98 se me cuelga. ¿Y no puedo actualizar la hora
no se si me podrías ayudar en esto?
Gracias javier.

1 Respuesta

Respuesta
1
Esta me funciona perfectamente:
FechaServidor("servidor", .T.)
FUNCTION FechaServidor
LPARAMETERS tcSrv, tlSet
*--------------------------------------------------------------
* FUNCTION NetDateTime(tcSrv, tlSet)
*--------------------------------------------------------------
* Retorna la fecha-hora de la PC remota "tcSrv"
* Si "tlSet" es .T. cambia la hora de la PC
* por la fecha-hora de la PC remota "tcSrv"
* PARAMETROS:
* tcSrv: Nombre de la PC remota
* tlSet: .T. - Si cambia la hora de la PC
* RETORNO:
* DateTime: La fecha-hora de la PC remota
* Numérico: 0 - Si se cambió la fecha-hora correctamente
* -1 - No se pudo cambiar la fecha-hora
* -2 - No se encontró la PC remota
* USO: ? NetDateTime("\\MiServidor", .F.)
* AUTOR: LMG
*--------------------------------------------------------------
LOCAL lRet, lcStrDW, lnPtr, lcToD, lpTZI, ln, lnZT, ;
lnAno, lnMes, lnDDS, lnDia, lnHor, lnMin, lnSeg
DECLARE INTEGER NetRemoteTOD IN NETAPI32 ;
STRING @lcSvr, ;
INTEGER @lnPtr
DECLARE RtlMoveMemory IN WIN32API ;
STRING @lcToD, ;
INTEGER lnPtr, ;
INTEGER ln
DECLARE SetSystemTime IN WIN32API ;
STRING lcStrDW
DECLARE GetTimeZoneInformation IN KERNEL32 ;
STRING @lpTZI
tcSrv = STRCONV(STRCONV(tcSrv,1),5) + CHR(0)
lnPtr = 0
ln = NetRemoteTOD(@tcSrv, @lnPtr)
IF ln = 0
lcToD = REPLICATE(CHR(0), 48)
ln = RtlMoveMemory(@lcToD, lnPtr, 48)
lnAno = DW2N(SUBSTR(lcToD, 41, 4))
lnMes = DW2N(SUBSTR(lcToD, 37, 4))
lnDDS = DW2N(SUBSTR(lcToD, 45, 4))
lnDia = DW2N(SUBSTR(lcToD, 33, 4))
lnHor = DW2N(SUBSTR(lcToD, 09, 4))
lnMin = DW2N(SUBSTR(lcToD, 13, 4))
lnSeg = DW2N(SUBSTR(lcToD, 17, 4))
IF tlSet
lcStrDW = N2DW(lnAno) + N2DW(lnMes) + ;
N2DW(lnDDS) + N2DW(lnDia) + ;
N2DW(lnHor) + N2DW(lnMin) + ;
N2DW(lnSeg) + N2DW(0)
lRet = IIF(SetSystemTime(lcStrDW), 0, -1)
ELSE
lpTZI = SPACE(255)
ln = GetTimeZoneInformation(@lpTZI)
lnZT = DW2N(SUBSTR(lpTZI, 1, 2))
IF lnZT > 720
lnZT = (2^16) - lnZT
ELSE
lnZT = (-1) * lnZT
ENDIF
lRet = DATETIME(lnAno, lnMes, lnDia, ;
lnHor, lnMin, lnSeg) + lnZT * 60
ENDIF
ELSE
lRet = -2
ENDIF
RETURN lRet
ENDFUNC
* FUNCTION DW2N(tcDW)
* Usada por NetDateTime()
* - - - - - - - - - - - - - - - - - - - - - - - -
FUNCTION DW2N(tcDW)
RETURN ASC(SUBSTR(tcDW, 4, 1))*(256^3) + ;
ASC(SUBSTR(tcDW, 3, 1))*(256^2) + ;
ASC(SUBSTR(tcDW, 2, 1))*(256) + ;
ASC(SUBSTR(tcDW, 1, 1))
ENDFUNC
* - - - - - - - - - - - - - - - - - - - - - - - -
* FUNCTION N2DW(tnN)
* Usada por NetDateTime()
* - - - - - - - - - - - - - - - - - - - - - - - -
FUNCTION N2DW(tnN)
RETURN CHR(MOD(tnN, 256)) + CHR(INT(tnN/256))
Endfunc
Alfredo García
CONIT, C.A.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas