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

我打算为Windows构build一个热键启动的应用程序启动器。 我打算把它作为一个popup式的图标网格,然后你可以点击并启动你所需要的。 我希望它自动扫描开始菜单和桌面程序快捷方式并编目。 但是,我不知道如何去从快捷方式/实际的二进制文件的图标检索过程,我想知道是否有任何库的C / C + +处理这种事情? 如果不是的话,我会怎么做呢?

我想你想使用ExtractAssociatedIcon

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

资源提取是一种从dll / ocx / exe文件中提取图像的工具。

那么,如果你不想使用封闭的源代码应用程序,这里有一些源代码, 图标提取

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

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

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; }