mostrar los valores de una key del registro de windows

Iniciado por andres_89a, 1 Octubre 2012, 08:06 AM

0 Miembros y 1 Visitante están viendo este tema.

andres_89a

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.

Eternal Idol

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

andres_89a

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.. =)

Eternal Idol

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.
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