Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Comprobar llave en el Registro (https://www.clubdelphi.com/foros/showthread.php?t=75535)

KnoX_RuS 31-08-2011 13:30:06

Comprobar llave en el Registro
 
Hola a todos.

La duda es como puedo averiguar si una determinada llave existe en el registro, osea por ejemplo si la llave existe me abra un mensaje diciendo que esta y si no pues no.

El caso que leer y escribir en registro se pero no consigo hacer eso con un If y else.

salu2

ecfisa 31-08-2011 13:52:41

Hola KnoX_RuS.

Código Delphi [-]
...
uses Registry, StrUtils;

function ExistsKey(const ARootKey: HKEY; const AKey: string): Boolean;
begin
  Result:= True;
  with TRegistry.Create do
  try
    RootKey := ARootKey;
    if not OpenKey(AKey, False) then
      Result:= False;
  finally
    Free
  end
end;

Llamada de ejemplo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
const
  Valor = '\Software\Microsoft\Windows\CurrentVersion';
begin
  Caption:= IfThen(ExistsKey(HKEY_LOCAL_MACHINE, Valor), 'Existe', 'No existe');
end;

Un saludo.

Metal_Kingdom 31-08-2011 14:06:43

Hola KnoX, creo que ya me conoces..

Para hacerlo, puedes usar KeyExists, declarando previamente el unit registry en Uses y la clase TRegistry.

La opción de nuestro amigo ecfisa es completamente válida también.

Un saludo!

KnoX_RuS 31-08-2011 19:44:25

Hey que hay metal, gracias a los 2 consegui solucionarlo con buestra ayuda.


salu2

KnoX_RuS 01-09-2011 16:09:52

Bueno lo quise hacer con keyExist y no me salio.

Lo hice asi:
Código:

program Project1;

uses
  windows,
  SysUtils,
  Registry;
Var
  Registro:TRegistry;
begin
If Registro.KeyExists('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\Sidebar') then begin
MessageBoxA(0,'LLave encontrada!','Bien', 64);
end;
MessageBoxA(0,'LLave no encontrada!','Mal', 64);

end.

Donde los MessageBoxA iria otro code eso lo puse para comprovar si funciona.

salu2 y gracias

ecfisa 01-09-2011 16:23:05

Hola.

Código Delphi [-]
...
uses Registry;
...
begin
 with TRegistry.Create do
   if KeyExists('Software\Microsoft\Windows\CurrentVersion\Run\Sidebar') then
     MessageBoxA(0,'LLave encontrada!','Bien', 64)
   else
     MessageBoxA(0,'LLave no encontrada!','Mal', 64)
end;
...

Saludos.

KnoX_RuS 01-09-2011 16:30:53

Bueno me da error en el penultimo end;

Código:

program Project1;

uses
  windows,
  SysUtils,
  Registry;
begin
 with TRegistry.Create do
  if KeyExists('Software\Microsoft\Windows\CurrentVersion\Run\Sidebar') then
    MessageBoxA(0,'LLave encontrada!','Bien', 64)
  else
    MessageBoxA(0,'LLave no encontrada!','Mal', 64)
end;
end.

Y me hace falta mirarlo en HKEY_CURRENT_USER osea siempre me dice que no se encontro la llave cuando borro ese penultimo end;

salu2 y gracias por la ayuda que me estas dando.

ecfisa 01-09-2011 16:44:28

Hola.

Disculpá, lo hice de memoria y me olvidé de RootKey... :o:)


Código Delphi [-]
begin
  with TRegistry.Create do
  begin
    RootKey:= HKEY_CURRENT_USER;
    if KeyExists('Software\Microsoft\Windows\CurrentVersion\Run\Sidebar') then
      MessageBoxA(0,'LLave encontrada!','Bien', 64)
    else
      MessageBoxA(0,'LLave no encontrada!','Mal', 64);
  end;
end;

Saludos.

KnoX_RuS 01-09-2011 17:14:23

Humm el code parece estar bien del todo pero me sige dando llave no encontrada cuando esa llave si existe en cualquier windows 7.

saludos.

ecfisa 01-09-2011 17:40:52

Cita:

Empezado por KnoX_RuS (Mensaje 410606)
Humm el code parece estar bien del todo pero me sige dando llave no encontrada cuando esa llave si existe en cualquier windows 7.

saludos.

Hola.

La verdad no puedo decir nada por que no tengo Windows 7, pero hice esta prueba que funciona sin problemas:
Código Delphi [-]
uses Registry;

procedure TForm1.Button1Click(Sender: TObject);
const
  AKEY: array[0..1] of string=('Software\Microsoft\Windows\CurrentVersion', // existente
                               'Software\Microsoft\Windows\CurrentVerXXXX'); // inexistente
var
  v: Integer;
  r: TRegistry;
begin
  Randomize;
  v:= Random(2);
  with TRegistry.Create do
  try
    RootKey:= HKEY_CURRENT_USER;
    if KeyExists(AKEY[v]) then
      MessageBoxA(0,PChar(AKEY[v]+': Encontrada'),'Bien', 64)
    else
      MessageBoxA(0,PChar(AKEY[v]+': No existe'),'Mal', 64);
  finally
    Free;
  end;
end;

Un saludo.

KnoX_RuS 01-09-2011 17:42:24

Estuve viendo y si pongo solo direccion de carpeta '\Software\Microsoft\Windows\CurrentVersion\Run\' si dice que existe pero las llaves de las carpetas no las comprueva osea si pongo '\Software\Microsoft\Windows\CurrentVersion\Run\Sidebar' dice que no existe.


saludos.

ecfisa 01-09-2011 18:04:45

Hola.

Ahora veo..., lo que sucede es que lo que estas buscando no es una clave es un valor.

Entonces en tu caso sería:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  with TRegistry.Create do
  try
    RootKey:= HKEY_CURRENT_USER;
    if OpenKey('Software\Microsoft\Windows\CurrentVersion\Run\', False) then
      if ValueExists('Sidebar') then
        ShowMessage('Valor existente')
      else
        ShowMessage('Valor inexistente');
  finally
    Free;
  end;
end;

Saludos.

KnoX_RuS 01-09-2011 18:08:15

Ostia es verda, perdoname por confundirte ahora sique si jeje.

Muchas gracias y saludos! :D


La franja horaria es GMT +2. Ahora son las 00:27:07.

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