我打算建立一个热键激活的Windows应用程序启动器.我打算为它是一个弹出的图标网格,然后你可以点击并启动你需要的.我想让它自动扫描开始菜单和桌面的程序快捷方式和目录.然而,我不知道如何从快捷方式/实际的二进制文件中进行图标检索过程,我想知道是否有任何C/C++库可以处理这类事情?如果不是,我怎么去做呢?
eqqqjvef1#
我想你想用ExtractAssociatedIcon参见http://msdn.microsoft.com/en-us/library/ms648067%28v=VS.85%29.aspx
ExtractAssociatedIcon
2vuwiymt2#
resources extract是一个这样的工具,它从dll/ocx/exe文件中提取图像。如果您不想使用封闭源代码的应用程序,这里有一个源代码,Icon Extractor。
zysjyyx43#
LOAD_LIBRARY_AS_DATAFILE
LOAD_LIBRARY_AS_IMAGE_RESOURCE
drkbr07n4#
ExtractIconEx。完整的源代码在我的开源项目中,文件名为icon.cpp。它支持扩展系统变量和从索引中获取图标,如%SYSTEMROOT%\system32\shell32.dll,43以下是它的核心:
%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; }
093gszye5#
您可以使用ExctractIconEx从可执行文件加载指定的图标。如果需要与shell兼容,此article建议检查HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons注册表中的图标覆盖。
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons
5条答案
按热度按时间eqqqjvef1#
我想你想用
ExtractAssociatedIcon
参见http://msdn.microsoft.com/en-us/library/ms648067%28v=VS.85%29.aspx
2vuwiymt2#
resources extract是一个这样的工具,它从dll/ocx/exe文件中提取图像。
如果您不想使用封闭源代码的应用程序,这里有一个源代码,Icon Extractor。
zysjyyx43#
LOAD_LIBRARY_AS_DATAFILE
或LOAD_LIBRARY_AS_IMAGE_RESOURCE
drkbr07n4#
ExtractIconEx。完整的源代码在我的开源项目中,文件名为icon.cpp。它支持扩展系统变量和从索引中获取图标,如
%SYSTEMROOT%\system32\shell32.dll,43
以下是它的核心:
093gszye5#
您可以使用ExctractIconEx从可执行文件加载指定的图标。如果需要与shell兼容,此article建议检查
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons
注册表中的图标覆盖。