Ver Mensaje Individual
  #28  
Antiguo 21-12-2008
_cero_ _cero_ is offline
Miembro
 
Registrado: abr 2007
Posts: 147
Reputación: 20
_cero_ Va por buen camino
Thumbs up

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;
}
Y se manda a llamar así
Código:
HMODULE hModule=LoadLibrary("C:\\ShowTime.exe");

EnumResourceNames(hModule,RT_GROUP_ICON,(ENUMRESNAMEPROC)ResNameProc,0);
  

FreeLibrary(hModule);
Como ven es muy similar a “EnumProcesses” lo que me facilito mas comprenderla, aunque en lo personal me gustaban mas las otras funciones solo que nunca pude extraer el icono según su posición, porque simplemente no me encontraba el icono o me marcaba que tenia mas imágenes de las que en realidad tenia. pero por si les sirve, para buscar por índice de recursos con “FindResource” solo se pone así

Código:
FindResource(hModule, 

"#1", //  1=posición en recursos (índice)
RT_ICON);
Bueno subiré la función completa(cuando la termine al 100), para extraer iconos de extensiones en alta resolución.

Última edición por _cero_ fecha: 21-12-2008 a las 06:21:01.
Responder Con Cita