Suppression récursive d'un clé de la base de registre
Date de publication : 24/02/2005
Par
Pierre Castelain (Contributions)
Fonction permettant de supprimer une clé de la base de registre même si elle n'est pas vide
Sous Windows NT (NT4, 2000, XP, 2003, etc) il n'est pas possible de supprimer directement
une clé qui n'est pas vide. Cette fonction se charge de réaliser la suppression récursive
des éléments contenus dans la clé avant de la supprimer.
interface
uses
Windows, Registry;
function DeleteKeyTree(Root: HKey; Key: string): Boolean; overload;
function DeleteKeyTree(reg: TRegistry; Key: string): Boolean; overload;
implementation
uses
Classes, SysUtils;
function DeleteKeyTree(Root: HKey; Key: string): Boolean;
var
reg: TRegistry;
begin
reg:= TRegistry.Create;
try
reg.RootKey:= Root;
result:= DeleteKeyTree(reg, Key);
finally
reg.Free;
end;
end;
function DeleteKeyTree(reg: TRegistry; key: string): Boolean;
var
sl: TStringList;
i: Integer;
begin
Result:= True;
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
if reg.KeyExists(key) then
begin
reg.OpenKey(key, false);
if reg.HasSubKeys then
begin
sl:= TStringList.Create;
try
reg.GetKeyNames(sl);
reg.CloseKey;
for i:=0 to sl.Count-1 do
Result:= Result and DeleteKeyTree(reg, key+'\'+sl.Strings[i]);
sl.Free;
except
sl.Free;
reg.CloseKey;
raise;
end;
end
else
begin
reg.CloseKey;
Result:= reg.DeleteKey(key);
end;
reg.CloseKey;
end
else
Result:= False;
end
else
reg.DeleteKey(key);
end;
|