Sign in Join
Wiki copytemporary

fcl-registry/es: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: fcl-registry/es

OldNewLine
1+fcl-registry es una unidad [[FCL]] que permite acceder al registro de Windows.
2+
3+## Terminología del Registro
4+
5+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".
6+
7+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.
8+
9+Ejemplos: HKEY_CLASSES_ROOT, HKEY_CURRENT_USER HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG
10+
11+Key: es la trayectoria al "directorio" que contiene los datos individuales. Puede parecer poco intuitivo pero aporta compatibilidad con versiones previas del registro.
12+
13+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).
14+
15+Una tabla con los diferentes tipos existentes la podéis consultar en:
16+
17+<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>
18+
19+## Ejemplo
20+
21+Ejemplo que trata de obtener un valor:
22+
23+``` pascal
24+uses ... registry... // registry es la unidad que vamos a necesitar para interactuar con el registro
25+
26+var
27+ CompileCommand: string='';
28+ Registry: TRegistry;
29+begin
30+ Registry := TRegistry.Create;
31+ try
32+ // Navegamos al "directorio" apropiado, en este caso escogemos HKEY_LOCAL_MACHINE.
33+ Registry.RootKey := HKEY_LOCAL_MACHINE; // Tener en cuenta que este paso es necesario para realizar los siguientes.
34+ if Registry.OpenKeyReadOnly('\SOFTWARE\Classes\InnoSetupScriptFile\shell\Compile\Command') then
35+ // Con lo anterior abrimos la llave en modo solo lectura.
36+ CompileCommand:=Registry.ReadString(''); // Como ya le hemos indicado el trayecto, ahora leemos el valor del nombre indicado.
37+ finally
38+ Registry.Free; // Liberamos el recurso creado con "Create".
39+ end;
40+end;
41+```
42+
43+## Accediendo a vistas del registro en 64 y 32 bits
44+
45+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.
46+
47+Puedes acceder a la parte de 32 desde una aplicación de 64 bits y viceversa. De MSDN:
48+
49+<http://msdn.microsoft.com/en-us/library/windows/desktop/aa384129%28v=vs.85%29.aspx>
50+
51+Adicionalmente:
52+
53+<https://blogs.msdn.microsoft.com/junfeng/2004/04/05/key_wow64_64key-and-key_wow64_32key>
54+
55+- KEY_WOW64_64KEY: Acceso a una llave de 64 bits tanto desde aplicaciones de 32 como de 64 bits.
56+- KEY_WOW64_32KEY: Acceso a una llave de 32 bits tanto desde aplicacioens de 32 como de 64 bits.
57+
58+Estas llaves se encuentran definidas en la unidad **registry** por lo que las puedes utilizar:
59+
60+e.g. en la propiedad de acceso del objeto registro, tal como la siguiente:
61+
62+``` pascal
63+Registry := TRegistry.Create;
64+Try
65+ Registry.Access:=Registry.Access or KEY_WOW64_64KEY;
66+```
67+
68+o en la llamada a crear (registry.create), e.g.
69+
70+``` pascal
71+TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
72+```
73+
74+## Privilegios Administrativos
75+
76+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|IDE_Window:_Project_Options#Use_manifest_file_to_set_execution_level_.28Windows_only.29]]
77+
78+## Programas con código de referencia
79+
80+Programas que sirven como referencia para estudiar su código en cuanto al uso del registro:
81+
82+**Enchanted Keyfinder:**
83+
84+- <https://sourceforge.net/projects/ekeyfinder/?source=directory>
85+- <https://github.com/samrocketman/ekeyfinder>
86+
87+Sería interesante portar este programa a Freepascal / Lazarus.
88+
89+## Consideraciones adicionales
90+
91+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 [[http://wiki.freepascal.org/Better Unicode Support in Lazarus]]. Para ello se puede añadir la unidad **LazUTF8** en la claúsula **uses**.
92+
93+## Ver También
94+
95+- [[Package List]]
96+
97+---
98+*From the Free Pascal wiki, page "fcl-registry/es", as it stood on 2020-02-14 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history