| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 23 Oct, 2013 10:55 am Asunto: No puedo leer una clave del registro Windows |
|
|
A ver: ¿Qué estoy haciendo mal?
| Código: | #include <registry>
TRegistry *rRegistro = new TRegistry();
rRegistro->RootKey = HKEY_LOCAL_MACHINE;
if (rRegistro->OpenKeyReadOnly("SOFTWARE\\Firebird Project\\Firebird Server\\Instances"))
{
cAux = rRegistro->ReadString("DefaultInstance");
rRegistro->CloseKey();
} |
Al llegar al if no se ejecuta y ¡puedo prometer que la clave existe! _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 23 Oct, 2013 12:47 pm Asunto: |
|
|
He esatdo probando con un código que puso Leo en otro hilo mío (A vueltas con el registro de Windows) adaptándolo así:
| Código: | HKEY hKey;
HKEY keyRoot = HKEY_LOCAL_MACHINE;
String sKeyBase = "SOFTWARE\\Firebird Project\\Firebird Server\\Instances";
if (RegOpenKeyEx(keyRoot, sKeyBase.c_str(), 0, KEY_READ, &hKey))
{
char buffer[256];
DWORD size = sizeof(buffer);
if (RegQueryValueEx(hKey, "DefaultInstance", 0, 0, buffer, &size))
ShowMessage(buffer);
RegCloseKey(hKey);
} |
Así sí se ejecuta, pero me devuelve una cadena vacía. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Vie 25 Oct, 2013 3:17 am Asunto: |
|
|
Supongo que has usado el instalador de 64 bits de Firebird. Prueba de la siguiente manera:
| Código: | // Añadimos las cabeceras: #include<memory> #include<registry.hpp>
// Estas 3 líneas no son necesarias en versiones actuales
#ifndef KEY_WOW64_64KEY
#define KEY_WOW64_64KEY (0x0100)
#endif
// En versiones más actuales podemos cambiar "auto_ptr" por "unique_ptr"
std::auto_ptr<TRegistry> rRegistro(new TRegistry(KEY_READ | KEY_WOW64_64KEY));
String cAux = "<?>";
rRegistro->RootKey = HKEY_LOCAL_MACHINE;
if (rRegistro->OpenKey("SOFTWARE\\Firebird Project\\Firebird Server\\Instances", false))
cAux = rRegistro->ReadString("DefaultInstance");
ShowMessage(cAux); |
Las versiones de Windows de 64 bits automáticamente cuando el proceso que se ejecuta es de 32 bits cambiarían la ruta en este caso a:
SOFTWARE\Wow6432Node\Firebird Project\Firebird Server\Instances
Por eso no encuentra nada.. y también en este caso no usamos "OpenKeyReadOnly" ya que esta función ignora la propiedad "Access" que en este caso se la pasamos en el constructor, por tanto ignoraría "KEY_WOW64_64KEY" y usaría solo "KEY_READ". (Este detalle está solucionado en las versiones más actuales, pero con el código anterior nos aseguramos de que funcione igual en todas) |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
|