Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: andres_89a en 1 Octubre 2012, 08:06 am



Título: mostrar los valores de una key del registro de windows
Publicado por: andres_89a en 1 Octubre 2012, 08:06 am
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.


Título: Re: mostrar los valores de una key del registro de windows
Publicado por: Eternal Idol en 1 Octubre 2012, 14:09 pm
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).


Título: Re: mostrar los valores de una key del registro de windows
Publicado por: andres_89a en 1 Octubre 2012, 18:00 pm
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.. =)


Título: Re: mostrar los valores de una key del registro de windows
Publicado por: Eternal Idol en 1 Octubre 2012, 18:05 pm
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.