Impedir a alteração da data e hora do sistema
20/08/2004
0
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
Posts
20/08/2004
Tatuweb
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.
21/08/2004
Kroki
No meu programa de controle adaptei uma roina que renomeia para lpc ou cpl dependendo da situacao.
21/08/2004
Rômulo Barros
21/08/2004
Alves
(C:\Time) Muda a Hora, e ai como fica ???
21/08/2004
Kroki
A respeito do dos,tambem esqueci de dizer que meu programa bloqueia o acesso ao Dos etc..
21/08/2004
Alves
21/08/2004
Beppe
Tentou fazer via Delphi?
21/08/2004
Rômulo Barros
Tentou fazer via Delphi?[/quote:87c019f11c]
Não, via Delphi eu não testei ainda. Funciona? :wink:
21/08/2004
Rômulo Barros
21/08/2004
Beppe
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;
Clique aqui para fazer login e interagir na Comunidade :)