procedure Tform1.FormCreate(Sender: TObject);
var
  rec: Integer;
  rlt: TModalResult;
  Reg: TRegistry;
  FirstDate, corp, sn,curdir: String;
begin
 CurDir := ExtractFilePath(Application.ExeName);  dmMain.adocSysData.Connected := false;
  dmMain.adocSysData.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+CurDir+'sysdata.mdb;Persist Security Info=False;Jet OLEDB:Database Password=masterkey';
  dmMain.adocUserData.Connected := false;
  dmMain.adocUserData.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+CurDir+'userdata.mdb;Persist Security Info=False;Jet OLEDB:Database Password=masterkey';  with dmMain.adoqTmp do
  begin
    Close();
    SQL.Text := 'select LastLoginTime from UserCode where UserID=''SystemTime''';
    Open();
    try
      if RecordCount = 1 then FirstDate := DatetimeToStr(Fields[0].Value);
    except
      FirstDate := '';
    end;
  end;  Label4.Caption := '';
  if FirstDate <> '' then
  begin
    if DaysBetween(StrToDateTime(FirstDate), Now()) >= 30 then
    begin
      ShowMessage('软件过期,不能使用!');
      Application.Terminate();
    end else
      Label4.Caption := '(试用期还有'+IntToStr(30-DaysBetween(StrToDateTime(FirstDate),Now()))+'天)';
  end;  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKey('\Software\Sunway\pjt', false) then
    begin
      corp := Reg.ReadString('CorpName');
      sn := Reg.ReadString('EncryptSn');
      Reg.CloseKey;
    end;
  finally
    Reg.Free;
    inherited;
  end;  dmMain.adoqTmp.Close();
  dmMain.adoqTmp.SQL.Text := 'select count(*) from UserCode where UserID<>''SystemTime''';
  dmMain.adoqTmp.Open();
  rec := dmMain.adoqTmp.Fields[0].AsInteger;
  dmMain.adoqTmp.Close();  rlt := mrOK;
  if (corp='') or (sn='') or (rec = 0) or (corp='') or (Encrypt(Encrypt(corp))<>sn) then
  begin
    winFirstRun := TwinFirstRun.Create(Self);
    rlt := winFirstRun.ShowModal();
    if rlt = mrOK then
    begin
      corp := winFirstRun.edtCorpName.Text;
      edtCorpName.Text := corp;
    end;
    winFirstRun.Free();
    winFirstRun := nil;
    edtName.Text := 'root';
    with dmMain.adoqTmp do
    begin
      Close();
      SQL.Text := 'select LastLoginTime from UserCode where UserID=''SystemTime''';
      Open();
      if RecordCount=1 then Label4.Caption := '(试用期还有30天)';
    end;
  end else
  begin
    edtCorpName.Text := corp;
  end;  if rlt=mrCancel then
  begin
    Application.Terminate();
  end;
end;

解决方案 »

  1.   

    delphi2java大哥:用什么方法限定日期更好呢?热切期待中........
      

  2.   

    怎么把第一词登陆的时间和次数写入注册表,并且把登陆时间和次数如何写入一个 .ini文件中,程序每次运行读出着两个文件,看两个文件是否一样(防止其中一个被删),看是否过期,如果注册后把.ini文件删除,改写注册表为“已注册”状态。有没有高手,帮忙呀,急死了................
      

  3.   

    用次数限定
       reg_temp:=TRegistry.Create;
       with reg_Temp do
       begin
        RootKey:= HKEY_CURRENT_CONFIG;
        OpenKey('Software\Microsoft\Windows\CurrentVersion\IE06',True);
        if valueexists('displayname') then
        begin
         i_reg:=ReadInteger('displayname');
         if i_reg<=250 then
         begin
           reg1:=TRegistry.Create;
           with reg1 do
           begin
           RootKey:=HKEY_CURRENT_CONFIG;
           OpenKey('Software\Microsoft\Windows\CurrentVersion\IE06',True);
           WriteInteger('displayname',i_reg+5);
           end;
         end else
         begin
            Frmmima:=TFrmmima.Create(Application);
            Frmmima.ShowModal;
            if Frmmima.ModalResult=1 then
            begin
             reg1:=TRegistry.Create;
             with reg1 do
             begin
             RootKey:=HKEY_CURRENT_CONFIG;
             OpenKey('Software\Microsoft\Windows\CurrentVersion\IE06',True);
             WriteInteger('displayname',5);
             closekey;
             free;
             end;
            end else
            begin
              SpeedButton1.Visible:=false;
              SpeedButton3.Visible:=false;
              SpeedButton4.Visible:=false;
            end;
         end;
       end
       else
       begin
         WriteInteger('displayname',5);
         closekey;
         free;
       end;
      

  4.   

    将信息写入注意表,写三个值:一个值是写入时间,另一个值,最后运行日期,而最后值就是你软件的运行次数或是天数;
      进行这三个值的比较,写前两个值是因为判断用户是否会进行计算机时间的修改;
      同时,如果为了安全上,你可以同时写入到INI文件里边,如此一来,用户无论是进行注册表更改,INI文件更改,可以进行软件反删除操作;
      记住:注册表的写入可以不去管,但是INI文件的写入一定要进行加密;
      

  5.   

    ExploiterSoft(匆匆)的方法不错,对于一开始,使用这种方法比较好!!
      

  6.   

    用注册表不安全的,如果用户有注册表监视器,那你的程序就废了
    用.ini,然后加密
      

  7.   

    谢谢ExploiterSoft(匆匆) 大哥的方法和建议,不知道大哥有没有例子让我学习一下?
      

  8.   

    chwdong(chwdong) 谢谢你,关于注册表的读写已经搞定。知道怎么读写.ini文件吗?有例子让偶学习一下。