Impedir a alteração da data e hora do sistema
Olá!
Gostaria de saber se tem criar um sistema que impeça a alteração da data e hora do sistema.
Meu sistema acerta a hora do sistema ao abrir e não quero permitir que o usuário tenha acesso a alteração enquanto o programa estiver rodando.
Alguém pode dar uma ajuda?
Valeu!
wbb
Gostaria de saber se tem criar um sistema que impeça a alteração da data e hora do sistema.
Meu sistema acerta a hora do sistema ao abrir e não quero permitir que o usuário tenha acesso a alteração enquanto o programa estiver rodando.
Alguém pode dar uma ajuda?
Valeu!
wbb
Wbb
Curtidas 0
Respostas
Tatuweb
20/08/2004
A opção mais simples é vc renomear o arquivo Timedate.cpl para qualquer outro nome que quiser e depois colocar o nome correto quando finalizar o programa. Entretanto se o seu aplicativo ou o Windows travar por algum motivo ai ferra o usuário pois ele não vai mais conseguir alterar a hora pelo Windows.
Eu acredito que deve haver um jeito de desabilitar o ajuste de data e hora pelo registro mas eu não conheço. Eu adaptei duas rotinas para desabilitar o ajuste de hora/data do Windows mas acho que esse código meio que uma gambiarra por estar dentro de um Timer... mas como funciona eu vou postar.
[b:8c9d0b68b1]1º Modo: Fechando a janela:[/b:8c9d0b68b1]
Dentro de um Timer vc verifica se a janela Data/hora está aberta ou não e se tiver vc fecha:
[b:8c9d0b68b1]2º Modo: Desabilitando os controles da janela data/hora.[/b:8c9d0b68b1]
O código abaixo também vai dentro de um timer. Ele vai desabilitar todos os controles exceto os botões OK e Cancelar. Com isso o usuário não poderá fazer alterações.
e dentro do Timer vai:
PS: O segundo código requer a unit ComCtrls declarada.
Eu acredito que deve haver um jeito de desabilitar o ajuste de data e hora pelo registro mas eu não conheço. Eu adaptei duas rotinas para desabilitar o ajuste de hora/data do Windows mas acho que esse código meio que uma gambiarra por estar dentro de um Timer... mas como funciona eu vou postar.
[b:8c9d0b68b1]1º Modo: Fechando a janela:[/b:8c9d0b68b1]
Dentro de um Timer vc verifica se a janela Data/hora está aberta ou não e se tiver vc fecha:
var AppHandle: THandle; begin AppHandle := FindWindow (nil, ´Propriedades de Data/Hora´); if AppHandle <> 0 then PostMessage (AppHandle, WM_QUIT, 0, 0); end;
[b:8c9d0b68b1]2º Modo: Desabilitando os controles da janela data/hora.[/b:8c9d0b68b1]
O código abaixo também vai dentro de um timer. Ele vai desabilitar todos os controles exceto os botões OK e Cancelar. Com isso o usuário não poderá fazer alterações.
type EnumClass = class public Treeview: TTreeview; ParentNode: TTreeNode; end; function MainEnumProc (Hwnd, lParam: Longint): Boolean; stdcall; var ECChild: EnumClass; Buffer: PChar; begin ECChild := EnumClass.Create; Buffer := StrAlloc (501); try EnumChildWindows (Hwnd, @MainEnumProc, Longint(ECChild)); GetClassName (Hwnd, Buffer, 500); if Buffer <> ´Button´ then EnableWindow (Hwnd, FALSE); finally ECChild.Free; StrDispose (Buffer); end; Result := True; end;
e dentro do Timer vai:
var EC: EnumClass; wnd: HWND; begin wnd := FindWindow (nil, ´Propriedades de Data/Hora´); EC := EnumClass.Create; try EnumChildWindows (Wnd, @MainEnumProc, Longint(EC)); finally EC.Free; end; end;
PS: O segundo código requer a unit ComCtrls declarada.
GOSTEI 0
Kroki
20/08/2004
Tenho uma Lan e a melhor maneira ke achei foi renomear a extensao do arquivo Timedate.cpl .
No meu programa de controle adaptei uma roina que renomeia para lpc ou cpl dependendo da situacao.
No meu programa de controle adaptei uma roina que renomeia para lpc ou cpl dependendo da situacao.
GOSTEI 0
Rômulo Barros
20/08/2004
Eu tentei renomear o arquivo Timedate.cpl manualmente e, após renomeá-lo, o windows já cria outro automaticamente. Se excluir ou recortar o arquivo acontece a mesma coisa.
GOSTEI 0
Alves
20/08/2004
E se o kra for no plompt do DOS e digitar um (C:\Date) muda a data ou
(C:\Time) Muda a Hora, e ai como fica ???
(C:\Time) Muda a Hora, e ai como fica ???
GOSTEI 0
Kroki
20/08/2004
Esqueci de dizer que uso Win 98se,e funciona.
A respeito do dos,tambem esqueci de dizer que meu programa bloqueia o acesso ao Dos etc..
A respeito do dos,tambem esqueci de dizer que meu programa bloqueia o acesso ao Dos etc..
GOSTEI 0
Rômulo Barros
20/08/2004
No meu caso, utilizo XP.
GOSTEI 0
Alves
20/08/2004
Como é feito o bloqueio??
Esqueci de dizer que uso Win 98se,e funciona.
A respeito do dos,tambem esqueci de dizer que meu programa bloqueia o acesso ao Dos etc..
GOSTEI 0
Beppe
20/08/2004
[quote:e8e889fd0e=´Undeclared Identifier´]Eu tentei renomear o arquivo Timedate.cpl manualmente e, após renomeá-lo, o windows já cria outro automaticamente. Se excluir ou recortar o arquivo acontece a mesma coisa.[/quote:e8e889fd0e]
Tentou fazer via Delphi?
Tentou fazer via Delphi?
GOSTEI 0
Rômulo Barros
20/08/2004
[quote:87c019f11c=´Undeclared Identifier´]Eu tentei renomear o arquivo Timedate.cpl manualmente e, após renomeá-lo, o windows já cria outro automaticamente. Se excluir ou recortar o arquivo acontece a mesma coisa.
Tentou fazer via Delphi?[/quote:87c019f11c]
Não, via Delphi eu não testei ainda. Funciona? :wink:
GOSTEI 0
Rômulo Barros
20/08/2004
Galera, testei com o Delphi (Windows XP) e também não deu certo. Após renomear o arquivo, automaticamente o SO criou outro arquivo idêntico ao anterior (datetime.cpl) :lol: :lol: :lol:
GOSTEI 0
Beppe
20/08/2004
Há algum tempo atrás eu postei aqui mesmo uma ´silução´ para isto. Na época só tinha imaginado que poderia funcionar, hoje testei e deu certo.
Não é preciso, nem garante que o tempo seja adiantado, mas deve resolver o caso de vcs.
Segue o link:
http://delphiforum.icft.com.br/forum/viewtopic.php?t=30698&
E algum código:
Não é preciso, nem garante que o tempo seja adiantado, mas deve resolver o caso de vcs.
Segue o link:
http://delphiforum.icft.com.br/forum/viewtopic.php?t=30698&
E algum código:
procedure TForm1.WMTimeChange(var Message: TWMTimeChange); var SysTime: TSystemTime; begin inherited; if Now < Tempo then begin DateTimeToSystemTime(Tempo, SysTime); SetSystemTime(SysTime); Label1.Caption := FormatDateTime(´dddd, mmmm d, yyyy, hh:mm:ss AM/PM´, Now); end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Tempo := Now; end;
GOSTEI 0