如何修改可执行文件的图标

可执行文件图标修改全攻略:从原理到Python、C#、Qt实战 在软件开发与发布流程中,可执行文件的图标资源管理是构建专业软件形象的关键环节。其核心原理在于修改可执行文件内部的资源段(.rsrc),或在编译打包阶段嵌入指定的图标资源。这项技术的价值在于实现软件的品牌化标识、提升用户体验,并解决因配置错误导致的图标显示异常问题。它广泛应用于独立软件发布、Python脚本打包(如使用PyInstaller)、C# WinForm/WPF应用程序以及Qt跨平台项目等场景。本文聚焦于**图标修改**与**资源编辑器**的实践应用,详细解析了从图标设计、格式转换到最终嵌入的完整操 阅读详情

如何修改可执行文件的图标


创建时间:2001-12-17
文章属性:转载
文章来源: www.xici.net/main.asp
文章提交: wzfish (wzfish_at_21cn.com)

本帖版权归原作者,其它媒体或网站转载请与e龙西祠胡同[ http://www.xici.net]或原作者联系,并注明出处。  
作者: antghazi 发表日期: 2001-12-14 17:48:53 返回《黑客也是侠》 快速返回


如何修改可执行文件的图标
作者:AntGhazi/2001.12.14 主页:antghazi.yeah.net

在网上有很多关于PE文件格式的说明,讲得最多莫过于IMAGE_DOS_HEADER、IMAGE_NT_HEADERS、IMAGE_SECTION_HEADER、等。而对于节的介绍最多的,也莫过于函数引入引出节。而关于资源节.rsrc的介绍则少之又少。好了,废话少说。
PE文件格式如下:

对于PE的详细介绍在MSDN中也有,邹丹( www.zaodan.com)与罗大侠(asm.yeah.net)的主页上也有细详的介绍。这里我在修改ICON中的一种做法。讲解中所用到的语句并不全面,重要的是这个思路。最后面我会给出一个直修改资源的函数。
首先,我们需要两个可执行文件,并且已知这两个exe文件都有图标资源。
1、 peSource.exe (从此文件中提取图标)
2、 peDesc.exe (将图标写入此文件)
第二部,分别打开这两个文件,hFileSource设为只读,hFileDesc设为可写。
HANDLE hFileSource;
HANDLE hFileDesc;
打开后,大家最常用的莫过于文件映射,这里为方便与直观,我们直接把文件读到一个内存块中。
//先得到长度
DWORD dwSourceSize =::GetFileSize(hFileSource);
DWORD dwDescSize =::GetFileSize(hFileDesc);
DWORD byte_write=0;
//读取
char *pFileSource =new char[dwSourceSize];
char *pFileDesc =new char[dwDescSize];

::ReadFile(hFileSource,pFileSource,dwSourceSize,&byte_write,0);
::ReadFile(hFileDesc,pFileDesc,dwDescSize,&byte_write,0);

好了,现在我们已经分别将两个文件读入内存中。让我们先将pFileSource指到资源节的头部。Section的结构说明如下:
typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
union {
DWORD PhysicalAddress;
DWORD VirtualSize;
} Misc;
DWORD VirtualAddress;
DWORD SizeOfRawData;
DWORD PointerToRawData;
DWORD PointerToRelocations;
DWORD PointerToLinenumbers;
WORD NumberOfRelocations;
WORD NumberOfLinenumbers;
DWORD Characteristics;
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
通常情况,资源节的名称一般都为:.rsrc。目前我们只考虑这种情况。
IMAGE_DOS_HEADER *dosHeadA=(IMAGE_DOS_HEADER *)pFileSource; //DOS头
IMAGE_NT_HEADERS *ntHeadA=(IMAGE_NT_HEADERS *) (pFileSource + dosHeadA->e_lfanew); //NT头
IMAGE_SECTION_HEADER *secHeadA=(IMAGE_SECTION_HEADER *)((char *)ntHeadA+ sizeof(IMAGE_NT_HEADERS)); //第一个节的首地址

//循环找出.rsrc节
for(int i=0;i<ntHeadA->FileHeader .NumberOfSections ;i++,secHeadA++){
if(strcmp((char *)secHeadA->Name,".rsrc")==0){ //找到.rsrc节
break;
}
}
好了,现在我们已经找到.rsrc节表。根据节表,我们就可以找到资源的入口地址。
IMAGE_RESOURCE_DIRECTORY *dirResourceA=(IMAGE_RESOURCE_DIRECTORY *)((char *)pFileSource + secHeadA->PointerToRawData); //得到资源入口地址

到这里,我才开始讲到我们今天的目的----资源结构,下面有几个需要用到的结构与相关的解释:
// Resource Format.
//

//
// Resource directory consists of two counts, following by a variable length
// array of directory entries. The first count is the number of entries at
// beginning of the array that have actual names associated with each entry.
// The entries are in ascending order, case insensitive strings. The second
// count is the number of entries that immediately follow the named entries.
// This second count identifies the number of entries that have 16-bit integer
// Ids as their name. These entries are also sorted in ascending order.
//
// This structure allows fast lookup by either name or number, but for any
// given resource entry only one form of lookup is supported, not both.
// This is consistant with the syntax of the .RC file and the .RES file.
//

typedef struct _IMAGE_RESOURCE_DIRECTORY { //资源树结构
DWORD Characteristics; //标识此资源的类型
DWORD TimeDateStamp;
WORD MajorVersion;
WORD MinorVersion;
WORD NumberOfNamedEntries;
WORD NumberOfIdEntries; //此结构下还包函有的资源结构树,即:还有几个子树。
// IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[]; //请注意这里,下面还会讲到。
} IMAGE_RESOURCE_DIRECTORY, *PIMAGE_RESOURCE_DIRECTORY;
此结构的其他解释请见VC的头文件winnt.h.
整个资源的结构就好像一棵树型,不同资源如:menu,icon,dialog,cursor等。都如同每根树枝,树枝的Characteristics会标识不同的资源类型,而每根树枝又会有子树枝。这样一直循环,直到IMAGE_RESOURCE_DIRECTORY的NumberOfIdEntries为零时才结束。通常情况,子树都为为三层。每一个子树的类型由IMAGE_RESOURCE_DIRECTORY中的Characteristics来标识。如:当第一层的Characteristics==3时,则说明此结构为ICON资源。Characteristics类型定义如下(可在winuser.h中找到):
/*
* Predefined Resource Types
*/
#define RT_CURSOR MAKEINTRESOURCE(1)
#define RT_BITMAP MAKEINTRESOURCE(2)
#define RT_ICON MAKEINTRESOURCE(3)
#define RT_MENU MAKEINTRESOURCE(4)
#define RT_DIALOG MAKEINTRESOURCE(5)
#define RT_STRING MAKEINTRESOURCE(6)
#define RT_FONTDIR MAKEINTRESOURCE(7)
#define RT_FONT MAKEINTRESOURCE(8)
#define RT_ACCELERATOR MAKEINTRESOURCE(9)
#define RT_RCDATA MAKEINTRESOURCE(10)
#define RT_MESSAGETABLE MAKEINTRESOURCE(11)

总结构如下(偷懒,copy而来):

好了,整个资源的结构已经弄清楚了。现在我们要做的就是得到每个子资源的入口地址。这里要用到的一个结构是:
// Each directory contains the 32-bit Name of the entry and an offset,
// relative to the beginning of the resource directory of the data associated
// with this directory entry. If the name of the entry is an actual text
// string instead of an integer Id, then the high order bit of the name field
// is set to one and the low order 31-bits are an offset, relative to the
// beginning of the resource directory of the string, which is of type
// IMAGE_RESOURCE_DIRECTORY_STRING. Otherwise the high bit is clear and the
// low-order 16-bits are the integer Id that identify this resource directory
// entry. If the directory entry is yet another resource directory (i.e. a
// subdirectory), then the high order bit of the offset field will be
// set to indicate this. Otherwise the high bit is clear and the offset
// field points to a resource data entry.
//

typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
union {
struct {
DWORD NameOffset:31;
DWORD NameIsString:1;
};
DWORD Name;
WORD Id;
};
union {
DWORD OffsetToData; //指向资源的入口址
struct {
DWORD OffsetToDirectory:31;
DWORD DataIsDirectory:1; //指向下一级目录的相对地址
};
};
}IMAGE_RESOURCE_DIRECTORY_ENTRY, *PIMAGE_RESOURCE_DIRECTORY_ENTRY;
上面对IMAGE_RESOURCE_DIRECTORY_ENTRY的解释也已经是非常清楚了。
结构中有两个成员:OffsetToData,DataIsDirectroy,当DiataIsDirectroy大于0时,则说明此结构还有下一级目录,否则,OffsetToData肯定不为0。那OffsetToData的值就是我们所得到的资源入口的RVA了。
那么,IMAGE_RESOURCE_DIRECTORY_ENTRY结构应该怎么得到呢?让我们再看一下,IMAGE_RESOURCE_DIRECTORY的结构说明吧。

typedef struct _IMAGE_RESOURCE_DIRECTORY { //资源树结构
DWORD Characteristics; //标识此资源的类型
DWORD TimeDateStamp;
WORD MajorVersion;
WORD MinorVersion;
WORD NumberOfNamedEntries;
WORD NumberOfIdEntries; // 、、//IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[]; //紧跟在后面的就是 IMAGE_RESOURCE_DIRECTORY_ENTRY结构数组,DirectoryEntries数组的个数实际上也就是NumberOfIdEntries.你也可以理解为
IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[NumberOfIdEntries];,
} IMAGE_RESOURCE_DIRECTORY, *PIMAGE_RESOURCE_DIRECTORY;
那这样一看来,IMAGE_RESOURCE_DIRECTORY_ENTRY的第一个地址等于父树地址加上IMAGE_RESOURCE_DIRECTORY结构的大小即可。
如:IMAGE_RESOURCE_DIRECTORY *dirTempB=(IMAGE_RESOURCE_DIRECTORY *)((char *)dirResourceB+entryResourceB->OffsetToDirectory);

最后一个是IMAGE_RESOURCE_DATA_ENTRY结构,比较简单,大家看一下就知道了。
// Each resource data entry describes a leaf node in the resource directory
// tree. It contains an offset, relative to the beginning of the resource
// directory of the data for the resource, a size field that gives the number
// of bytes of data at that offset, a CodePage that should be used when
// decoding code point values within the resource data. Typically for new
// applications the code page would be the unicode code page.
//

typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
DWORD OffsetToData;
DWORD Size;
DWORD CodePage;
DWORD Reserved;
} IMAGE_RESOURCE_DATA_ENTRY, *PIMAGE_RESOURCE_DATA_ENTRY;

好了,讲了这么多,现在我们可以开始计算了,(我们以读取第三层第一个ICON为例<通常资源都为三层>):
前面我们已经得到根资源的地址:dirResourceA

IMAGE_RESOURCE_DIRECTORY *dirResourceA=(IMAGE_RESOURCE_DIRECTORY *)((char *)pFileA + secHeadA->PointerToRawData); //根
IMAGE_RESOURCE_DIRECTORY_ENTRY *entryResourceA=(IMAGE_RESOURCE_DIRECTORY_ENTRY *)((DWORD)dirResourceA + sizeof (IMAGE_RESOURCE_DIRECTORY));
IMAGE_RESOURCE_DIRECTORY *dirTemp; //第二层
IMAGE_RESOURCE_DIRECTORY_ENTRY *entryTemp;
IMAGE_RESOURCE_DIRECTORY *dirTempICON; //第三层
IMAGE_RESOURCE_DIRECTORY_ENTRY *entryTempICON;
IMAGE_RESOURCE_DATA_ENTRY *entryData; //资源入口结构
for(i=0;i<(dirResourceA->NumberOfIdEntries+dirResourceA->NumberOfNamedEntries);i++,entryResourceA++){ //所有资源
if(entryResourceA->Name==3){ //ICON
dirTemp=(IMAGE_RESOURCE_DIRECTORY *)((char *)dirResourceA+entryResourceA->OffsetToDirectory);
entryTemp=(IMAGE_RESOURCE_DIRECTORY_ENTRY *)((char *)dirTemp+sizeof(IMAGE_RESOURCE_DIRECTORY));
for(int k=0;k<(dirTemp->NumberOfIdEntries+dirTemp->NumberOfNamedEntries);k++,entryTemp++){ //子目录
if(entryTemp->DataIsDirectory >0){ //还有子目录
dirTempICON=(IMAGE_RESOURCE_DIRECTORY *)((char *)dirResourceA + entryTemp->OffsetToDirectory );
entryTempICON=(IMAGE_RESOURCE_DIRECTORY_ENTRY *)((char *)dirTempICON + sizeof(IMAGE_RESOURCE_DIRECTORY));
entryData=(IMAGE_RESOURCE_DATA_ENTRY *)((char *)dirResourceA + entryTempICON->OffsetToData ); //资源入口结构
break; //得到后跳出
}
}
}
}

最后,读入内存中:
DWORD dwIconSize=entryDataA->Size;
char *pSrcIcon=entryDataA->OffsetToData - secHeadA->VirtualAddress + (char *)dirResourceA;
char *pSourceIcon= new char[dwIconSize+1];
memcpy(pSourceIcon,pSrcIcon,dwIconSize);
最后得到的数据就在pSourceIcon中了。
同理,得到另一个文件中的ICON入口地址,用pSourceIcon覆盖之即可。
函数地址: http://go3.163.com/antghazi/main3.htm
写得比较零乱,如有不明或有错误的地方,欢迎指正。
mailto:antghazi@163.net
http://antghazi.yeah.net
AntGhazi/2001.12.14
使用C#开发上位机并修改窗口图标和可执行文件图标 除了设计窗口布局和功能,修改窗口图标和可执行文件图标可以为应用程序增添个性化的特色。通过上述方法,您可以在C#上位机开发中轻松修改窗口图标和可执行文件图标,为应用程序增加个性化的外观效果。请记得替换代码中的图标文件路径,并确保图标文件存在于指定路径中。要修改可执行文件的图标,我们需要在项目的属性设置中指定自定义图标。类来加载自定义图标文件,并将其设置为窗口的图标。完成上述步骤后,可执行文件的图标将被修改为自定义图标。使用C#开发上位机并修改窗口图标和可执行文件图标。替换为实际的图标文件路径。 阅读详情

相关推荐

【TensorRT】TensorRT C# API 项目介绍:基于C#与TensorRT部署深度学习模型(上篇)

开发了TensorRT C# API 2.0版本,该版本在开发时充分考虑了上一版本应用时出现的问题,并进行了改进。同时在本版本中,我们对接口进行了优化,使用起来更加简单,并同时提供了相关的应用案例,方便开发者进行使用。

grape_yan的博客 3039

使用Python修改可执行文件-EXE的图标

使用Python修改可执行文件-EXE的图标

qq_44183661的博客 5346

多机器人协同:水下机器人集群的分布式控制与ROS仿真实践

本文探讨了多自主水下机器人(AUV)集群的分布式控制方法,重点分析了欠驱动6自由度AUV模型的反馈线性化技术。通过ROS/Gazebo仿真平台,详细介绍了系统架构设计、通信延迟补偿策略及环境扰动应对方案,为水下协同作业提供实用参考。

jupi8的博客 688

windows的软件修改图标

要修改一个可执行文件(.exe)的图标,你可以使用 Resource Hacker 这样的工具。3、在 Resource Hacker 菜单上选择 “File”,然后点击 “Open”,选择要修改图标的 .exe 文件。不要修改他人拥有版权的文件图标,除非你有相应的授权或许可。4、在 Resource Hacker 左侧的树形视图中,展开 “Icon” 节点,找到你想要修改的图标。6、在弹出的对话框中,选择一个新的图标文件(.ico 格式),然后点击 “Open”。

weixin_43972388的博客 6696

国产NAS哪家强?极空间&绿联&威联通&群晖对比

随着个人数据量暴增,传统网盘空间不足和下载速度慢问题愈发凸显。新势力NAS,作为数据管理领域的璀璨新星,正以其独特的互联网设计理念,引领家庭及小型办公用户向数据存储的新纪元。它不仅仅是一款产品,更是为初学者用户量身定制的贴心伙伴。其系统界面之简洁、操作流程之直观,让人一目了然,真正实现了“即插即用”的极致便捷。同时,新势力NAS在保持专业水准的同时,更提供了多样化的扩展性配置,轻松应对各种数据存储与管理需求,让家庭及小型办公场景下的数据管理变得前所未有的简单与高效。

专注大数据、云计算、人工智能、机器人领域技术传播 3649

【STABLE_BASELINE3】强化学习算法实战:模型的保存,读取,再训练

STABLE-BASELINE3,模型读取,再训练:有时候需要在已经训练好的模型基础上进行再次训练。

Kiek17的博客 4870

修改程序的图标与详细描述

Resource Haceker工具修改程序图标和程序描述

qq_43082315的博客 1962

信号完整性分析学习--16--传输线效应

传输线效应 说到传输线效应,大多数人都会想到一个经验法则,那就是: “当互连线的长度大于1/6倍的信号上升时间的空间延伸时,互连线就体现出传输线效应。” 上升时间越小越容易体现传输线效应。 由此可见,同一根互连线,它是否体现传输线效应,要看它要传输什么样的信号。下图所示,一根延时为15ps的互连线,当它传输上升时间为60ps的信号时就会体现传输线效应;当它传输上升时间为180ps的信号时就不体现传输线效应。

qq_29476769的博客 7284

【WPF】修改可执行文件的图标+修改软件图标

Point1  修改可执行文件图标 1. 到 http://www.faviconico.org/网站,自己转换一个*.ico的图片。 2.工程上右键——属性——应用程序——图标和清单,选刚才的那个图标。 Point2 修改Xaml页面上的图标 TextBlock Text="" Grid.Column="0" Height="30" Foregroun

程序猿的学习路途博客 6900

【RT-DETR有效改进】全新的SOATA轻量化下采样操作ADown(轻量又涨点,附手撕结构图)

本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的ADown模块来改进我们的Conv模块,其中YOLOv9针对于这个模块并没有介绍,只是在其项目文件中用到了,我将其整理出来用于我们的YOLOv8的项目,经过实验我发现该卷积模块(作为下采样模块)首先可以大幅度降低参数值,其次其精度上也有很高的提升,同时本文的内容目前网络上并无其它人总结(也是最新发布的,可以说BUff是集满了)大家可以尝试以下在自己数据集上的效果。

Snu77的博客 4774

(九)DFI接口时序

文章目录一、DFI Interface 一、DFI Interface   DFI接口是连接DDR Controller与DDR_PHY之间的通用接口,其信号组如下表:       

Mr.翟的博客 1万+

还不知道怎么修改QT可执行文件图标?过来吧你!

1.选择一张JPG/PNG格式的图片,将此图片转换成ICO格式 转换器网址: (JPG)https://www.aconvert.com/cn/icon/jpg-to-ico/ (PNG)https://www.aconvert.com/cn/icon/png-to-ico/ 2.将生成的ico放入到项目和pro文件同一路径下 3.返回Qt打开pro文件,添加一行代码RC_ICONS = 111.ico 4.点击运行,修改完成! ...

张子又 807

【网络安全】零基础入门网络安全劝退指北

作为从16年接触网络安全的小白,谈谈零基础如何入门网络安全,有不对的地方,请多多指教。 这些年最后悔的事情莫过于没有把自己学习的东西积累下来形成一个知识体系。 后续我也会陆续的整理网络安全的相关学习资料及文章,与大家一起探讨学习。 如何入门 简单了解网络安全 网络安全就是指的确保网络系统中的数据不被别人破坏,而网安工程师就是涉及程序来维护网络安全。 网安方向有很多职位,比如安全产品工程师,安全分析师,数据恢复工程师,网络架构工程师,安全编程工程师,以及网络集成工程师等。 工作内容主要包括: 安全评测,风

互联网老辛 4593

Qt打包成可执行文件exe并且修改应用程序的图标

Qt把代码打包成可执行文件exe 代码编译时候选择release。 最后运行会在程序所在目录下生成release文件夹,然后进入release文件夹下找到对应exe文件。 把那个exe拷贝到一个空白文件夹(这个文件夹可以建在任何地方),然后打开Qt的控制台。 黑色的,然后输入cd /d +新建的文件夹路径,比如我自己新建的文件夹路径的:C:\Users\Administrator\Deskto...

Science_Tec的博客 1050

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

如何修改可执行文件的图标 (转)

如何修改可执行文件的图标 (转)作者:AntGhazi/2001.12.14 主页:.NET/">antghazi.yeah.net 在网上有很多关于PE文件格式的说明,讲得最多莫过于IMAGE_DOS_HEADER...

cizn2013的博客 1659

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Qt中修改可执行文件的图标

QtCreator 方法如下:1. 在.pro文件中添加 RC_FILE = demo.rc2. demo.rc文件内容如下:IDI_ICON1  ICON    DISCARDABLE     "03.ico"(03.ico是对应的图标文件) 效果如下:(变成了MFC的图标啦)

tulun的专栏 1939

Qt可执行文件图标修改

Qt发布了exe文件后,图标是白色的弹框,如何定制exe为自己想要的logo: 在.pro文件夹中新建pcicon.rc文件,注意:如果项目中有多个.pro,会生成多个版本的exe,那么一定要放在你想要改的的那个版本的.pro文件夹中,否则看到的现象就是不生效,文件内容为:IDI_ICON1 ICON DISCARDABLE "test.ico" 通过http://www.favi...

Poseidon's Maserati 411

修改wxWidgets的可执行文件图标和版本号

初次接触wxWidgets,在写一个跨平台的程序时,发现在Windows平台上竟然无法通过下列代码更改exe可执行文件的图标: SetIcon(wxICON(main)); 但在Linux下测试是有效的。网上查资料,也没有人提到这个事。可能是我自学编程的原因吧,只好自己解决。通过研究wxWidgets的例子程序,发现他们都将图标放在了资源文件里(rc文件),决定尝试一下。这是资源文件:

痞子龙3D编程 2280

WPF笔记—修改EXE可执行文件图标

在你的工程下右键——属性——应用程序,看到资源里有一个图标然后添加进去,OK了。图片格式我不知道,我的.ico格式可以用。

qq_44149667的博客 3702

使用Electron将html网页转为exe可执行文件(全屏, 遮住任务栏, Esc退出, exe的图标/文件名修改)

下载源码: https://github.com/electron/electron-quick-start cd electron-quick-start npm install -g cnpm --registry=https://registry.npm.taobao.org cnpm install -g electron npm start

weixin_42960873的博客 1716

matlab编译得到的可执行文件修改软件图标的方法

1、在MATLAB编译生成.exe文件后,采用下述步骤修改软件图标: 1)下载【ResHacker】软件,并打开编译后生成的EXE文件; 2)点击“操作”---“添加一个新资源”---“打开新资源文件”,选中ico图标文件后确定; 3)资源名称填写ico的文件名,资源语言一般填写“ENGLISH”,完成后点击添加资源; 4)CTRL+S保存即可在文件同目录下获取带图标的EXE了,亲测可用。 ...

Wenfei Wang的专栏 1777
上一篇: 据说网易搜索引擎-超越GOOGLE
下一篇: 富人和穷人的八大差异
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值