Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-10-2015
cavdrz cavdrz is offline
Registrado
NULL
 
Registrado: dic 2013
Posts: 5
Poder: 0
cavdrz Va por buen camino
Borrar Clave Y Subclave Del Regedit De Windows

HOla como están, veran mi duda es que si alguién sabe como se puede eliminar desde delphi una rama del registro con varias subclaves (HKEY_LOCAL_MACHINE\SOTWARE\1\2\3), esto es lo que tengo, pero no me funciona cuando hay varias subclaves, solo si hay una si me la elimina:

Código Delphi [-]
function DeleteRegistryKey(const RootKey: HKEY; const Key: String): Boolean; 
var Handle : HKEY;     
K, N   : String; 
begin   
  SplitRegName(Key, K, N);   
  if RegOpenKeyEx(RootKey, PChar(K), 0, KEY_WRITE or KEY_WOW64_64KEY, Handle) = ERROR_SUCCESS then     
  begin       
    Result := RegDeleteKey(Handle, Pointer(N)) = ERROR_SUCCESS;       
    RegCloseKey(Handle);     
  end else     
    Result := False; 
end;
espero que me puedan ayudar, gracias.

Última edición por dec fecha: 01-11-2015 a las 10:17:24.
Responder Con Cita
  #2  
Antiguo 01-11-2015
luisito12382 luisito12382 is offline
Registrado
NULL
 
Registrado: oct 2015
Posts: 5
Poder: 0
luisito12382 Va por buen camino
elimina el boolean y ponle string aver si funciona
Responder Con Cita
  #3  
Antiguo 01-11-2015
cavdrz cavdrz is offline
Registrado
NULL
 
Registrado: dic 2013
Posts: 5
Poder: 0
cavdrz Va por buen camino
Gracias por responder, fijate que lo hice pero me tira un error de compilación (AnsiString), espero que me puedan dar soporte, estoy empezando con este potente lenguaje.
Responder Con Cita
  #4  
Antiguo 01-11-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Qué devuelve en Result?
Responder Con Cita
  #5  
Antiguo 01-11-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Igual no tienes permisos para borrar claves en la raíz "LOCAL_MACHINE", puesto que, si no me equivoco, necesitas permisos de "administrador". Por otro lado, hace poco me topé con un problema en cierto proyecto que usaba, directamente, las funciones "RegOpenKeyEx" del API de Windows. Dicho problema lo solucioné usando la clase "TRegistry" que incluye Delphi. En fin, igual esto te sirve de algo...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 01-11-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola cavdrz.

Revisa si te funciona la propuesta del mensaje #4 de este enlace: How to delete a registry key (and its subkey/values) under Windows NT?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 01-11-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Sobre la función que ya tienes basada en API y no en TRegistry, vamos a enumerar las subclaves posibles y borrarlas todas en una función recursiva:

Código Delphi [-]
function DeleteRegistryKey(const RootKey: HKEY; const Key: String): Boolean;
var
  Handle : HKEY;
  Subkey: array[0..255] of CHAR;
  PathKey: String;
  Index: integer;
begin
  Result := False;
  if RegOpenKeyEx(RootKey, PChar(Key), 0, KEY_ALL_ACCESS or KEY_WOW64_64KEY, Handle) = ERROR_SUCCESS then
  begin
    Index:= 0;
    while ERROR_SUCCESS = RegEnumKey(Handle, Index, @Subkey[0], sizeof(Subkey)-1) do
    begin
      PathKey:= Key + '\' + String(Subkey);
      DeleteRegistryKey(RootKey, PathKey);
      inc(Index);
    end;
    RegCloseKey(Handle);
    if RegOpenKeyEx(RootKey, PChar(ExtractFilePath(Key)), 0, KEY_ALL_ACCESS or KEY_WOW64_64KEY, Handle) = ERROR_SUCCESS then
    begin
      Result := RegDeleteKey(Handle, PCHAR(ExtractFileName(Key))) = ERROR_SUCCESS;
      RegCloseKey(Handle);
    end;
  end else
    Result := False;
end;


Saludos.

Última edición por escafandra fecha: 01-11-2015 a las 20:38:24.
Responder Con Cita
  #8  
Antiguo 07-11-2015
cavdrz cavdrz is offline
Registrado
NULL
 
Registrado: dic 2013
Posts: 5
Poder: 0
cavdrz Va por buen camino
Gracias por responder, tenias la razón con la nueva función que me diste, funciona a la perfección, gracias.
Responder Con Cita
  #9  
Antiguo 08-11-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
cavdrz, no te pregunté por el S.O. que usas así que modifiqué la función para que trabajara desde XP.
En el caso de Vista en adelante puedes usar la API RegDeleteTree, hace lo mismo con un código de una sola función, pero ojo, tu programa no funcionará en WinXP.


Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como borrar una carpeta del regedit desde mi Aplicacion carlosprotos Varios 2 25-11-2014 02:10:20
Introducir una clave en el REGEDIT alejozd Varios 2 21-09-2010 23:51:31
escribir y leer clave regedit ingmichel Internet 3 05-05-2010 18:14:46
Crear una clave en el Regedit de Windows XP BuRtOn Varios 0 02-09-2008 01:41:29
Clave del Regedit.... Phacko Varios 2 14-03-2005 13:08:51


La franja horaria es GMT +2. Ahora son las 14:06:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi