Saludos a todos los programadores de este foro, quisiera hacerles una consulta sobre como listar o mostrar los valores o nombres de una key del registro de windows, tengo conocimientos en c++, pero ahora que quiero profundizar en lo que es el manejo del sistema, me han aparecido nombres y libreria que nunca habia esuchado, estuve googleando, para ver ejemplos sobre mi problema y encontre varios , pero una es la que se acerca mas y fue hecho en este foro, aca se los dejo:
#include<stdio.h>
#include<windows.h>
//Uso VC++ el proyecto debe usar multibyte strings asi que en Propiedades del proyecto->General->Juego de caracteres
//Utilizar juego de caracteres multibyte
int leerRegistro(char *clave,char *valor)
{
unsigned char infoValor [1024];
unsigned char infocadena [1024];
HKEY hKey;
LONG lStatus;
DWORD dwType=REG_SZ;
DWORD dwSize=1023;
int i=0;
lStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE,clave,0,KEY_READ,&hKey);
if (lStatus == ERROR_SUCCESS)
{
lStatus = RegQueryValueEx(hKey,valor, 0,&dwType, (LPBYTE)&infoValor, &dwSize);
if (lStatus == ERROR_SUCCESS)
{
for(i=0;infoValor!=0 && infoValor!=204;i++)
{
infocadena=(char)infoValor;
}
infocadena ='\0';
printf("Info del valor: %s",infocadena);
RegCloseKey(hKey);
return 1;
}
}
RegCloseKey(hKey);
return 0;
}
int main()
{
if(!leerRegistro("SOFTWARE\\Microsoft\\Internet Explorer\\Main","Start page"))printf("Falla al leer el registro\n");
getchar();
return EXIT_SUCCESS;
}
mi problema es que quiero mostrar los valores que esten en esa key, estuve intentandolo con un while, pero no me sale el parametro para que lo lea y lo guarde, espero su ayuda , saludos a todos.
Si lo que queres es saber el nombre de los valores usa: RegEnumValue (http://msdn.microsoft.com/en-us/library/windows/desktop/ms724865%28v=vs.85%29.aspx).
bueno, he visto tu funcion pero aun hay algunos parametros que no entiendo , he probado algunos codigos pero me da errores , creo que es por el compilador, estoy trabajando con dev-c++, encontre uno en visual c++ , que es exactamente lo que quiero pero solo funciona en visual c++(es por el net.framework),aca dejo el resultado que quiero que me muestre pero con la api de windows , no con el .net de visual c++:
Citar// Leer Registros.cpp : main project file.
#include "stdafx.h"
#include <windows.h>
// registry_read.cpp
// compile with: /clr
using namespace System;
using namespace Microsoft::Win32;
int main( )
{
array<String^>^ key = Registry::CurrentUser->GetSubKeyNames( );
RegistryKey^ rk = nullptr;
rk = Registry::CurrentUser->OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
if (rk==nullptr)
{
Console::WriteLine("Registry key not found - aborting");
return -1;
}
Console::WriteLine("Nombres de la clave del registro \"Software\\Microsoft\\Windows\\CurrentVersion\\Run\"");
array<String^>^ name = rk->GetValueNames( );
for (int i=0; i<name->Length; i++)
{
String^ value = rk->GetValue(name)->ToString();
Console::WriteLine(" {0}", name);
}
system("pause >nul");
return 0;
}
este codigo si me muestra exactamente lo que quiero , pero quiero adaptarlo en dev-c++, espero me ayuden.. =)
Ese codigo no es C++, no lo traigas a este subforo por favor. Ahi mismo en el enlace que te deje tenes un ejemplo sobre como usar la funcion RegEnumValue de la API de Windows.