谢谢!

解决方案 »

  1.   

    假设软件的主程序窗口为FORM1,则将该段代码置放在FORM1.CREATE事件中。代码如下:procedure TForm1.form1create(Sender: TObject);
    var
    re_id:integer;
    registerTemp : TRegistry;
    inputstr,get_id:string;
    dy,clickedok:boolean;
    begin
     dy:=false; //软件是否已到注册期、及是否允许继续使用的标志,当值为FALSE是为允许使用。
     registerTemp := TRegistry.Create; //准备使用注册表
     with registerTemp do
     begin
       RootKey:=HKEY_LOCAL_MACHINE; //存放在此根下
       if OpenKey('Software\Microsoft\Windows\CurrentVersion\Mark',True) then
        // 建一目录,存放标志值。当然也可以存放在已存在的目录下。怎么样,很难发现吧?
        begin
         if valueexists('gc_id') then begin //用gc_id的值作为标志,首先判断其存在否?
           re_id:=readinteger('gc_id');//读出标志值
           if (re_id<>0) and (re_id<>100) then begin //若标志值为0,则说明已注册。
                  //若不为0且值不到100,说明虽未注册,但允许使用的次数尚未达到。
            re_id:=re_id+5; //允许标志的最大值为100,每次加5,则最多只可用20次。
            Writeinteger('gc_id',re_id);//将更新后的标志值写入注册表中。
         end;
         if re_id=100 then dy:=true; //假如值已到100,则应注册。
        end
       else Writeinteger('gc_id',5);//建立标志,并置初始标志值。
      end;
      if dy then begin //若dy值为TRUE,则应提示用户输入注册码,进行注册。
        clickedok:=InputQuery('您使用的是非注册软件,请输入注册码:',' ',inputstr);
        if clickedok then begin
          get_id:=inttostr(27593758*2);//注册码为55187516,当然可加入更杂的算法。
          if get_id=inputstr then begin
            Writeinteger('gc_id',0);//若输入的注册码正确,则将标志值置为0,即已注册。
            CloseKey;
            Free;
           end
          else begin //若输入的注册码错误,应作出提示并拒绝让其继续使用
            application.messagebox('注册码错误!请与作者联系!','警告框',mb_ok);
            CloseKey;
            Free;
            application.terminate; //中止程序运行,拒绝让其继续使用
           end;
          end
        else begin //若用户不输入注册码,也应作出提示并拒绝让其继续使用
          application.messagebox('请与作者联系,使用注册软件!','警告框',mb_ok);
          CloseKey;
          Free;
          application.terminate;
         end;
      end;
     end;
    end;
      

  2.   

    就是呀!!
    : DDeveloper(金色麦浪) 
    你有什么招可以实现控制使用时间
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
      Registry, Dialogs;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
    var
        registerTemp : TRegistry;
        curDate : TDateTime;
    begin
        registerTemp := TRegistry.Create;
        with registerTemp do
        begin
            RootKey := HKEY_LOCAL_MACHINE;
            //判断是否初次运行程序
            if OpenKey('Software\MySoftware',True) then
            begin
                if ReadBool('Runned') then
                //不是第一次运行
                begin
                    curDate := Date;
                    if (curDate-ReadTime('LastRunTime'))>=ReadInteger('Duration') then
                    begin
                        //当前的系统时间超出了使用期限
                        ShowMessage('试用版已到期');
                        exit;
                    end
                    else
                    begin
                        DeleteKey('LastRunTime');
                        WriteTime('LastRunTime',Date);
                    end;
                end
                else
                begin
                    //初次运行程序
                    DeleteKey('Runned');
                    WriteBool('Runned',True);
                    //设置试用期限30天
                    WriteInteger('Duration',30);
                    //写入当前运行时间
                    WriteTime('LastRunTime',Date);
                end;
            end
            else
            begin
                ShowMessage('Fails!');
            end;
            CloseKey;
        end;
    end;end.