C# .exe和.dll文件图标资源提取工具
Windows 可执行文件(.exe)和动态库文件(.dll)图标资源提取工具

功能
- 图标资源预览
- 图标资源导出(仅支持导出 PNG 格式)
代码
获取图标资源使用了 Win32 API PrivateExtractIconsW
PrivateExtractIconsW 对应的 C# 代码
[DllImport("User32.dll")]
internal static extern uint PrivateExtractIcons(
/* _In_reads_(MAX_PATH) */ string szFileName,
/* _In_ */ int nIconIndex,
/* _In_ */ int cxIcon,
/* _In_ */ int cyIcon,
/* _Out_writes_opt_(nIcons) */ IntPtr[] phicon,
/* _Out_writes_opt_(nIcons) */ uint[] piconid,
/* _In_ */ uint nIcons,
/* _In_ */ uint flags);
参数:
szFileName 要从中提取图标的文件的路径和名称。
nIconIndex 要提取的第一个图标的从零开始的索引。例如,如果此值为零,则该函数会提取指定文件中的第一个图标。
cxIcon 想要的水平图标大小。
cyIcon 想要的垂直图标大小。
phicon 指向返回的图标句柄数组的指针。
piconid 指向最适合当前显示设备的图标的返回资源标识符的指针。
nIcons 要从文件中提取的图标数。此参数仅在从 .exe 和 .dll 文件中提取时有效。
flags 指定控制此功能的标志。
主要步骤
- 需要先获取文件中的图标总数量。phicon 参数为 NULL,返回值为文件中的图标数
int _nIcons = PrivateExtractIcons(filePath, 0, 0, 0, null, null, 0, 0);
- 获取所有图标资源句柄。返回值为获取到的图标数量
IntPtr[] phicon = new IntPtr[_nIcons];
uint[] piconid = new uint[_nIcons];
uint nIcons = PrivateExtractIcons(filePath, 0, 32, 32, phicon, piconid, _nIcons, 0);
- 转换成位图。需要释放资源
for (int i = 0; i < nIcons; i++)
{
Icon icon = Icon.FromHandle(phicon[i]);
Bitmap bitmap = icon.ToBitmap();
icon.Dispose();
_ = DestroyIcon(phicon[i]);
}
C# .exe和.dll文件图标资源提取工具的更多相关文章
- 有关windows系统的EXE和DLL文件说法错误
正确答案: B C 你的答案: C (错误) EXE和DLL文件都是PE文件 EXE不能有导出函数,DLL可以有导出函数 EXE有x86和x64之分,则DLL没有 EXE可以单独运行,DLL则不行 ...
- Visual Studio 如何给生成的exe加入多个图标资源
Visual Studio 如何给生成的exe加入多个图标资源(快捷方式可调用) 方法: 打开你的VS, 文件—>新建—>文件 常规—>选择本机资源模板(rct文件) 如图一 新建后 ...
- .net Reactor之exe、dll文件混淆
.net Reactor之exe.dll文件混淆 .net Reactor的主要功能: 1.是对dll文件.exe文件进行反编译混淆 2.对dll进行内部加锁,限制其使用的固定机器.固定时间.部署次数 ...
- PE头的应用---插入代码到EXE或DLL文件中
三.代码实现(DELPHI版本),采用第三种方式实现代码插入. 1. 定义两个类,一个用来实现在内存中建立输入表:一个用来实现对PE头的代码插入. DelphiCode: const MAX_SECT ...
- 使用ILmerge合并Exe、Dll文件的帮助类
原文:使用ILmerge合并Exe.Dll文件的帮助类 using System; using System.Collections.Generic; using System.Text; using ...
- manifest资源提取工具
因业务需要,写了个manifest资源提取工具,该机制是将html文件作为入口文件进行资源抓取.原理是先简单扫html token,然后直接遍历每个tag token是否属于需要的资源(css,js, ...
- 通过AssemblyResolve事件打包合并exe和dll文件
使用WPF开发的安装包,在创建快捷方式的时候,需要用到COM程序集Windows Script Host Object Model,引用COM程序集后,会在debug目录生成Interop.IWshR ...
- 将exe和dll文件打包成单一的启动文件
当我们用 VS 或其它编程工具生成了可执行exe要运行它必须要保证其目录下有一大堆dll库文件,看起来很不爽,用专业的安装程序生成软件又显得繁琐,下面这个方法教你如何快速把exe文件和dll文件打包成 ...
- 使用Visual studio查看exe或DLL文件的依赖项
事先准备:只要 Visual Studio 任何版本即可. 点击开始 -> 程序 -> Visual Studio对应的版本,打开Visual Studio Tools -> 选择 ...
随机推荐
- Databend 设计概述 | 白皮书
Databend 是一个开源的.完全面向云架构的新式数仓,它提供快速的弹性扩展能力,并结合云的弹性.简单性和低成本,使 Data Cloud 构建变得更加容易. Databend 把数据存储在像 AW ...
- 菜鸡的Java笔记 - java 访问控制权限
java中四种访问控制权限的使用 内容 在java里面一共定义有四个权限,按照由小到大的顺序:private<defaule<prote ...
- Three.js实现脸书元宇宙3D动态Logo
背景 Facebook 近期将其母公司改名为 Meta,宣布正式开始进军 元宇宙 领域.本文主要讲述通过 Three.js + Blender 技术栈,实现 Meta 公司炫酷的 3D 动态 Logo ...
- 关于JAVA中顺序IO的基本操作
关于JAVA中顺序IO的基本操作 写在前面 最近研究一下JAVA中的顺序IO,在网络上找了一会儿,发现少有详细的介绍,顾此在此处说说顺序IO,才学疏浅,如有不对,望赐教. 什么是顺序IO 事实上JAV ...
- [bzoj1385]Division expression
容易发现a2一定是分母,且容易做到其余都是分子,因此相当于判定a2能否整除a1*a3*--*an,不断让a2除以其与其他数的gcd即可(注意特判n=1) 1 #include<bits/stdc ...
- HCNP Routing&Switching之组播技术-组播基础
组播技术背景 随着internet网络的不断发展,网络中交互的各种数据.语音.视频信息数量突增:新型的在线直播.网络电视.视频会议等应用也在逐渐兴起:这些业务大多符合点到多点的模式,对信息安全性.传播 ...
- 【Tool】JDK8 安装
JDK8 2019-07-26 14:05:21 by冲冲 1. 下载 通常前往官网 https://www.oracle.com/technetwork/java/javase/download ...
- java8特性表达式
public static void main(String[] args) { JFrame jframe = new JFrame("My JFrame"); JButton ...
- c# Quartzs定时器的简单使用
使用背景: 首先想到倒计时,定时任务.大家想到的肯定就是定时器.那么定时器在web和winfrom程序中有着很大的作用.那在服务器端有没有像定时器一样的存在呢. 有了这些需求,我找到了第三方的组件 Q ...
- Swift-技巧(九)CGImage To CVPixelBuffer
摘要 iOS 中图像的表现形式不只是 Image,还有更加底层的方式,比如 CVPixelBuffer 像素缓存形式,那么 CGImage 就可以转换为像素缓存的方式也是需要了解的. CGImage ...