La idea es listar los programas instalados QUE FIGURAN en "Agregar o Quitar programas"..
Pero, el problema viene que RegQueryInfoKey me retorna un valor que nada que ver en cuanto a la cantidad de subclases que una clase tiene en el registro..
A continuacion el codigo:
Código:
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#define MAXIMO_NOMBRE_LLAVE 16384 // 16383 + '\0'
#define MAXIMO_VALOR_LLAVE 256 // 255 + '\0'
void listar_software_instalado()
{
HKEY llave;
TCHAR buffer[512] = "";
DWORD largo_buffer;// = MAX_PATH;
DWORD retcode = RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall",&llave);
if (retcode != ERROR_SUCCESS) {
printf("Error al abrir la llave\n");
return;
}
DWORD cantidad_de_subclases = 0;
retcode = RegQueryInfoKey(
llave,
buffer,
&largo_buffer,
NULL,
&cantidad_de_subclases,
//NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
);
if (retcode != ERROR_SUCCESS) {
printf("RegQueryInfoKey -> error: %d\n",retcode);
return;
}
DWORD indice = 0;
printf("Cantidad de subclases encontradas: %d\n",cantidad_de_subclases);
/*for (indice = 0 ; indice < cantidad_de_subclases ; indice++) {
printf("Software instalado encontrado (%d)\n",indice);
}*/
RegCloseKey(llave);
}
En mi caso retorna 446 (?) cuando (contados a mano en esa clase) hay 113..
Pero no entiendo donde le estoy pifiando..
PD: puede haber typos en el codigo porque lo estaba copiando de un papel y ando medio distraido