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)
 
(20 intermediate revisions by one other user not shown)
Line 1: Line 1:
 
 
{{fcl-registry}}
 
{{fcl-registry}}
  
Line 15: Line 14:
  
 
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).
 
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 ==
Line 20: Line 23:
 
Ejemplo que trata de obtener un valor:
 
Ejemplo que trata de obtener un valor:
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
uses ... registry...  // registry es la unidad que vamos a necesitar para interactuar con el registro
 
uses ... registry...  // registry es la unidad que vamos a necesitar para interactuar con el registro
  
Line 40: Line 43:
 
</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>
 +
 
 +
== 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]]
 +
 
  
== Administrative privileges ==
+
== Programas con código de referencia ==
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 ==
+
Programas que sirven como referencia para estudiar su código en cuanto al uso del registro:
[[Packages List]]
 
  
[[Category:FCL]]
+
'''Enchanted Keyfinder:'''
[[Category:FPC]]
 
[[Category:Standard Units]]
 
  
 +
* https://sourceforge.net/projects/ekeyfinder/?source=directory
 +
* https://github.com/samrocketman/ekeyfinder
  
{{fcl-registry}}
+
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 22: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