![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Pues regreso para reportar mis avances y dejarles esta nueva función, en parte basada en las funciones que nos proporciono amablemente escafandra, solo que esta recorre todos los recursos del tipo icono y con un contador(numme), que es el que se encarga de identificar el icono que deseo extraer.
Código:
bool CALLBACK ResNameProc(HANDLE hModule, LPCTSTR lpType,LPTSTR lpszName,LONG lpName)
{
if (numme==0) {
HRSRC hRsrc = FindResource( hModule, MAKEINTRESOURCE(lpszName), lpType );
HGLOBAL hGroup = LoadResource( hModule, hRsrc );
GRPICONDIR * lpGrpIconDir = (LPGRPICONDIR)LockResource( hGroup );
for( int i=0; i < lpGrpIconDir->idCount; ++i ) {
int x = (i%7)*64;
int y = (i/8)*64;
GRPICONDIRENTRY * e = &lpGrpIconDir->idEntries[i];
hRsrc = FindResource( hModule, MAKEINTRESOURCE( e->nID ), RT_ICON );
HGLOBAL hGlobal = LoadResource( hModule, hRsrc );
ICONIMAGE *lpIconImage = (LPICONIMAGE)LockResource( hGlobal );
HICON hicon = CreateIconFromResourceEx(
(PBYTE)lpIconImage,
e->dwBytesInRes,
TRUE,
0x00030000,//DWORD dwVersion,
e->bWidth,
e->bHeight,
0
);
TIcon *icon = new TIcon;
icon->Handle = hicon;
if (icon->Width==256) {
lolol++; icon->SaveToFile("C:\\ico"+String(numme)+".ico");
}
};
}
return true;
}
Código:
HMODULE hModule=LoadLibrary("C:\\ShowTime.exe");
EnumResourceNames(hModule,RT_GROUP_ICON,(ENUMRESNAMEPROC)ResNameProc,0);
FreeLibrary(hModule);
Código:
FindResource(hModule, "#1", // 1=posición en recursos (índice) RT_ICON); Última edición por _cero_ fecha: 21-12-2008 a las 06:21:01. |
|
#2
|
||||
|
||||
|
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;
}
![]() 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.Última edición por escafandra fecha: 21-12-2008 a las 14:18:36. |
|
#3
|
|||
|
|||
|
Pues ya quedo, les dejo el código aquí para que lo descarguen, ya que la solución está formada por tres funciones muy extensas y me pareció mejor subir fuentes que escribir todo el código aquí. Nos vemos y gracias por su ayuda, en especial a escafandra.
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| try-except - grandes problemas | pmfras | Conexión con bases de datos | 1 | 12-06-2007 02:53:33 |
| Obtener iconos para mejorar aspectos | zugazua2001 | Varios | 2 | 05-08-2006 19:43:45 |
| Grandes frases de grandes personas | Nuria | Humor | 7 | 18-04-2004 05:40:17 |
| tablas grandes | Giniromero | Firebird e Interbase | 4 | 14-04-2004 18:18:48 |
|