Ajuda na comparaçao de datas no registro windows
Estou desenvolvendo uma aplicação pra ser executada de 30 em 30 dias.
Jah consegui fazer gravar a data atual no envento onshow do form como no codigo abaixo:
regbb:=tregistry.create;
try
regbb.rootkey:=HKEY_CURRENT_USER;
if not regbb.KeyExists(´Software\Microsoft\Config\Key\Windows\backup´) = true then
regbb.CreateKey(´Software\Microsoft\Config\Key\Windows\backup´);
data:= DateToStr(now);
regbb.OpenKey(´Software\Microsoft\Config\Key\Windows\backup´,true);
regbb.WriteTime(data,now);
finally
regbb.Free;
O problema eh usar a chave pra comparar com a data atual e se for igual ou maior que 30 dias, de 30 em 30 dias...
Obrigado..
Jah consegui fazer gravar a data atual no envento onshow do form como no codigo abaixo:
regbb:=tregistry.create;
try
regbb.rootkey:=HKEY_CURRENT_USER;
if not regbb.KeyExists(´Software\Microsoft\Config\Key\Windows\backup´) = true then
regbb.CreateKey(´Software\Microsoft\Config\Key\Windows\backup´);
data:= DateToStr(now);
regbb.OpenKey(´Software\Microsoft\Config\Key\Windows\backup´,true);
regbb.WriteTime(data,now);
finally
regbb.Free;
O problema eh usar a chave pra comparar com a data atual e se for igual ou maior que 30 dias, de 30 em 30 dias...
Obrigado..
O4pr3ndiz
Curtidas 0
Respostas
Marcio.theis
24/11/2005
Leia a chave que vc tem no registro, compare e depois grava...
GOSTEI 0
Emerson Nascimento
24/11/2005
para poder fazer esse controle seu programa precisa ficar rodando em background (ou você precisa agendar isso no windows ou em qualquer outra agenda que aceite o agendamento de execução de programas como se fosse um ´compromisso´).
deveria ser algo assim:
você poderia ainda colocar essa rotina num Timer, para ser executada de hora em hora assim, se o usuário não fizer o backup na abertura do programa, ele será avisado de hora em hora, até que aceite executar o backup.
deveria ser algo assim:
var regbb: tregistry; dataultimobackup: TDate; begin regbb := tregistry.create; try regbb.rootkey:=HKEY_CURRENT_USER; regbb.OpenKey(´Software\Microsoft\Config\Key\Windows\backup´,true); try dataultimobackup := regbb.ReadDate(´data´); except dataultimobackup := sysutils.date - 30; end; if (trunc(sysutils.date - dataultimobackup) >= 30) and (application.MessageBox(´É necessário efetuar o backup. Deseja fazer isso agora?´, ´Backup´,MB_TASKMODAL + MB_YESNO + MB_DEFBUTTON1) = mrYes) then begin {rotina de execução do backup} if BackupEfetuadoComSucesso then regbb.WriteDate(´data´,sysutils.date); end; finally regbb.Free; end; end;
você poderia ainda colocar essa rotina num Timer, para ser executada de hora em hora assim, se o usuário não fizer o backup na abertura do programa, ele será avisado de hora em hora, até que aceite executar o backup.
GOSTEI 0
O4pr3ndiz
24/11/2005
Agradeço a ajuda mas o codigo aparece o seguinte erro na execução e naum executa
1) erro na linha
dataultimoITA := regita.ReadDate(´data´);
na compilação exibe o erro ERegistryException ´Failed to get data for ´data´
e naum executa o projeto, mudei pra data := DateToStr(now);
e tb naum resolveu.
Eu li sobre o readdate e naum vi nehuma anormalidade de sintaxe, tanto que passo pelo ctrl+F9.
Se puder me ajudar..
Estou precisando disto com urgencia... obrigado
1) erro na linha
dataultimoITA := regita.ReadDate(´data´);
na compilação exibe o erro ERegistryException ´Failed to get data for ´data´
e naum executa o projeto, mudei pra data := DateToStr(now);
e tb naum resolveu.
Eu li sobre o readdate e naum vi nehuma anormalidade de sintaxe, tanto que passo pelo ctrl+F9.
Se puder me ajudar..
Estou precisando disto com urgencia... obrigado
GOSTEI 0
Emerson Nascimento
24/11/2005
isso deve trer acontecido porque o valor ´Data´ ainda não havia sido criado. essa informação só aparece para o Delphi e somente na primeira execução. para evitar a exibição de erros tratados, vá em Tools -> Debugger Options -> Language Exceptions e desmarque a caixa [i:013ec86ff8]Stop on Delphi Exceptions[/i:013ec86ff8]. Feito isso, o Delphi somente exibirá mensagens para os erros não tratados.
GOSTEI 0
O4pr3ndiz
24/11/2005
.. e funcionou a primeira vez, mas as outras naum...
Mas valew a força..
Mas valew a força..
GOSTEI 0
Emerson Nascimento
24/11/2005
com assim ´funcionou a primeira vez, mas as outras naum´?
GOSTEI 0
O4pr3ndiz
24/11/2005
Coloquei o codigo na integra no timer e funcionou uma vez...
altererei a data do sistema e tudo depois nda.. ele cria a pasta backup no registro vazia....
Eu ainda naum percebi o que aconteceu..
altererei a data do sistema e tudo depois nda.. ele cria a pasta backup no registro vazia....
Eu ainda naum percebi o que aconteceu..
GOSTEI 0
Emerson Nascimento
24/11/2005
olha, eu executei aqui e funcionou perfeitamente.
fiz assim:
coloquei um timer com intervalo de 30.000 (30 segundos)
data atual: 01/12/2005 (1o. de dezembro de 2005)
- rodei o programa;
- depois de 30 segundos o programa perguntou se eu queria efetuar o bkp. respondi que [b:703227ba0a]não[/b:703227ba0a];
- depois de mais 30 segundos perguntou de novo. respondi que [b:703227ba0a]não[/b:703227ba0a] novamente;
- mais 30 segundos e perguntou novamente. respondi que [b:703227ba0a]sim[/b:703227ba0a], queria efetuar o bkp;
- nos 30 segundos seguintes a [i:703227ba0a]pergunta não apareceu[/i:703227ba0a]. esperei mais uns 5 minutos e a [i:703227ba0a]pergunta não apareceu[/i:703227ba0a] mais.
- alterei a data para 31/12/2005 - 31 de dezembro de 2005 - portanto, TRINTA DIAS PRA FRENTE, e a pergunta começou a aparecer novamente.
ou seja, tudo funcionou como devido...
OBS.: o registro do windows só será alterado se você optar por efetuar o bkp e esse for efetuado com sucesso (conforme aquele código passado)
p.s.: eu só gostaria de acrescentar duas linha àquele código:
assim o timer será executado e, se for o necessário, irá esperar a resposta do usuário para reiniciar a contagem do tempo.
fiz assim:
coloquei um timer com intervalo de 30.000 (30 segundos)
data atual: 01/12/2005 (1o. de dezembro de 2005)
- rodei o programa;
- depois de 30 segundos o programa perguntou se eu queria efetuar o bkp. respondi que [b:703227ba0a]não[/b:703227ba0a];
- depois de mais 30 segundos perguntou de novo. respondi que [b:703227ba0a]não[/b:703227ba0a] novamente;
- mais 30 segundos e perguntou novamente. respondi que [b:703227ba0a]sim[/b:703227ba0a], queria efetuar o bkp;
- nos 30 segundos seguintes a [i:703227ba0a]pergunta não apareceu[/i:703227ba0a]. esperei mais uns 5 minutos e a [i:703227ba0a]pergunta não apareceu[/i:703227ba0a] mais.
- alterei a data para 31/12/2005 - 31 de dezembro de 2005 - portanto, TRINTA DIAS PRA FRENTE, e a pergunta começou a aparecer novamente.
ou seja, tudo funcionou como devido...
OBS.: o registro do windows só será alterado se você optar por efetuar o bkp e esse for efetuado com sucesso (conforme aquele código passado)
p.s.: eu só gostaria de acrescentar duas linha àquele código:
var regbb: tregistry; dataultimobackup: TDate; begin TIMER1.ENABLED := FALSE; // nova linha regbb := tregistry.create; try regbb.rootkey:=HKEY_CURRENT_USER; regbb.OpenKey(´Software\Microsoft\Config\Key\Windows\backup´,true); try dataultimobackup := regbb.ReadDate(´data´); except dataultimobackup := sysutils.date - 30; end; if (trunc(sysutils.date - dataultimobackup) >= 30) and (application.MessageBox(´É necessário efetuar o backup. Deseja fazer isso agora?´, ´Backup´,MB_TASKMODAL + MB_YESNO + MB_DEFBUTTON1) = mrYes) then begin {rotina de execução do backup} if BackupEfetuadoComSucesso then regbb.WriteDate(´data´,sysutils.date); end; finally regbb.Free; end; TIMER1.ENABLED := TRUE; // nova linha end;
assim o timer será executado e, se for o necessário, irá esperar a resposta do usuário para reiniciar a contagem do tempo.
GOSTEI 0
O4pr3ndiz
24/11/2005
obrigado....
GOSTEI 0