想做个软件注册,谁给个思路!再线谢谢!具体
1,能计算软件使用天数的安全的

解决方案 »

  1.   

    看看下面的广告:
    ET99多功能USB KEY--只售9.9元
      

  2.   

    给你个demo,自已修改//有关时间限制使用和软件注册的设计!procedure Tgcdzsys_grjs.FormCreate(Sender: TObject);
    var
    Reg:Tregistry; //自定义注册表变量
    NowDate,FirstDate:TDateTime;//自定义时间变量
    KeyName,TempCode,TempName,TempStr:string; //自定义字符串变量
    Same:Integer; //自定义整数变量
    NumberOfDays:Real;
    begin
    //SB.Panels[0].Text:=' 工程地质勘察应用系统';
    //SB.Panels[1].Text:=' Email: [email protected] 或 [email protected]';
    NoRegistry:=true;
    NowDate:=date; //取得运行时系统日期
    try
    //创建注册表,有该键则读取,无则创建
    Reg:=Tregistry.Create ;
    Reg.RootKey :=Hkey_local_machine;
    KeyName:='Software\grjs\Example';
    if Reg.OpenKey(KeyName,true) then
    begin
    TempName:=Reg.ReadString('UsrName');
    TempCode:=Reg.ReadString('Passwd');
    //读取用户名,注册号
    try
    FirstDate:=Reg.ReadDate('Date');
    //非第一次则读入第一次运行时间
    except
    FirstDate:=NowDate;
    Reg.WriteDate('Date',NowDate);
    //若为第一次运行,则写入系统日期
    end;
    end;
    Reg.CloseKey;
    finally
    Reg.Free;
    end;
    TempStr:=Encrypt(TempName);
    //通过自定义函数Encrypt()来获取密码
    Same:=CompareText(TempStr,TempCode);
    //比较密码
    if TempName<>'' then
    if Same=0 then
    NoRegistry:=false;
    //验证密码,通过NoRegistry为false
    if NoRegistry then
    begin //若未注册...
    NumberOfDays:=Nowdate-FirstDate;
    SpareDays:=Round(10-NumberOfDays);
    ShowMessage('你已经剩下'+FloatToStr(SpareDays)+'天的使用时间了!请尽快注册!');
    if((NumberOfDays>10) or (NumberOfDays<-1)) then
    begin
    ShowMessage('程序未注册超过试用期或更改系统时间,将终止运行!');
    Application.Terminate;//超过10天,则禁止运行
    end;
    end;
    end;
    function Tgcdzsys_grjs.Encrypt(TempStr:string):string;
    var
    Str1:String;
    i,j:Integer;
    begin
    Str1:='';
    for i:=1 to Length(TempStr) do
    begin //密码匹配方式
    j:=(i*i*i*i mod (i+30))+(i*i mod (i+20))+i*3+1;
    Str1:=Str1+chr(ord(TempStr[i])+j);
    end;
    Result:=Str1;
    end;procedure Tgcdzsys_grjs.DBBhelphgrjsClick(Sender: TObject);
    var
    InptName,InptCode,RealCode:String;
    Same:Integer;
    Reg:Tregistry;
    Keyname:String;
    begin
    if NoRegistry then //未注册时做
    begin
    RealCode:='';
    InptName:= InputBox('注册', '输入你的名字', '');
    if InptName<>'' then
    begin
    InptCode:= InputBox('注册', '输入注册号', '');
    RealCode:=Encrypt(InptName);
    Same:=CompareText(RealCode,InptCode);
    if (Same<>0) then
    ShowMessage('注册号码不对,注册未成功!')
    else
    begin
    //密码匹配时做:把用户名、密码写入注册表
    Try
    Reg:=Tregistry.Create ; //激发注册表
    Reg.RootKey :=hkey_local_machine;//注册表路径
    KeyName:='Software\grjs\Example';//创建新的注册文件
    if Reg.OpenKey(KeyName,true) then
    begin
    Reg.WriteString('Passwd',InptCode); //注册密码
    Reg.WriteString('UsrName',InptName);//注册用户名
    end;
    Reg.CloseKey ; //关闭
    finally
    Reg.Free; //释放注册表
    end;
    NoRegistry:=false;//可修改注册后的界面
    end;
    end;
    end;
    end;
      

  3.   

    方案1.搭建一个web服务器,你的软件运行后,向你的服务器注册,发送软件的运行时间,这样就可以计算运行天数,不依赖于用户计算机的日期时间设置,方案2
    软件运行过程中,记录运行的时间,然后写入一个配置文件(这个配置文件要保护好),也不要计算什么天数,就计算运行小时吧,比如原来你打算给用户试用30天,那就改为30*2小时试用期吧,,一天2人小时试用,也OK了
      

  4.   

    网络不安全啊
    搭建WEB服务器不是注册的好方法
    在HOST里完全可以改成本地验证