Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Leer y escribir en el Registro de configuraciones de Windows - regedit - Delphi
Lenguaje de programación Borland Delphi


TRegistry
La clase TRegistry está declarada en la unidad Registry, así que tendrá que añadirla a la cláusula uses de la unidad o programa donde quiera usarla. Para acceder a un dato en el registro primero debe crear un objeto de esta clase, asignar la raíz donde se encuentra el dato en la propiedad RootKey (los valores están definidos en la unidad Windows) y luego intentar abrir la clave donde está ese dato con el método OpenKey que devolverá True si tuvo éxito. Lugo puede leer (con las funciones ReadXxxx) o escribir (con los procedimientos WriteXxxx) los valores de la clave abierta y luego de eso, debe cerrar la clave con el método CloseKey. Cuando haya terminado con el registro, debería liberar el objeto creado.
Veamos un ejemplo de cómo obtener el nombre del procesador que posee nuestro ordenador:

uses Registry, Windows, Dialogs;

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TRegistry.Create do
    try
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKey('HardwareDescriptionSystem'
          + 'CentralProcessor', False) then begin
        ShowMessage(ReadString('Identifier'));
        CloseKey;
      end;
    finally
      Free;
    end;
end;
Por supuesto, hay muchas otras cosas que se pueden hacer con el registro, como crear y eliminar claves y valores...
La clase TRegistryIniFile hace fácil a las aplicaciones escribir y leer su información de configuración en y desde el registro, mientras que TRegistry opera a un nivel más bajo.
--------------------------------------------------------------------------------
GetRegistryData
Para simplificar la lectura de valores de datos del registro puede usar la siguiente función capaz de leer cualquier tipo de dato del registro y lo devuelve como un variant (string o integer). La función realiza tratamiento de excepciones.
uses Registry, Windows, SysUtils;

function GetRegistryData(RootKey: HKEY; Key, Value: string): variant;
var
  Reg: TRegistry;
  RegDataType: TRegDataType;
  DataSize, Len: integer;
  s: string;
label cantread;
begin
  Reg := nil;
  try
    Reg := TRegistry.Create(KEY_QUERY_VALUE);
    Reg.RootKey := RootKey;
    if Reg.OpenKeyReadOnly(Key) then begin
      try
        RegDataType := Reg.GetDataType(Value);
        if (RegDataType = rdString) or
           (RegDataType = rdExpandString) then
          Result := Reg.ReadString(Value)
        else if RegDataType = rdInteger then
          Result := Reg.ReadInteger(Value)
        else if RegDataType = rdBinary then begin
          DataSize := Reg.GetDataSize(Value);
          if DataSize = -1 then goto cantread;
          SetLength(s, DataSize);
          Len := Reg.ReadBinaryData(Value, PChar(s)^, DataSize);
          if Len <> DataSize then goto cantread;
          Result := s;
        end else
cantread:
          raise Exception.Create(SysErrorMessage(ERROR_CANTREAD));
      except
        s := ''; // Deallocates memory if allocated
        Reg.CloseKey;
        raise;
      end;
      Reg.CloseKey;
    end else
      raise Exception.Create(SysErrorMessage(GetLastError));
  except
    Reg.Free;
    raise;
  end;
  Reg.Free;
end;
Llamada de ejemplo
ShowMessage(GetRegistryData(HKEY_LOCAL_MACHINE,
  'HardwareDescriptionSystemCentralProcessor', 'Identifier'));
--------------------------------------------------------------------------------
SetRegistryData
Para simplificar la escritura de un valor de datos en el registro puede usar el siguiente procedimiento capaz de escribir cualquier tipo de datos en el registro. El procedimiento tratamiento de excepciones.
uses Registry, Windows, SysUtils;

procedure SetRegistryData(RootKey: HKEY; Key, Value: string;
  RegDataType: TRegDataType; Data: variant);
var
  Reg: TRegistry;
  s: string;
begin
  Reg := TRegistry.Create(KEY_WRITE);
  try
    Reg.RootKey := RootKey;
    if Reg.OpenKey(Key, True) then begin
      try
        if RegDataType = rdUnknown then
          RegDataType := Reg.GetDataType(Value);
        if RegDataType = rdString then
          Reg.WriteString(Value, Data)
        else if RegDataType = rdExpandString then
          Reg.WriteExpandString(Value, Data)
        else if RegDataType = rdInteger then
          Reg.WriteInteger(Value, Data)
        else if RegDataType = rdBinary then begin
          s := Data;
          Reg.WriteBinaryData(Value, PChar(s)^, Length(s));
        end else
          raise Exception.Create(SysErrorMessage(ERROR_CANTWRITE));
      except
        Reg.CloseKey;
        raise;
      end;
      Reg.CloseKey;
    end else
      raise Exception.Create(SysErrorMessage(GetLastError));
  finally
    Reg.Free;
  end;
end;
Llamada de ejemplo
SetRegistryData(HKEY_LOCAL_MACHINE,
  'SoftwareMicrosoftWindowsCurrentVersion',
  'RegisteredOrganization', rdString, 'Latium Software');


Truco obtenido de: http://www.q3.nu/trucomania



Publicado el: 2003-10-05

Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A