我想把软件搞个非常简单的注册,就是打开软件时,读取注册表下的一个键值,为空时,软件caption显示未注册,键值为12345时,caption显示注册,然后一些权限打开
请问这段很简单的注册表键值操作该怎么写,我从没涉及过注册表,请大家最好能给点代码,我的注册机制很简单,也不需要什么天数限制等等,就是打开软件时检测一下注册表键值,只要写入和读出的这一小段.先谢谢大家了!
请问这段很简单的注册表键值操作该怎么写,我从没涉及过注册表,请大家最好能给点代码,我的注册机制很简单,也不需要什么天数限制等等,就是打开软件时检测一下注册表键值,只要写入和读出的这一小段.先谢谢大家了!
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.
楼上的好复杂啊,眼花缭乱
它还可以给你创建。
然后读取直(文件) readbool('建的名称'),它返回boolean
readstring('key name') return string;
写入
writebool('key name',key value)//exp writebool('mykey',false);
等等
简单的很
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将创建它