Es donde Windows guarda muchas de sus opciones de configuración y también permite a las aplicaciones acceder a estos datos, así como guardar sus propios datos.
Si desea echar un vistazo al registro simplemente ejecute la aplicación REGEDIT.EXE localizada en su directorio de Windows. Tenga cuidado de no cambiar nada o podría terminar arruinado su instalación! Ahora bien, los datos se guardan en el registro en forma de una estructura de árbol. Hay varias raíces (varios árboles):
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_PERFORMANCE_DATA
HKEY_CURRENT_CONFIG
HKEY_DYN_DATA
Cada raíz contiene valores y claves. Los valores son datos guardados bajo nombres de elementos (panel derecho de RegEdit). Las claves pueden tener valores así como otras claves, formando una estructura de árbol (panel izquierdo de RegEdit).
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:
delphi
uses Registry, Windows, Dialogs; procedure TForm1.Button1Click(Sender: TObject); begin with TRegistry.Create do try RootKey := HKEY_LOCAL_MACHINE; if OpenKey('\Hardware\Description\System' + '\CentralProcessor\0', False) then begin ShowMessage(ReadString('Identifier')); CloseKey; end; finally Free; end; end;
Puede ver otro ejemplo en el artículo Determinando la aplicación asociada
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.
delphi
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
delphi
ShowMessage(GetRegistryData(HKEY_LOCAL_MACHINE, '\Hardware\Description\System\CentralProcessor\0', '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.
delphi
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
delphi
SetRegistryData(HKEY_LOCAL_MACHINE, '\Software\Microsoft\Windows\CurrentVersion', 'RegisteredOrganization', rdString, 'Latium Software');
FUENTE: http://www.latiumsof...elphi/00004.php
Cualquier duda o pregunta con respecto a este artículo, puedes abrir un hilo en el foro adecuado