用于从二进制文件中提取图标的C/C++库
C/C++ Library for Extracting Icons from Binaries
我正计划为Windows构建一个热键激活的应用程序启动器。我打算让它成为一个弹出的图标网格,然后你可以点击并启动你需要的东西。我希望它能自动扫描"开始"菜单和"桌面"中的程序快捷方式并对其进行编目。然而,我不知道如何从快捷方式/实际的二进制文件中进行图标检索过程,我想知道是否有任何C/C++库可以处理这类事情?如果没有,否则我该怎么办?
我认为您想要使用ExtractAssociatedIcon
请参阅http://msdn.microsoft.com/en-us/library/ms648067%28v=VS.85%29.aspx
resources extract就是这样一个工具,它从dll/ocx/exe文件中提取图像。
好吧,如果你不想使用一个封闭的源代码应用程序,这里有一些源代码,图标提取器
- LoadLibraryEx-使用
LOAD_LIBRARY_AS_DATAFILE
或LOAD_LIBRARY_AS_IMAGE_RESOURCE
- EnumResourceNames-查找资源
- LoadImage/LoadIcon-加载图像/图标
ExtractIconEx。完整的源代码在我的开源项目中,文件名为icon.cpp。它支持系统变量的扩展和从索引中获取图标,如%SYSTEMROOT%system32shell32.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;
}
您可以使用ExcractIconEx从可执行文件加载指定的图标。如果希望与shell兼容,本文建议在HKLMSOFTWAREMicrosoftWindowsCurrentVersionExplorerShell Icons
的注册表中检查图标覆盖。
相关文章:
- 如何为 C++ Visual Studio 2019 指定应用程序图标?
- 从 wxWidgets 中的.DLL加载图标
- 如何修复加载图标()函数不显示图标?
- QT Framewrok 和 Visual Studio - 图标冲突
- 如何在 c++ 中将图标放在按钮上?
- Windows 资源管理器中的图标在使用 resource.rc 时显示 2 个不同的图标
- 为什么从文件获取图标时应用程序有时会崩溃?
- 如何在MFC中的静态文本控件上插入图标?
- wxWidgets 3.1.3 图标在 mac 下加载 - ICNS 文件不可读?
- 如何使用IExecuteCommand和动词在上下文菜单外壳扩展中显示本地化文本和自定义图标?
- 在 C# 中更改鼠标光标图标
- Gtk::带有set_icon_name的窗口图标集在 wayland 上不起作用
- 为什么图标主题资源路径没有列在get_search_path
- 如何在 VC6 中的对话框中将图标设置为按钮
- GTK 3 C++按钮中带有标签的图标
- Visual Studio 2015资源视图和资源编译器使用不同的方法在项目目录中查找图标文件.如何修复
- 如何在 Windows 中立即刷新文件夹图标
- 图标编辑器中的自定义颜色 (VS 2015)
- Shell_NotifyIcon在系统托盘中创建空白、无响应的图标
- 为没有qmake/VS的Qt Windows应用程序设置.exe图标