Bien
_cero_. Ya que entraste en el tema de enumeración de los resources, te dejo esto:
Código:
//------------------------------------------------------------------------------
// Funciones de enumeración de resources
//------------------------------------------------------------------------------
// Declaraciones previas
typedef BOOL (__stdcall *TP)();
struct TResInGr{
int Count;
int Id;
char* ResName;
HRSRC hRes;
};
// Para la cuenta de elementos encontrar un Resource
BOOL CALLBACK
EnumResGrProc(HANDLE hModule, LPCTSTR lpszType, LPTSTR lpszName, LONG lParam)
{
TResInGr *Res = (TResInGr*)lParam;
if(Res->Count == Res->Id){
Res->ResName = lpszName;
Res->hRes = FindResource(hModule, lpszName, lpszType);
}
Res->Count++;
return true;
}
// Devuelve el Nº de Elementos de lpszType
int GetCountRes(HANDLE hModule, LPCTSTR lpszType)
{
TResInGr Res = {0};
Res.Id = -1;
EnumResourceNames(hModule, lpszType, (TP)EnumResGrProc, LPARAM(&Res));
return Res.Count;
}
// Devuelve el Nº de Elementos de lpszType
int GetCountRes(char *FuenteExe, LPCTSTR lpszType)
{
HANDLE hModule = LoadLibrary(FuenteExe);
int Count = GetCountRes(hModule, lpszType);
FreeLibrary(hModule);
return Count;
}
// Devuelve un HRSRC con Indice Id del array de resources lpszType
// Id: Indice del Grupo de iconos como si fuese una array comenzando por 0
HRSRC FindResource(HMODULE hModule, int Id, LPCTSTR lpszType)
{
TResInGr Res = {0};
Res.Id = Id;
EnumResourceNames(hModule, lpszType, (TP)EnumResGrProc, LPARAM(&Res));
return Res.hRes;
}
Saludos.
PD:
Una aclaración sobre las funciones que dejé anteriormente. El indice para encontrar el icono, como explico es un indice como si de una matriz se tratara. La Función FindResource que usan no es la API sino una nueva que añado en este post. Siento no haberme dado cuanta hasta ahora que no la había proporcionado, por eso no iban bien los índices.


en las funciones
posteadas.