如题:谢谢。

解决方案 »

  1.   

    你说锁定的话不太好做。
    但我可以给你一种方法。可以不停的从服务器上来读取时间并把本地机器的时间进行修改不就可以了吗?
    。Function SetSysDT(TempQry:TADOQuery):Boolean;
    var
      SLT: SYSTEMTIME;
      iYear,iMonth,iDay,iHour,iMinute,iSecond,iMSec:Word;
      dDateTime:TDateTime;
    begin
      with  TempQry  do
      begin
       sql.Clear ;
       sql.Add('select getdate() Now ');  //从服务器上读取数据库的时间。这个你可以修改一下我用的是oracl数据库。
       open;
       dDateTime:=TempQry.FieldValues['Now'];
      end;
      DecodeDate(dDateTime,iYear,iMonth,iDay);
      DecodeTime(dDateTime,iHour,iMinute,iSecond,iMSec);
      SLT.wYear:=iYear;
      SLT.wMonth:=iMonth;
      SLT.wDay:=iDay;
      SLT.wHour:=iHour;
      SLT.wMinute:=iMinute;
      SLT.wSecond:=iSecond;
      SetLocalTime(SLT);
      ReSult:=True;
    end;
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
      private
        { Private declarations }
        procedure WMtimechange(var msg:TMessage);message wm_TimeChange;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.WMtimechange(var msg: TMessage);
    begin
      ShowMessage('Time!');
    end;end.
    不过这只是限制在windows下面,如果在cmos下面修改就没有办法咯,最好cmos能设置密码
      

  3.   

    但我用webnumen(现代孔子)的方法,程序运行的时候还是可以修改,只不过修改后程序会提示罢了。
     anh(hananying) ( ) 说的服务器可以是本地的吗?
      

  4.   

    anh(hananying):
        是个好东西!
      

  5.   

    我有绝妙的办法:procedure TForm1.Button1Click(Sender: TObject);
    var
      pSysDir:array[0..255] of char;
    begin
      getSystemDirectory(psysdir,255);
      renamefile(pSysdir+'\timedate.cpl',psysdir+'\timedate.bak');
    end;哈哈,改不了了吧。
      

  6.   

    我以前曾经做过一个类似的东西,但所谓的限制也只能是一定条件下的限制,真要是绝对的不能改时间应该是很困难的。我的做法类似于古木的方法,自己编一个cpl,取名为timedate.cpl,将系统目录下的timedate.cpl改为别的名字,这样当点击右下角的时间时弹出的就是你自己的窗口,可以让用户输入密码之类的,输入密码正确的话就打开真正的timedate.cpl...当然,你用dos命令date,time都仍然可以修改 呵呵
      

  7.   

    也许还是anh(hananying)的方法最好吧,不知大家还有什么高论。