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