用于从二进制文件中提取图标的C / C ++库

时间:2011-06-23 18:40:56

标签: c++ windows icons shortcuts binaries

我打算为Windows构建一个热键激活的应用程序启动器。我打算将它作为一个弹出的图标网格,然后您可以点击它并启动您需要的内容。我希望它能够自动扫描“开始”菜单和“桌面”以获取程序快捷方式并对其进行编目。但是,我不确定如何从快捷方式/实际二进制文件中进行图标检索过程,我想知道是否有任何C / C ++库可以处理这类事情?如果没有,我怎么办呢?

5 个答案:

答案 0 :(得分:5)

我想你想使用ExtractAssociatedIcon

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

答案 1 :(得分:1)

resources extract是一个从dll / ocx / exe文件中提取图像的工具。

好吧,如果你不想使用一个封闭的源代码应用程序,这里有源代码, Icon Extractor

答案 2 :(得分:1)

  1. LoadLibraryEx - 使用LOAD_LIBRARY_AS_DATAFILELOAD_LIBRARY_AS_IMAGE_RESOURCE
  2. EnumResourceNames - 查找资源
  3. LoadImage / LoadIcon - 加载图片/图标

答案 3 :(得分:1)

您可能会发现这篇文章很有用:http://www.codeproject.com/KB/shell/shellicon.aspx

答案 4 :(得分:1)

ExtractIconEx。完整源代码位于我的open source project,名为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;
}