IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

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; { ---------------------------------------------------------------------------- } { Efface la clé 'key' de la base de registre 'reg' et toutes ses sous-clés } { récursivement. Sous 95 le fait d'effacer la clé supprime aussi les } { sous clés, mais pas sous NT d'où cette fonction. (PC) } {------------------------------------------------------------------------------} 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); // False -> ne pas créer la clé si elle n'existe pas. 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; // Juste au cas où. end else Result:= False; // La clé n'existe pas. end else // Win32s, Win95, Win98, Win00? reg.DeleteKey(key); end;