Autor
|
Tema: No me lee el valor (Leído 795 veces)
|
Invader-X
Desconectado
Mensajes: 4
|
Hola a todos, Me inicié hace poco con C++ y estoy estudiando las lecturas del registro. Tengo el siguiente códio: #include <iostream> #include <windows.h>
int main() { HKEY Identificador; LPCWSTR subclave = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; LPCWSTR valor = L"Probando"; wchar_t buffer[300]; DWORD bufferSize = sizeof(buffer);
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, subclave, 0, KEY_READ, &Identificador) == ERROR_SUCCESS) {
if (RegQueryValueExW(Identificador, valor, NULL, NULL, (LPBYTE)buffer, &bufferSize) == ERROR_SUCCESS) { std::wcout << L"Datos Clave: " << buffer << std::endl; } else { std::cerr << "Error al leer el valor." << std::endl; } RegCloseKey(Identificador); } else { std::cerr << "Error al abrir la clave del registro." << std::endl; } std::cin.get(); return 0; }
La clave Probando la he creado yo para investigar, conteniendo de datos una ruta. La ruta existe, el valor también y los datos también, además de que estoy ejecutando el programa como administrador. Sin Embargo, me pone que hay un error leyendo el valor, porque me lleva a la cláusula de "Error al leer el valor" (La tuve que poner porque no sabía dónde estaba el error). ¿Me podríais decir qué estoy haciendo mal?. También de paso preguntar cómo puedo pasarle un valor que no sea reg_sz, si no que pueda ser cualquiera y lo pueda leer igualmente, me gustaría poder identificar cualquier tipo que haya, ya sea reg_sz, regExpand_sz, Dowrd... Muchas gracias por adelantado.
|
|
|
En línea
|
|
|
|
|
Invader-X
Desconectado
Mensajes: 4
|
Hola Eternal Idol, Posiblemente estoy usando los bits intercambiados, nunca he probado C++, sólo he usado el visual studio para html y css. Comentarte que he puesto la ruta con el wow6432Node y me marca el mismo error, que no se puede acceder al valor. Te paso el code aunque creo que da error una parte que me has dicho y que seguramente yo habré interpretado mal: #include <iostream> #include <windows.h>
int main() { HKEY Identificador; LPCWSTR subclave = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; LPCWSTR valor = L"Probando"; wchar_t buffer[600]; DWORD bufferSize = sizeof(buffer);
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, subclave, 0, KEY_READ | KEY_WOW64_64KEY, &Identificador) == ERROR_SUCCESS) {
if (RegQueryValueExW(Identificador, valor, NULL, NULL, (LPBYTE)buffer, &bufferSize) == ERROR_SUCCESS) { std::wcout << L"Datos Clave: " << buffer << std::endl; } else { std::cerr << "Error al leer el valor." << std::endl; } RegCloseKey(Identificador); } else { std::cerr << "Error al abrir la clave del registro." << std::endl; } std::cin.get(); return 0; } El error me lo marca aquí: KEY_WOW64_64KEY. gracias por la paciencia y la molestia que te tomas en responder.
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.964
Israel nunca torturó niños, ni lo volverá a hacer.
|
Comentarte que he puesto la ruta con el wow6432Node y me marca el mismo error, que no se puede acceder al valor. ¿Te referis a usar KEY_WOW64_64KEY? El error me lo marca aquí: KEY_WOW64_64KEY. A mi tu ultimo codigo me compila y me funciona bien, si te da un error al compilar vas a tener que mostrar el output del compilador. Y si te compila, cambia el codigo para saber que valor retorna RegQueryValueExW, sabemos que no es ERROR_SUCCESS solamente. PD. En el Adminstrador de tareas podes ver la arquitectura de tu programa (deberia ser x86 o x64).
|
|
« Última modificación: 16 Noviembre 2024, 20:39 pm por Eternal Idol »
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Invader-X
Desconectado
Mensajes: 4
|
¿Te referis a usar KEY_WOW64_64KEY?
A mi tu ultimo codigo me compila y me funciona bien, si te da un error al compilar vas a tener que mostrar el output del compilador.
Y si te compila, cambia el codigo para saber que valor retorna RegQueryValueExW, sabemos que no es ERROR_SUCCESS solamente.
PD. En el Adminstrador de tareas podes ver la arquitectura de tu programa (deberia ser x86 o x64).
Hola de nuevo Eternal Idol, Con respecto a tu primera pregunta, me refería a poner la ruta así: LPCWSTR subclave = L"SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run"; Te muestro el error que me sale con el último código: error: 'KEY_WOW64_64KEY' was not declared in this scope if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, subclave, 0, KEY_READ | KEY_WOW64_64KEY, &Identificador) == ERROR_SUCCESS) { ^~~~~~~~~~~~~~~ Y respondiendo a tu otra pregunta, sí, mi ordenador es de 64 bits. Intentaría mostrarte la salida del error pero al marcarme el error ese que te escribí no puedo compilarlo y capturar la salida que me genera, así que no sé muy bien cómo proceder debido al error y ahora manejo el último código porque es con el que estamos trabajando, para no liar más el tema. gracias nuevamente.
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.964
Israel nunca torturó niños, ni lo volverá a hacer.
|
Con respecto a tu primera pregunta, me refería a poner la ruta así: LPCWSTR subclave = L"SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run"; Claro eso no tiene mucho sentido, ya estabas leyendo desde ahi, lo que podes hacer es ir al Editor del registro y crear el valor Probando en esa clave. Te muestro el error que me sale con el último código: error: 'KEY_WOW64_64KEY' was not declared in this scope if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, subclave, 0, KEY_READ | KEY_WOW64_64KEY, &Identificador) == ERROR_SUCCESS) { ^~~~~~~~~~~~~~~ ¿Que compilador estas usando? Con el VC++ me compila bien ...
Podes cambiar KEY_WOW64_64KEY por 0x100 para salir del paso.
|
|
« Última modificación: 16 Noviembre 2024, 22:27 pm por Eternal Idol »
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Invader-X
Desconectado
Mensajes: 4
|
Claro eso no tiene mucho sentido, ya estabas leyendo desde ahi, lo que podes hacer es ir al Editor del registro y crear el valor Probando en esa clave.
¿Que compilador estas usando? Con el VC++ me compila bien ...
Podes cambiar KEY_WOW64_64KEY por 0x100 para salir del paso.
Hola de nuevo, He probado lo que dijiste y poner el valor "Probando" en wow6432Node, efectivamente, en esa clave funciona sin problemas y al quitarle el wow6432node y poner la clave sin ello sigue leyendo el mismo resultado. Intuyo que lo estoy compilando a 32 bits en un sistema de 64 y por eso no me está leyendo la normal sin el wow6432Node. Estoy usando Mingw (g++), esta versión: MinGW - Minimalist GNU for Windows. Imagino que si instalo otro compilador de 64 bits la ruta normal me la leerá y para leer la otra tendría que usar la otra clave. Así que en teoría, ¿Lo que está fallando es el compilador y lo está compilando todo a 32 bits y por eso no lee la clave sin el wow6432node? ¿Me recomiendas alguno más actualizado y de 64 bits?. gracias nuevamente.
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.964
Israel nunca torturó niños, ni lo volverá a hacer.
|
Siempre prefiero usar las herramientas del fabricante del S.O., ya sea Xcode para macOS o en este caso Visual Studio (Visual C++) para Windows.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Como Obtener valor de un textbox, desde un valor, hasta otro valor [VB6]
Programación Visual Basic
|
revenge1252
|
4
|
6,818
|
17 Julio 2012, 09:38 am
por BlackZeroX
|
|
|
Minimo Valor y Maximo Valor de Un Arbol
Programación C/C++
|
Jupiter34
|
1
|
7,822
|
16 Noviembre 2012, 18:17 pm
por Jupiter34
|
|
|
[PYTHON]valor esp/valor mas pequeño
Scripting
|
kaiserr
|
2
|
3,641
|
17 Mayo 2014, 00:04 am
por kaiserr
|
|
|
Cheat Engine no permite modificar el campo VALUE de los registros encontrados
Juegos y Consolas
|
nolose
|
1
|
10,582
|
7 Diciembre 2017, 00:40 am
por Darreptor
|
|
|
Query para encontrar un valor nuevo, poner el valor anterior un una fila
Bases de Datos
|
HECTOR AGRAZ
|
0
|
3,677
|
30 Septiembre 2018, 21:31 pm
por HECTOR AGRAZ
|
|