任何人都可以显示简短的代码片段吗?它应该以.exe的名称作为输入并输出.ico文件。越短越好,请不要推荐任何二进制文件。这似乎是这样一个简单的任务,但我发现的唯一代码看起来非常臃肿。谢谢!从.exe提取图标的简单代码
1
A
回答
4
虽然听起来很简单,但实际上它与Win32中的大部分内容一样,并不是微不足道的。特别是这个代码库的整个部分感觉真的非常老了......操纵它是一个极大的痛苦。加重这一点的是,每个文件有多个图标大小,以及每个文件每个大小有多个图标。
这里有一些旧代码,它可以完成很多你需要的东西(但不是全部)。
一些设置:
static const int _MAX_ICONS = 2;
typedef struct INTERNAL_ICON_INFO
{
HICON hIcon;
int nSize;
} INTERNAL_ICON_INFO;
typedef struct TAG_ICON_BUNDLE_DETAILS
{
int nLargeIcons;
INTERNAL_ICON_INFO aiiLargeIcons[_MAX_ICONS];
int nSmallIcons;
INTERNAL_ICON_INFO aiiSmallIcons[_MAX_ICONS];
} ICON_BUNDLE_DETAILS;
的图标提取码:
HINSTANCE hTargetModule = LoadLibrary((LPCTSTR)stTargetFile);
if (NULL != hTargetModule)
{
int nIconCount = ExtractIconEx((LPCTSTR)stTargetFile, -1, NULL, NULL, 0); // get total icon count
ICON_BUNDLE_DETAILS* priiArray = new ICON_BUNDLE_DETAILS[nIconCount];
int nExtracted = 0;
for (int i = 0; i < nIconCount; i++)
{
HICON* phiLargeIcons = new HICON[nIconCount];
HICON* phiSmallIcons = new HICON[nIconCount];
nExtracted = ExtractIconEx((LPCTSTR)stTargetFile, i, phiLargeIcons, phiSmallIcons, _MAX_ICONS);
for (int j = 0; j < nExtracted; j++)
{
ICONINFO ii;
GetIconInfo(phiLargeIcons[j], &ii);
priiArray[i].nLargeIcons = nExtracted;
priiArray[i].aiiLargeIcons[j].hIcon = phiLargeIcons[j];
priiArray[i].aiiLargeIcons[j].nSize = sizeof(ICONINFO);
}
for (j = 0; j < nExtracted; j++)
{
priiArray[i].nSmallIcons = nExtracted;
priiArray[i].aiiSmallIcons[j].hIcon = phiSmallIcons[j];
priiArray[i].aiiSmallIcons[j].nSize = sizeof(ICONINFO);
}
}
if (nExtracted > 0)
{
// process extracted icons
}
}
总之,这段代码这应该由开裂EXE和让你在图标本身让你对你的方式打开目标文件,统计其中有多少图标,然后获取有关每个ICONINFO每个实例的信息。这是我认为你关心的结构,因为它包含位图本身。
从ICONINFO到新的.ico文件不是我们需要做的事情,所以我无法帮助那部分...但它有多难? ;-)
祝你好运!
0
我发现这一点:
Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles Me.Load
Me.Icon = Icon.ExtractAssociatedIcon(My.Application.Info.DirectoryPath
& "\" & My.Application.Info.AssemblyName & ".exe")
End Sub
相关问题
- 1. 从.exe提取C#代码
- 2. 在Ubuntu Linux中提取EXE图标
- 3. 从EXE中提取所有图标而不使用ExtractIconEx
- 4. 用WiX代替exe图标
- 5. 从cgal提取代码
- 6. VBA简单代码
- 7. Php简单代码
- 8. 运行简单代码时获取java.lang.NoSuchMethodError
- 9. 如何从简单的html-dom网站提取图像?
- 10. 简单的数字提取
- 11. 从Zookeeper提取简单配置
- 12. Shopify的简单jQuery代码
- 13. 简单的PHP代码...?
- 14. 简单的代码符号
- 15. 简单的拆分代码
- 16. 非常简单的代码
- 17. 简单的代码优化
- 18. JS:简单的hitArea代码?
- 19. 简单的代码(jQuery)
- 20. 代码的简单加速
- 21. 简单的代码,SQL
- 22. 如何提取exe或dll文件中的图标?
- 23. 如何使用WPF提取嵌入到.exe中的图标?
- 24. Windows资源管理器如何提取EXE文件的图标
- 25. 从独立于开源平台的Java代码替换Windows * .exe中的图标
- 26. 从EXE的Python源代码恢复
- 27. 为什么Windows不从我的exe文件中提取128像素图标?
- 28. Div标签代码提取器
- 29. 从exe/pdb获取有关可执行代码的信息
- 30. 简单提取非常慢
语言/技术? – Noldorin 2009-08-28 22:49:56
任何语言。只是寻找有效的东西。 :) – Lin 2009-08-29 07:56:16