Difference between revisions of "fcl-registry/es"

From Lazarus wiki
Jump to navigationJump to search
m (Fixed syntax highlighting; deleted category included in page template)
 
(26 intermediate revisions by one other user not shown)
Line 1: Line 1:
 
 
{{fcl-registry}}
 
{{fcl-registry}}
  
Line 6: Line 5:
 
== Terminología del Registro ==
 
== Terminología del Registro ==
  
El registro de Windows contiene un conjunto de entradas o apartados bien diferenciados que denominan "hives", que van creando una estructura en árbol a partir de su raiz "root".
+
El registro de Windows contiene un conjunto de entradas o apartados bien diferenciados que se denominan "hives", que van creando una estructura en árbol a partir de su raiz "root".
  
RootKey: es la entrada "hive" que necesaria como comienzo para acceder al registro, como su nombre indica el la "llave raiz" comenzando con la H de Hive.
+
RootKey: es la entrada "hive" necesaria como comienzo para acceder al registro, como su nombre indica es la "llave raiz" comenzando con la H de Hive.
  
 
Ejemplos: HKEY_CLASSES_ROOT, HKEY_CURRENT_USER HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG
 
Ejemplos: HKEY_CLASSES_ROOT, HKEY_CURRENT_USER HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG
  
Key: es la trayectoria al "directorio" que contiene los datos individuales.  This is a bit counter-intuitive but a holdover con versiones previas del registro.
+
Key: es la trayectoria al "directorio" que contiene los datos individuales.  Puede parecer poco intuitivo pero aporta compatibilidad con versiones previas del registro.
 +
 
 +
Name/value (Nombre/Valor): los pares actuales name/value en el directorio de la llave "Key". Cada llave puede tener un valor por defecto cuyo valor es '''''''' (una cadena vacía).
 +
 
 +
Una tabla con los diferentes tipos existentes la podéis consultar en:
  
Name/value (Nombre/Valor): los pares actuales name/value en el directorio de la llave "Key" .Cada llave puede tener un valor por defecto cuyo valor es '' (una cadena vacía).
+
http://wiki.lazarus.freepascal.org/registry_key_datatypes/es  y https://msdn.microsoft.com/en-us/library/windows/desktop/ms724884%28v=vs.85%29.aspx
  
 
== Ejemplo ==
 
== Ejemplo ==
Line 20: Line 23:
 
Ejemplo que trata de obtener un valor:
 
Ejemplo que trata de obtener un valor:
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
uses ... registry...
+
uses ... registry... // registry es la unidad que vamos a necesitar para interactuar con el registro
  
 
var
 
var
Line 29: Line 32:
 
   Registry := TRegistry.Create;
 
   Registry := TRegistry.Create;
 
   try
 
   try
     // Navigate to proper "directory":
+
     // Navegamos al "directorio" apropiado, en este caso escogemos HKEY_LOCAL_MACHINE.
     Registry.RootKey := HKEY_LOCAL_MACHINE;
+
     Registry.RootKey := HKEY_LOCAL_MACHINE; // Tener en cuenta que este paso es necesario para realizar los siguientes.
 
     if Registry.OpenKeyReadOnly('\SOFTWARE\Classes\InnoSetupScriptFile\shell\Compile\Command') then
 
     if Registry.OpenKeyReadOnly('\SOFTWARE\Classes\InnoSetupScriptFile\shell\Compile\Command') then
       CompileCommand:=Registry.ReadString(''); //read the value of the default name
+
    // Con lo anterior abrimos la llave en modo solo lectura.
 +
       CompileCommand:=Registry.ReadString(''); // Como ya le hemos indicado el trayecto, ahora leemos el valor del nombre indicado.
 
   finally
 
   finally
     Registry.Free;
+
     Registry.Free; // Liberamos el recurso creado con "Create".
 
   end;
 
   end;
 
end;
 
end;
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== Accessing 64 bit and 32 bit registry views ==
+
== Accediendo a vistas del registro en 64 y 32 bits ==
If you have 64 bit Windows, the registry is split up into a 64 bit and 32 bit (compatibility) part. By default, if you run a 32 bit process, you see the 32 bit part; if you run a 64 bit application, you see the 64 bit part.
+
 
 +
Si tienes un sistema operativo de Windows de 64 bits, entonces el registro se encuentra repartido en 64 bits y 32 bits (compatibilidad)
 +
. Por defecto si arrancas un proceso de 32 bits entonces ves la parte correspondiente a la de 32 bits, mientras que si arrancas una de 64 bits entonces verá la parte de 64.
 +
 
 +
Puedes acceder a la parte de 32 desde una aplicación de 64 bits y viceversa. De MSDN:
  
You can also access the 32 bit part from 64 bit applications and vice versa. From MSDN:
 
 
http://msdn.microsoft.com/en-us/library/windows/desktop/aa384129%28v=vs.85%29.aspx
 
http://msdn.microsoft.com/en-us/library/windows/desktop/aa384129%28v=vs.85%29.aspx
* KEY_WOW64_64KEY: Access a 64-bit key from either a 32-bit or 64-bit application.
+
 
* KEY_WOW64_32KEY: Access a 32-bit key from either a 32-bit or 64-bit application.
+
Adicionalmente:
These keys are defined in the registry unit so you can just use them:
+
 
e.g. in the registry object's Access property, like this:
+
https://blogs.msdn.microsoft.com/junfeng/2004/04/05/key_wow64_64key-and-key_wow64_32key
<syntaxhighlight>Registry := TRegistry.Create;
+
 
 +
* KEY_WOW64_64KEY: Acceso a una llave de 64 bits tanto desde aplicaciones de 32 como de 64 bits.
 +
* KEY_WOW64_32KEY: Acceso a una llave de 32 bits tanto desde aplicacioens de 32 como de 64 bits.
 +
 
 +
Estas llaves se encuentran definidas en la unidad '''registry''' por lo que las puedes utilizar:
 +
 
 +
e.g. en la propiedad de acceso del objeto registro, tal como la siguiente:
 +
 
 +
<syntaxhighlight lang=pascal>Registry := TRegistry.Create;
 
Try
 
Try
 
   Registry.Access:=Registry.Access or KEY_WOW64_64KEY;
 
   Registry.Access:=Registry.Access or KEY_WOW64_64KEY;
 
</syntaxhighlight>
 
</syntaxhighlight>
  
or in the registry.create call, e.g.  
+
o en la llamada a crear (registry.create), e.g.  
<syntaxhighlight>TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);</syntaxhighlight>
+
<syntaxhighlight lang=pascal>TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);</syntaxhighlight>
  
== Administrative privileges ==
+
== Privilegios Administrativos ==
Depending on what you want to read/write in the registry, you may need administrator rights and  elevation (Windows Vista+). Please see [[IDE_Window:_Project_Options#Use_manifest_file_to_set_execution_level_.28Windows_only.29]]
 
  
== See also ==
+
Dependiendo de lo que necesites leer/escribir en el registro, puede que necesites tener derechos de administrador y elevación de privilegios (Windows Vista+). Hecha un vistazo a  [[IDE_Window:_Project_Options#Use_manifest_file_to_set_execution_level_.28Windows_only.29]]
[[Packages List]]
 
  
[[Category:FCL]]
 
[[Category:FPC]]
 
[[Category:Standard Units]]
 
  
 +
== Programas con código de referencia ==
  
{{fcl-registry}}
+
Programas que sirven como referencia para estudiar su código en cuanto al uso del registro:
  
== Registry terms ==
+
'''Enchanted Keyfinder:'''
RootKey (llave raíz): Entradas de registro de almacenaiento (registry hive) donde necesitas comenzar el acceso al registro. EJEMPLOS: HKEY_CLASSES_ROOT,  HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG
 
  
Key (llave): la trayectoria al "directorio" que contiene los datos individuales. This is a bit counter-intuitive pero es un vestigio para mantener la compatibilidad con versiones anteriores del registro.
+
* https://sourceforge.net/projects/ekeyfinder/?source=directory
 +
* https://github.com/samrocketman/ekeyfinder
  
Name/value: the actual name/value pairs in the Key "directory". Each key can have a default value, whose name is '' (an empty string.
+
Sería interesante portar este programa a Freepascal / Lazarus.
  
== Example ==
+
== Consideraciones adicionales ==
Example that tries to get a value:
 
<syntaxhighlight>
 
uses ... registry...
 
  
var
+
Para caracteres no estandar, como serían las vocales acentuadas, para visualizar los valores del registro por ejemplo del tipo REG_SZ,
  CompileCommand: string='';
+
se puede transformar dichos valores mediante el uso de la función '''WinCPToUTF8 ('''const s: string''')''': string;, más información en [[http://wiki.freepascal.org/Better_Unicode_Support_in_Lazarus]].
  Registry: TRegistry;
+
Para ello se puede añadir la unidad '''LazUTF8''' en la claúsula '''uses'''.
begin
 
  Registry := TRegistry.Create;
 
  try
 
    // Navigate to proper "directory":
 
    Registry.RootKey := HKEY_LOCAL_MACHINE;
 
    if Registry.OpenKeyReadOnly('\SOFTWARE\Classes\InnoSetupScriptFile\shell\Compile\Command') then
 
      CompileCommand:=Registry.ReadString(''); //read the value of the default name
 
  finally
 
    Registry.Free;
 
  end;
 
end;
 
</syntaxhighlight>
 
  
== See also ==
+
== Ver También ==
[[Packages List]]
 
  
[[Category:FCL/es]]
+
* [[Package List]]
[[Category:FPC/es]]
 
[[Category:Standard Units/es]]
 

Latest revision as of 23:56, 14 February 2020

English (en) español (es) русский (ru)

fcl-registry es una unidad FCL que permite acceder al registro de Windows.

Terminología del Registro

El registro de Windows contiene un conjunto de entradas o apartados bien diferenciados que se denominan "hives", que van creando una estructura en árbol a partir de su raiz "root".

RootKey: es la entrada "hive" necesaria como comienzo para acceder al registro, como su nombre indica es la "llave raiz" comenzando con la H de Hive.

Ejemplos: HKEY_CLASSES_ROOT, HKEY_CURRENT_USER HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG

Key: es la trayectoria al "directorio" que contiene los datos individuales. Puede parecer poco intuitivo pero aporta compatibilidad con versiones previas del registro.

Name/value (Nombre/Valor): los pares actuales name/value en el directorio de la llave "Key". Cada llave puede tener un valor por defecto cuyo valor es ''' (una cadena vacía).

Una tabla con los diferentes tipos existentes la podéis consultar en:

http://wiki.lazarus.freepascal.org/registry_key_datatypes/es y https://msdn.microsoft.com/en-us/library/windows/desktop/ms724884%28v=vs.85%29.aspx

Ejemplo

Ejemplo que trata de obtener un valor:

uses ... registry...  // registry es la unidad que vamos a necesitar para interactuar con el registro

var
  CompileCommand: string='';
  Registry: TRegistry;
begin
  Registry := TRegistry.Create;
  try
    // Navegamos al "directorio" apropiado, en este caso escogemos HKEY_LOCAL_MACHINE.
    Registry.RootKey := HKEY_LOCAL_MACHINE; // Tener en cuenta que este paso es necesario para realizar los siguientes.
    if Registry.OpenKeyReadOnly('\SOFTWARE\Classes\InnoSetupScriptFile\shell\Compile\Command') then
    // Con lo anterior abrimos la llave en modo solo lectura.
      CompileCommand:=Registry.ReadString(''); // Como ya le hemos indicado el trayecto, ahora leemos el valor del nombre indicado.
  finally
    Registry.Free; // Liberamos el recurso creado con "Create".
  end;
end;

Accediendo a vistas del registro en 64 y 32 bits

Si tienes un sistema operativo de Windows de 64 bits, entonces el registro se encuentra repartido en 64 bits y 32 bits (compatibilidad) . Por defecto si arrancas un proceso de 32 bits entonces ves la parte correspondiente a la de 32 bits, mientras que si arrancas una de 64 bits entonces verá la parte de 64.

Puedes acceder a la parte de 32 desde una aplicación de 64 bits y viceversa. De MSDN:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa384129%28v=vs.85%29.aspx

Adicionalmente:

https://blogs.msdn.microsoft.com/junfeng/2004/04/05/key_wow64_64key-and-key_wow64_32key

  • KEY_WOW64_64KEY: Acceso a una llave de 64 bits tanto desde aplicaciones de 32 como de 64 bits.
  • KEY_WOW64_32KEY: Acceso a una llave de 32 bits tanto desde aplicacioens de 32 como de 64 bits.

Estas llaves se encuentran definidas en la unidad registry por lo que las puedes utilizar:

e.g. en la propiedad de acceso del objeto registro, tal como la siguiente:

Registry := TRegistry.Create;
Try
  Registry.Access:=Registry.Access or KEY_WOW64_64KEY;

o en la llamada a crear (registry.create), e.g.

TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);

Privilegios Administrativos

Dependiendo de lo que necesites leer/escribir en el registro, puede que necesites tener derechos de administrador y elevación de privilegios (Windows Vista+). Hecha un vistazo a IDE_Window:_Project_Options#Use_manifest_file_to_set_execution_level_.28Windows_only.29


Programas con código de referencia

Programas que sirven como referencia para estudiar su código en cuanto al uso del registro:

Enchanted Keyfinder:

Sería interesante portar este programa a Freepascal / Lazarus.

Consideraciones adicionales

Para caracteres no estandar, como serían las vocales acentuadas, para visualizar los valores del registro por ejemplo del tipo REG_SZ, se puede transformar dichos valores mediante el uso de la función WinCPToUTF8 (const s: string): string;, más información en [[1]]. Para ello se puede añadir la unidad LazUTF8 en la claúsula uses.

Ver También