我想把软件搞个非常简单的注册,就是打开软件时,读取注册表下的一个键值,为空时,软件caption显示未注册,键值为12345时,caption显示注册,然后一些权限打开
请问这段很简单的注册表键值操作该怎么写,我从没涉及过注册表,请大家最好能给点代码,我的注册机制很简单,也不需要什么天数限制等等,就是打开软件时检测一下注册表键值,只要写入和读出的这一小段.先谢谢大家了!

解决方案 »

  1.   

    我是楼主,忘了说一句,还要在text1里填入注册码为正确时,在注册表里写入12345这一段
      

  2.   

    给你一段我自己写的注册表读写的UNIT,希望对你有用
    unit svp_regedit;interfaceuses
      Windows, Messages, SysUtils,Classes,  Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, ComCtrls,Registry;
    type
      Tmyreg = class(Tobject)
      private
      FUNCTION RegCreateKey(HKEY:string;SubKey:string):word;
      FUNCTION DeleteRegistryKey(HKEY:string;SubKey:string):word;
      FUNCTION ReadRegistryString(HKey:string;Subkey:string):string;
      fUNCTION WriteRegistryString(HKey:string;Subkey:string;Value:string):WORD;
      public
      FUNCTION RegEdit(EDITTYPE:word;REGNAME1:string;REGNAME2:string;REGCODE:string):string;
      end;
    implementationFUNCTION Tmyreg.RegCreateKey(HKEY:string;SubKey:string):word;
    var
        reg:Tregistry;
        _read_key:string;
    BEGIN
        reg:=Tregistry.Create();
        reg.RootKey:=HKEY_CLASSES_ROOT;
        result:=0;
        try
            if reg.OpenKey(HKEY,true) then    //如果键不存在,创建
            begin
                _read_key:=reg.ReadString(SubKey);
                if length(_read_key)=0 then
                begin
                    if reg.CreateKey('LcODBCName')=false then
                    begin
                        application.MessageBox('无法读取注册表数据!', '错误', MB_OK+MB_ICONSTOP);
                        result:=0;
                    end
                    else
                    begin
                        result:=1;
                    end
                end
                else
                    result:=1;
             END
             else
                 result:=0;
        EXCEPT
            ON MYERROR:EXCEPTION DO
                 messagedlg(myerror.Message,mterror,[mbok],0);    end;
        reg.closekey;
        reg.free;
    END;FUNCTION Tmyreg.DeleteRegistryKey(HKEY:string;SubKey:string):word;
    var
        reg:Tregistry;
    begin
        reg:=tregistry.Create();
        reg.RootKey:=HKEY_CLASSES_ROOT;
        if reg.OpenKey(hkey,false) then
        begin
            if reg.DeleteKey(subkey) then
               result:=1
            else
             result:=0;
        end
        else
            result:=0;
    end;FUNCTION Tmyreg.ReadRegistryString(HKey:string;Subkey:string):string;
    var
        reg:Tregistry;
    BEGIN
        reg:=Tregistry.Create();
        reg.RootKey:=HKEY_CLASSES_ROOT;
        if reg.OpenKey(hkey,false) then
        begin
            if reg.ReadString(subkey)='' then
            begin
                result:='';
            end
            else
            begin
                result:=reg.ReadString(subkey);
            end;
        end
        else
            if RegCreateKey(HKey,Subkey)=1 then
                result:='new'
            else
                result:='';
        reg.CloseKey;
        reg.Free;
    END;FUNCTION Tmyreg.WriteRegistryString(HKey:string;Subkey:string;Value:string):WORD;
    var
        reg:Tregistry;
    BEGIN
        reg:=Tregistry.Create();
        reg.RootKey:=HKEY_CLASSES_ROOT;
        IF REG.OpenKey(HKEY,TRUE) THEN
        BEGIN
            REG.WriteString(SUBKEY,VALUE);
            RESULT:=1;
        END
        ELSE
            RESULT:=0;
        reg.CloseKey;
        reg.Free;
    END;FUNCTION Tmyreg.RegEdit(EDITTYPE:word;REGNAME1:string;REGNAME2:string;REGCODE:string):string;
    BEGIN
    case EDITTYPE of
      1: IF RegCreateKey(REGNAME1,REGNAME2)=0 THEN
            RESULT:='.F.'
         ELSE
            RESULT:='.T.';
     2: IF DeleteRegistryKey(REGNAME1,REGNAME2)=0 THEN
            RESULT:='.F.'
         ELSE
            RESULT:='.T.';
      3: RESULT:=ReadRegistryString(REGNAME1,REGNAME2);
      4: IF WriteRegistryString(REGNAME1,REGNAME2,REGCODE)=0 THEN
            RESULT:='.F.'
         ELSE
            RESULT:='.T.';
    end;END;end.
      

  3.   

    我是楼主,为什么我在程序安装后,在Software\Microsoft\Windows\CurrentVersion下找不到目录,这个是不是也要设置?
    楼上的好复杂啊,眼花缭乱
      

  4.   

    使用注册表很像文件操作。先打开文件夹 openkey()你的key值不存在
    它还可以给你创建。
    然后读取直(文件) readbool('建的名称'),它返回boolean
               readstring('key name') return string;
    写入
               writebool('key name',key value)//exp writebool('mykey',false);
               等等
    简单的很
      

  5.   

    reg:=tregistry.Create;
      reg.RootKey:=hkey_local_machine;
      reg.OpenKey('software\machineroom',false);
      reg.WriteString('serverip','我的string');
      reg.CloseKey;
      reg.Free;
     
    ......
      //  reg.OpenKey('software\machineroom',false);//
      //表示打开hkey_local_machine\software\ware\machineroom 这个'文件夹'
      //如果参数false 改为true 那么如果这个'文件夹'不存在,那么这句openkey将创建它
       
      

  6.   

    要是还不清楚,去DFW上好多李子的