Seja bem vindo ao fórum Medeiros ! (começou bem no fórum, pois é seu dia de sorte !)
Eu acostumava colocar no autoexec.bat os comandos do DOS: DATE e TIME mas como você está querendo guardar a ultima data e hora digitada você terá que fazer um programa que guarde essa informações e dispare os comandos DATE e TIME para que SO assuma. De todas formas você irá precisar colocar na inicialização do Windows. Você poderia colocar um arquivo BAT na pasta
C:\Documents ans Settings\All Users\Menu Iniciar\Programas\Inicializar se for WinXP ou colocar no autoexec.bat se for Win98 ou versão anterior.
A confecção do arquivo BAT teria que ter o seguinte:
Observe que coloquei o programa no raiz e depois disso executaríamos outro arquivo BAT que o ACERTA.PRG irá criar.
Sugiro colocar o programa no raiz porque é mais fácil de localizar, mas pode colocar onde você achar melhor, o importante é definí-lo no arquivo BAT que disparará o ACERTA.EXE e o ATUALIZA.BAT.
Como as informações que irão ser gravadas são as ultimas e não todas. Podemos escolher em guardá-las num arquivo .MEM lembra desse arquivo ? é um arquivo que grava as variáveis de memoria em arquivo. Ocupa muito pouco espaço. Mas também pode gravar em arquivo texto também. Agora se precisar guardar todos os acertos de horas, isto é, todos os acertos de data e hora toda vez que é inicializado o computador, então deverá utilizar o arquivo DBF.
Vamos então aos detalhes para fazer o aplicativo:
Código: Selecionar todos
/*
Nome do programa.........: ACERTA.PRG
Desenvolvido por.........: Pablo César Arrascaeta
Objetivo do programa.....: Acerta data e hora do Sistema Operacional
Ferramenta de programa‡Æo: Clipper versÆo 5.2e + CT.LIB
*/
SET DATE TO BRITISH
SET CENTURY ON
If !File("LASTIME.MEM")
OS_DATA := Date()
OS_HORA := Substr(Time(),1,5)
Save to LASTIME all like OS_*
Endif
Restore from LASTIME Additive
dData := OS_DATA
cHora := OS_HORA
Do While .T.
Clear Screen
@ 12,10 SAY "Informe a data atual:" GET dData Valid VerData(dData,OS_DATA)
@ 13,10 SAY "Informe a hora atual:" GET cHora Picture "99:99" Valid VerHora(cHora,OS_HORA)
Read
If !Lastkey()=27
Exit
Endif
Enddo
OS_DATA := dData
OS_HORA := cHora
Save to LASTIME all like OS_*
Memowrit("C:\ATUALIZA.BAT","DATE "+DtoC(dData)+Chr(13)+Chr(10)+"TIME "+cHora)
Function VerData(dDt,dDo)
If Empty(dDt)
Alert("Nao pode deixar sem data !")
Return .F.
Endif
If dDt<dDo
If Alert("A data digitada nao pode ser mais antiga;que a ultima registrada !;;Confirma a data ou deseja digitar outra ?;;",{"Digitar outra","Confirma data"})=2
lRet := .T.
Else
lRet := .F.
Endif
Else
lRet := .T.
Endif
Return lRet
Function VerHora(cHr)
If !Len(Alltrim(cHr)) = 5
Alert("A hora nao foi completamente digitada !")
Return .F.
Else
If !TIMEVALID(cHr)
Alert("Precisa colocar a hora certa !")
Return .F.
Endif
/* Poderia também verificar se é o mesmo dia e checar que a hora digitada não seja mais cedo que a que foi grava */
Endif
Return .T.
Neste exemplo o utilitário verifica que a data digitada não seja mais antiga que a ultima registrada. Mesmo assim pergunta se quer confirmar ou digitar outra. Também verifica que a hora esteja completa e seja verdadeira. Espero que tenha contribuido para o seu aprendizado.
Este programa guardaria a ultima data e hora digitadas numa variável para que fosse restauradas na próxima inicialização do sistema.
Não aconselho que o programa ACERTA restaure automaticamente a data e hora após o primeiro acerto de DATA/HORA pelo programa. Pois você poderá ligar o computador no segundo dia ou não necessariamente no mesmo dia, ocorrendo um acerto de data/hora errada. Pode como eu fiz, trazer a ultima data gravada e até mesmo verificar que a hora digitada não seja mais cedo que a grava (isso se for no mesmo dia).
Agora se esse computador estiver em rede e melhor ainda estiver numa rede com internet, aí tem outra situação que poderíamos implementar para que atualize automaticamente sem intervenção do usuário (sem digitar nada) ao menos que a rede ou internet falhe aí então passaríamos a invocar o ACERTA.EXE que também pode trabalhar em conjunto.
fico no aguardo de suas respostas. ( Clipper 5.0 ) S.F.Medeiros-Maricá-RJ.
Clipper 5.0 ? Essa versão tem BUG !! Aconselho ao colega atualizar o seu Clipper para a versão 5.2.e, aqui no fórum temos ele a disposição na seção de
Downloads (clique aqui).
Se houverem erros ou dúvidas, pode postar aqui que trataremos de sanar todas.