Библиотека C / C ++ для извлечения иконок из двоичных файлов - PullRequest
2 голосов
/ 23 июня 2011

Я планирую создать панель запуска приложений с поддержкой горячих клавиш для Windows. Я хочу, чтобы это была всплывающая сетка с иконками, в которой вы можете нажать и запустить то, что вам нужно. Я бы хотел, чтобы он автоматически сканировал меню «Пуск» и «Рабочий стол» на наличие ярлыков программ и каталогизировал их. Однако я не уверен, что делать с процессом извлечения значков из ярлыков / реальных двоичных файлов, и мне было интересно, есть ли какие-нибудь библиотеки для C / C ++, которые бы обрабатывали такие вещи? Если нет, то как бы я поступил иначе?

Ответы [ 5 ]

5 голосов
/ 23 июня 2011

Я думаю, вы хотите использовать ExtractAssociatedIcon

См. http://msdn.microsoft.com/en-us/library/ms648067%28v=VS.85%29.aspx

1 голос
/ 23 июня 2011

ExtractIconEx. Полный исходный код находится в моем проекте с открытым исходным кодом , файл с именем icon.cpp. Он поддерживает расширение системных переменных и получение иконки из индекса, например %SYSTEMROOT%\system32\shell32.dll,43

Вот его внутренности:

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;
}
1 голос
/ 23 июня 2011

Вы можете найти эту статью полезной: http://www.codeproject.com/KB/shell/shellicon.aspx

1 голос
/ 23 июня 2011
  1. LoadLibraryEx - используйте LOAD_LIBRARY_AS_DATAFILE или LOAD_LIBRARY_AS_IMAGE_RESOURCE
  2. EnumResourceNames - найти ресурс
  3. LoadImage / LoadIcon - загрузить изображение / значок
1 голос
/ 23 июня 2011

resources extract - это один из таких инструментов, который извлекает изображения из файлов dll / ocx / exe.

Что ж, если вы не хотите использовать приложение с закрытым исходным кодом, вот что-то систочник Icon Extractor

...