2011-06-23 2 views
2

Je prévois de créer un programme de lancement d'application activé par raccourci-clavier pour Windows. J'ai l'intention que ce soit une grille d'icônes pop-up dans laquelle vous pouvez ensuite cliquer et lancer ce dont vous avez besoin. Je voudrais pour cela analyser automatiquement le menu Démarrer et le bureau pour les raccourcis du programme et les cataloguer. Cependant, je ne suis pas sûr de la façon d'aborder le processus de récupération d'icône à partir des raccourcis/binaires réels et je me demandais s'il y a des bibliothèques pour C/C++ qui traitent ce genre de chose? Sinon, comment ferais-je autrement?Bibliothèque C/C++ pour l'extraction d'icônes à partir de binaires

+0

Un fichier exécutable peut contenir de nombreuses icônes - vous voulez précisément celui que Windows affiche dans le menu Démarrer ou Explorer, correct? –

+0

Oui, c'est celui-là. – delaccount992

Répondre

1

resources extract est un tel outil qui extrait des images à partir de fichiers dll/ocx/exe.

Eh bien, si vous ne voulez pas utiliser une application source fermée, voici quelque chose avec la source, Icon Extractor

+0

Intéressant. Je préférerais ne pas l'utiliser car je devrais dépendre d'un programme externe et du code source de quelqu'un d'autre, mais je pense que cela fonctionnera en dernier recours si je ne trouve rien d'autre. Merci pour la suggestion! – delaccount992

1

ExtractIconEx. Le code source complet est dans mon open source project, fichier nommé icon.cpp. Il prend en charge l'expansion des variables système et d'obtenir une icône à partir d'un index, comme %SYSTEMROOT%\system32\shell32.dll,43

Voici le courage de celui-ci:

HICON GoFindAnIcon(LPCTSTR path) 
{ 
    HICON icon = 0; 

    //not using our parent's icon 
    if(_tcsicmp(L"parent", path)) 
    { 
     icon = (HICON)LoadImage(0, path, IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_LOADFROMFILE|LR_LOADMAP3DCOLORS); 
     if(!icon) 
     { 
      //Try something else 
      TCHAR mypath[MAX_PATH]; 
      const TCHAR *cleanpath = path; 
      const TCHAR *comma;    

      comma = _tcsrchr(path, ','); 
      UINT index = 1; 

      if(comma) 
      { 
       _tcsncpy(mypath, path, comma-path); //Can you exploit this buffer overflow ? 
       mypath[comma-path] = TCHAR(0); 

       index = _ttoi(comma+1); 

       cleanpath = mypath; 
      } 

      ExtractIconEx(cleanpath, index, 0, &icon, 1); 
     } 
    } 
    else 
    { 
     icon = GetParentProcessIcon(); 
    } 

    return icon; 
} 
Questions connexes