2011-06-23 50 views
2

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

+0

可执行文件可以包含许多图标 - 你特别希望Windows显示在一个开始菜单或资源管理器,正确? –

+0

是的,就是那个。 – delaccount992

回答

1

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

好吧,如果你不想使用一个封闭源代码的应用程序,这里是我想你想使用ExtractAssociatedIcon

看到的东西与源, Icon Extractor

+0

有趣。我宁愿不使用它,因为我不得不依赖外部程序和其他人的封闭源代码,但是我认为如果我找不到其他东西,它会作为最后的手段。感谢您的建议! – delaccount992

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