Red de conocimiento informático - Computadora portátil - Explicación detallada de los ejemplos de programación del registro de C++Builder

Explicación detallada de los ejemplos de programación del registro de C++Builder

1. Explicación detallada de la programación del registro

El registro de Windows contiene la configuración del sistema, la configuración del hardware de la máquina, las aplicaciones Win32 y otra información de configuración del usuario. Muchas funciones avanzadas se implementan mediante el funcionamiento del registro. WinAPI proporciona RegCgreateKey (), RegOpenKey (), RegQueryValue () y otras funciones para operar el registro, pero usar estas funciones para operar el registro es muy problemático. Usando la clase TREGISTRY de C++Builder, podemos operar fácilmente el registro. Primero permítanme presentarles cómo usar la clase TRegistry.

1. Preparativos antes de su uso:

Primero, el archivo de encabezado que define el módulo de clase debe incluirse al comienzo del programa:

#include -registry .hpp-

En segundo lugar, cree una instancia (objeto) de la clase en toda la variable (es decir, antes de todas las funciones):

TRegistry * nombre de instancia=new TRegistry() ;

Nota: No podemos usar el método de declaración directa para generar una instancia de TREGISTRY, que es diferente del método de usar HKEY para generar una instancia directamente en VC++. Debe utilizar la nueva palabra clave para generar una instancia de la clase TREGISTRY y luego pasar el puntero a la variable declarada. Después de declararse de esta manera, el atributo RootKey de la instancia apunta a la clave raíz HKEY_CURRENT_USER, es decir, la operación predeterminada se realiza en HKEY_CURRENT_USER.

2. Introducción a atributos y métodos comunes:

(1) Atributo de clave raíz actual (RootKey):

El atributo RootKey define la raíz actual del clave de instancia de clase de registro, el valor predeterminado es HKEY_LOCAL_USER. Si necesitamos operar el registro con otras claves raíz, podemos modificar el atributo RootKey:

MyReg->RootKey= nombre de clave raíz

<. p>BCB Existen las siguientes definiciones para la clave raíz del registro: HKEY_CURRENT_USER, HKEY_CLASSES_ROOT, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG, HKEY_DYN_DATA, HKEY_USERS. Corresponde a la clave primaria correspondiente en el registro. (Este atributo es de tipo int)

(2) Atributo de descripción de texto del valor clave actual (CurrentPath):

El atributo CurrentPath define la descripción de texto del valor clave actual de el registro, como\ CurrentPath=-Software\Borland- para HKEY_CURRENT_USER\Software\Borland y RootKey=HKEY_CURRENT_USER (este atributo es de tipo AnsiString).

(3) Si se debe hacer que el valor modificado se refleje inmediatamente en el registro (LazyWrite):

La función de este atributo es determinar si el valor modificado se reflejará inmediatamente después del Se realiza la operación de escritura. Los cambios se reflejan en el registro real. El valor de esta propiedad se inicializa en verdadero cuando se construye el objeto de registro, es decir, los cambios no se reflejan inmediatamente en el registro real, sino que el registro se reescribe después de ejecutar la función CloseKey(), lo que puede mejorar el rendimiento del sistema. Sin embargo, si necesitamos que la modificación se refleje inmediatamente en el registro (lo cual es necesario en muchas ocasiones), primero debemos establecer la propiedad LazyWrite en false y luego realizar la operación de modificación.

(4) Función de creación de clave principal:

bool __fastcall CreateKey(nombre de clave principal

Si la clave principal ya existe, sobrescriba la clave principal original); . Si desea crear la clave principal "MyReg" bajo la clave principal actual, puede usar "CreateKey(-MyReg-)" y "CreateKey(-\\MyReg-)" para crear la clave principal MyKey bajo la raíz actual. llave.

(5) Función de eliminación de clave principal:

bool __fastcall DeleteKey(nombre de clave principal

Si el parámetro es una cadena vacía, elimine la clave actual); valor.

(6) Abra la función de clave principal:

bool __fastcall OpenKey(nombre de clave principal, parámetros

Esta función ubicará una posición de clave principal específica); y luego Las operaciones (crear valor de clave, eliminar valor de clave, crear clave principal en la ubicación actual, eliminar clave principal) utilizarán esta clave principal como clave principal actual. Si el parámetro es Verdadero, se creará la clave principal si no existe. Si es falso, no se creará la clave principal.

(7) Lea la función de valor clave de tipo Cadena bajo la clave principal actual:

AnsiString __fastcall ReadString(nombre del valor clave

Por ejemplo: Edit1); -> Text=MyReg->ReadString(-MyString-);

Leerá el contenido del valor clave MyString en el cuadro de texto Edit1. Similares a esta función son ReadBool(), ReadInteger(), ReadFloat(), ReadDateTome(), ReadBinaryData(), etc., que se utilizan para leer diferentes tipos de valores clave.

(8) Escribir la función de valor clave de tipo cadena en la clave principal actual:

void __fastcall WriteString(nombre del valor clave, datos). a Un nuevo nombre de valor clave equivale a crear un nuevo valor clave; si es un valor clave existente, entonces es para modificar los datos del valor clave.

Por ejemplo: WriteString(- My String-,- Content-); Funciones de lectura y escritura para otros tipos de valores clave (valores binarios, valores Dword) como WriteInteger, WriteBool(), WriteFloat. ( ), WriteDateTome(), WriteBinaryData(), etc. se utilizan de manera similar a lo anterior.

(9) Función para determinar si existe un valor clave o una clave principal:

bool __fastcall ValueExists(nombre del valor clave);

Este método determina si el valor clave existe; La clave actual existe. El elemento de datos especificado existe. Si existe, devuelve verdadero; de lo contrario, devuelve falso.

bool __fastcall KeyExists(nombre de clave principal);

Este método determina si una clave existe. Si existe, devuelve verdadero; de lo contrario, devuelve falso.

(10)Leer la función de valor clave del archivo:

LoadKey(nombre del valor clave, nombre del archivo

(11)Guardar un valor clave en un archivo; función:

SaveKey(nombre del valor clave, nombre del archivo

(12) Función de cierre del valor clave:

void __fastcall CloseKey(void); p>

Después de utilizar el registro, se debe llamar rápidamente a la función miembro CloseKey() para cerrar el registro, y se debe llamar al método de eliminación para liberar el espacio de memoria solicitado con nuevo.

(13) Función para obtener valores de subclave bajo la clave principal actual:

void __fastcall GetKeyNames(Classes::TStrings * Strings

We); puedo usar este miembro La función obtiene los nombres de todas las subclaves bajo la clave principal actual. Utilice GetKeyInfo para obtener información más detallada. Cabe señalar que aunque la descripción de GetKeyNames() es nula __fastcall GetKeyNames(Classes::TStrings * Strings), es decir, su tipo de parámetro es TString, no podemos declarar primero una instancia de la clase TString y luego usarla. como parámetro Se utiliza con GetKeyNames(). Esto se debe principalmente al componente abstracto de la clase TStrings. Nuestra solución es usar una clase derivada TStringList de la clase TStrings en lugar de declarar una instancia de TStrings y usarla como parámetro en la función GetKeyNames().

Después de obtener el nombre de la subclave, podemos usar las funciones relevantes para determinar más los detalles. Si se usa, podemos usar GetValueNames() combinado con Read() y Write() para obtener la información detallada del valor de la clave principal. Mire el siguiente ejemplo. La función de este ejemplo es mostrar todos los nombres de subclaves bajo la clave principal "\Software\MyInfo" en ComboBox1:

# include

……… …

Tregistry * curReg=new TRegistry ();

curReg ->OpenKey( “ Software\\MyInfo-,true

KeyNames=new TStringList); () ;// ¡Preste atención al método de declaración de la clase TstirngList!

curReg - >GetKeyNames(KeyNames); for(int i=0;iCount;i ++) ComboBox1 - >Items - > Add(KeyNames - >Strings[ i]);

curReg - >CloseKey();

eliminar KeyNames

 3 Pasos generales para usar TRegistry

En general, hay cuatro pasos:

1) Crear la clase TRegistry 2) Usar el método OpenKey() para abrir un valor clave 3) Usar ReadType() y WriteType(. ) para leer y escribir el valor clave. Llame a CloseKey () para cerrar un valor clave y, finalmente, llame al método de eliminación para liberar el espacio de memoria solicitado con new.

A continuación demostramos el uso de un programa de muestra. Las operaciones comunes del registro incluyen abrir claves primarias, leer diferentes tipos de valores de clave, eliminar valores de clave o claves primarias, etc. "Se ejecuta automáticamente cada vez que se enciende la computadora". La casilla de verificación "Iniciado" funciona de manera similar a la función del programa Welcome.exe de Win 95. .