FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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(); } |
#2
|
||||
|
||||
Hola Angel.
No parece que estes haciendo nada mal , acabo de probar con código equivalente y muestra el valor de modo correcto: Código:
#include <registry.hpp> // ( Revisa esto ) void __fastcall TForm1::Button1Click(TObject *Sender) { TRegistry *reg = new TRegistry(KEY_READ); //[*] String cAux; __try { reg->RootKey = HKEY_LOCAL_MACHINE; if (reg->OpenKeyReadOnly("SOFTWARE\\Firebird Project\\Firebird Server\\Instances")) { cAux = reg->ReadString("DefaultInstance"); reg->CloseKey(); ShowMessage(cAux); } } __finally { delete (reg); } } Para que salgas de todad duda, también podes hacer la prueba desde consola: Código:
#include<iostream> #include<windows.h> #include<registry.hpp> int main() { TRegistry *reg = new TRegistry(KEY_READ); String cAux; __try { reg->RootKey = HKEY_LOCAL_MACHINE; if (reg->OpenKeyReadOnly("SOFTWARE\\Firebird Project\\Firebird Server\\Instances")) { cAux = reg->ReadString("DefaultInstance"); reg->CloseKey(); std::cout << cAux; } } __finally { delete(reg); } std::cin.get(); }
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 23-10-2013 a las 14:20:08. Razón: sintáxis |
#3
|
||||
|
||||
Gracias por la respuesta.
1. El include esta bien puesto (registry.hpp); no sé por qué a veces me quita las extensiones. 2. He probado añadiendo una línea en el código: Código:
bool lPrueba = rRegistro->KeyExists("SOFTWARE\\Firebird Project\\Firebird Server\\Instances"); Cita:
Voy más allá. He probado con este otro código: 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); } |
#4
|
||||
|
||||
Hola Angel.
Tal como te comenté, la prueba que realicé funciona correctamente, no me explico por que no lo hace en tu caso... Te adjunto los fuentes de la misma para que la puedas revisar con tranquilidad. En cuanto al uso de API, funciona correctamente de este modo: Código:
void __fastcall TForm1::Button1Click(TObject *Sender) { HKEY hKey; char Buffer[1024]; DWORD dwBufSize = sizeof(Buffer); DWORD dwError; if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Firebird Project\\Firebird Server\\Instances", 0, KEY_READ, &hKey) == ERROR_SUCCESS) { dwError = RegQueryValueEx(hKey, "DefaultInstance", 0, 0, Buffer, &dwBufSize); if(dwError == ERROR_SUCCESS) ShowMessage((String)Buffer); else ShowMessage("No se pudo consultar la clave. \nCodigo de error: "+IntToStr(dwError)); RegCloseKey(hKey); } } Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 23-10-2013 a las 20:28:56. |
#5
|
||||
|
||||
Gracias. Probaré este código y ya os diré como ha ido.
|
#6
|
||||
|
||||
Es posible que exista un problema de permisos. Revísalos.
Saludos. |
#7
|
||||
|
||||
No, estoy entrando como administrador del equipo.
|
#8
|
||||
|
||||
Nada. Con ninguno de los códigos que hay en el hilo logro que me devuelva el valor que necesito, que no es otro que la carpeta en la que está instalado Firebird. O no me abre la clave o me devuelve una cadena vacía. Ya no sé que hacer.
|
#9
|
||||
|
||||
Bueno, la solución me la ha dado el moderador del Club Builder, así que todo el mérito para él. Este es el código:
Código:
#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); |
#10
|
||||
|
||||
Bueno, bueno... así el mérito no es que sea para él, es que si nos 'escondes' información , así que castigo con penitencia para ti
|
#11
|
||||
|
||||
Cita:
Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 25-10-2013 a las 13:02:57. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Leer datos del registro de windows | dmartinezn | C++ Builder | 5 | 02-11-2012 14:48:29 |
insertar registro en clave foraneas | chalo | Lazarus, FreePascal, Kylix, etc. | 3 | 20-09-2011 09:24:28 |
escribir y leer clave regedit | ingmichel | Internet | 3 | 05-05-2010 18:14:46 |
Insertar una nueva clave en el Registro de Windows tipo REG_DWORD | Ermek | API de Windows | 3 | 27-07-2006 12:29:40 |
Clave de registro para instaladores | El_Chava | Noticias | 0 | 27-06-2005 03:28:16 |
|