📄 reg.pas
字号:
unit Reg;
interface
uses
windows;
procedure AddValue(Root:HKEY;StrPath:pchar;StrValue:pchar;Strdata:pchar;DataType:integer);
procedure DelValue(Root:HKEY;StrPath:pchar;StrValue:pchar);
procedure DelSub(Root:HKEY;StrPath:pchar;StrSub:pchar);
function ReadValue(Root:HKEY;StrPath:pchar;StrValue:pchar):String;
function ValueExists(Root:HKEY;StrPath:pchar;StrValue:pchar):Boolean;
function KeyExists(Root:HKEY;StrPath:pchar;StrSub:pchar):Boolean;
function GetValueName(Root:HKEY;StrPath:pchar;var Str:String):integer;
function GetKeyName(Root:HKEY;StrPath:pchar;var Str:String):integer;
implementation
uses
RejoiceBase;
function CreateKey(Root:HKEY;StrPath:pchar):Hkey;
var TempKey:HKey;Disposition:Integer;
begin
TempKey:=0;
RegCreateKeyEx(Root, StrPath, 0, nil, 0, KEY_ALL_ACCESS, nil, TempKey, @Disposition);
Result:=TempKey;
end;
function OpenKey(Root:HKEY;StrPath:pchar):Hkey;
var TempKey:Hkey;
begin
TempKey:=0;
RegOpenKeyEx(Root,StrPath,0,KEY_ALL_ACCESS,TempKey);
Result:=TempKey;
end;
procedure AddValue(Root:HKEY;StrPath:pchar;StrValue:pchar;Strdata:pchar;DataType:integer);
var
S: Hkey;
DataSize: Integer;
begin
s := CreateKey(Root, StrPath);
DataSize:= length(Strdata);
RegSetValueEx(S, StrValue, 0, REG_SZ, Strdata, DataSize); //
RegCloseKey(s);
end;
procedure DelValue(Root:HKEY;StrPath:pchar;StrValue:pchar);
var s:Hkey;
begin
s:=OpenKey(Root,StrPath);
RegDeleteValue(s,StrValue);
RegCloseKey(s);
end;
procedure DelSub(Root:HKEY;StrPath:pchar;StrSub:pchar);
var
s: Hkey;
i: integer;
SubKey: string;
begin
i:=1;
SubKey:=''; //2000里删除目录,一定要下面为空才能删除
while i<=99 do begin
if keyexists(Root,Pchar(StrPath+'\'+StrSub), PChar(IntToStr(i))) then begin
SubKey:=IntToStr(i);
s:=OpenKey(Root,Pchar(StrPath+'\'+StrSub));
RegDeleteKey(s,Pchar(SubKey));
RegCloseKey(s);
end else break;//如果不存就出错了,出错就跳出了,..就是退出,如果用break;下面没有的话,就不执行,下面的代友,???
i:=i+1;
end;
s:=OpenKey(Root,StrPath);
RegDeleteKey(s,StrSub);
RegCloseKey(s);
end;
function ReadValue(Root:HKEY;StrPath:pchar;StrValue:pchar):String;
var s:Hkey; ValueType:DWORD; MyData: array[0..255] of char; dLength: DWORD;
begin
ValueType:=REG_SZ;
s:=OpenKey(Root,StrPath);
dLength := SizeOf(MyData);
if RegQueryValueEx(s,StrValue,nil,@ValueType,@MyData[0],@dLength)=0 then begin
Result:=MyData;
RegCloseKey(s);
end else begin
Result:='';
RegCloseKey(s);
end;
end;
function ValueExists(Root:HKEY;StrPath:pchar;StrValue:pchar):Boolean;
var s:Hkey; ValueType:DWORD;
begin
ValueType:=REG_SZ;
s:=OpenKey(Root,StrPath);
Result:=RegQueryValueEx(s,StrValue,nil,@ValueType,nil,nil)=0;
RegCloseKey(s);
end;
function KeyExists(Root:HKEY;StrPath:pchar;StrSub:pchar):Boolean;
var s:Hkey; Str:String;
begin
if StrPath<>nil then
Str:=Strpath+'\'+StrSub else Str:=StrSub;
s:=OpenKey(Root,pchar(Str));
Result:=s<>0;
if s<>0 then RegCloseKey(s);
end;
function GetValueName(Root:HKEY;StrPath:pchar;var Str:String):integer;
var s:Hkey;
Count:integer;
ValueName:array[0..100] of char;
BufSize,dType,dLength:DWORD;
IData: array[0..255] of char;
begin
Count:=0;
BufSize:=100 ;
dLength:=254;
s:=OpenKey(Root,StrPath);
if s<>0 then begin
while RegEnumValue(s,Count,ValueName,BufSize,nil,@dType,@iData,@dLength)=0 do begin
BufSize:=100;
dLength:=254;
Str:=Str+ValueName+',';
Count:=Count+1;
end;
RegCloseKey(s);
end;
if copy(Str,1,1)=',' then delete(Str,1,1);
if copy(Str,Length(str),1)=',' then delete(Str,Length(str),1);
Result:=Count;
end;
function GetKeyName(Root:HKEY;StrPath:pchar;var Str:String):integer;
var s:Hkey;
Count:integer;
BufSize:DWORD;
ValueName:array[0..100] of char;
begin
Count:=0;
BufSize:=100;
s:=OpenKey(Root,StrPath);
if s<>0 then begin
while RegEnumKeyEx(s,Count,ValueName,BufSize,nil,nil,nil,nil)=0 do begin
BufSize:=100;
Str:=Str+ValueName+',';
Count:=Count+1;
end;
RegCloseKey(s);
end;
if copy(Str,Length(str),1)=',' then delete(Str,Length(str),1);
Result:=Count;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -