Ir para conteúdo
Fórum Script Brasil
  • 0

Relógio Do Sistema


Paulo Nobre

Pergunta

Num outro fórum alguém perguntou:

Como Acertar O Relógio Do Sistema?

A resposta foi a seguinte:

procedure AjustaDataHoraSistema(Data, Hora: TDateTime);
var
  DataHora: TSystemTime;
  Ano, mês, Dia,
  H, M, S, Mil: word;
begin
  Data := StrToDate(Edit1.Text);
  Hora := StrToTime(Edit2.Text);
  DecodeDate(Data, Ano, mês, Dia);
  DecodeTime(Hora, H, M, S, Mil);

  with DataHora do
    begin
    wYear := Ano;
    wMonth := mês;
    wDay := Dia;
    wHour := H;
    wMinute := M;
    wSecond := S;
    wMilliseconds := Mil;
  end;
  SetLocalTime(DataHora);
end;

Quer dizer que todos aqueles programas do passado que baseavam o seu tempo de uso em data e hora estariam ferrados com este código acima?

Teria como desabilitar o acesso ao relógio do sistema?

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

sim e não, porque mesmo você impedindo o acesso ao relógio do windows, é só acessar a bios e mudar, já que o relógio do windows é baseado na hora da bios...

se você quer fazer um programa que não permita mudar a data/hora do sistema, basta guardar a ultima data que o programa rodou em algum lugar, arquivo, registro e cada vez que o programa abrir se a data for menor que a ultima data que rodou então da uma mensagem...

mas isso é bem complexo, exemplo

Hoje dia 19

Ultima data é 19

Por algum motivo um programa ou sei lá, a data vai pro dia 23

ai o cara roda...

Ultima data é 23

ai o cara vê que a data está errada e volta pro dia 19

Ai o programa vai dar a mensagem de data invalida...

então tem que tratar bastante coisa pra ficar bom o esquema...

Link para o comentário
Compartilhar em outros sites

  • 0

Churc

Realmente parece que existiriam muitos cuidados a serem tomados!!

Thales

Uma aplicação que se preze deveria mandar a menssagem WM_TIMECHANGE toda vez que mudar a hora do sistema, para que as outras aplicações possam tomar as devidas providencias.

O que você quer dizer com as outras aplicações tomarem as devidas providências?

No caso de mandar a mensagem WM_TIMECHANGE, o que você está mensionando seria usar:

{ Private declarations } 
procedure WMTIMECHANGE(var Message: TWMTIMECHANGE); 
message WM_TIMECHANGE;
// e depois:
procedure TForm1.WMTIMECHANGE(var Message: TWMTIMECHANGE); 
begin 
//Código
end; 

Você teria algum exemplo para isto, ou é meio chato de criar um exemplo com código??

Link para o comentário
Compartilhar em outros sites

  • 0
{ Private declarations } 
procedure WMTIMECHANGE(var Message: TWMTIMECHANGE); 
message WM_TIMECHANGE;
// e depois:
procedure TForm1.WMTIMECHANGE(var Message: TWMTIMECHANGE); 
begin 
//Código
end; 

É isso mesmo, toda aplicação é suposta a mandar uma mensagem para todas as janelas quendo fizer uma mudança de hora SendMessage(HWND_TOPMOST,WM_TIMECHANGE,0,0);. Se não mandar eu não sei se o sistema operacional manda. Faz um teste, faça uma aplicação que faz a mudança sem mandar a mensagem e outro que tenha esse procedimento para receber a mensagem e veja se é enviada.
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...