修改exe中的Icon

 示例:SheelTool( 用于源码保护,为exe加壳) 小程序技术共享


using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;namespace SheelTool
{/// <summary>/// 调用kernel32.dll文件中的函数,实现exe文件资源修改功能/// </summary>class kernel32Tool{/// <summary>/// 修改exe中的Icon。/// (执行后,手动修改下exe文件名,即可看到icon修改效果。系统有图标缓存,所以不修改文件名,可能无法看到icon修改效果)/// </summary>/// <param name="exePath">.exe文件路径</param>/// <param name="iconPath">.ico文件路径</param>/// <param name="iconStartId">exe中Icon目录下(用zip压缩软件即可查看)的icon文件名如 2.ico, id为1</param>/// <param name="iconCount">有的exe中含有1-8个ico</param>public static unsafe void ReplaceExeIcon(string exePath, string iconPath, int iconStartId = 2, int iconCount = 8){byte[] iconBytes = File.ReadAllBytes(iconPath);ICONDIR iconDir = ToStruct<ICONDIR>(iconBytes, 0);ICONDIRENTRY iconDirEntry = ToStruct<ICONDIRENTRY>(iconBytes, Marshal.SizeOf(typeof(ICONDIR)));int iconBytesSize = iconDirEntry.dwBytesInRes;IntPtr iconHandle = Marshal.AllocHGlobal(iconBytesSize);Marshal.Copy(iconBytes, iconDirEntry.dwImageOffset, iconHandle, iconBytesSize);IntPtr exeHandle = BeginUpdateResourceW(exePath, false);int RT_ICON = 3;        // 系统预设的ICON类型,有多种for (int i = iconStartId; i < iconStartId + iconCount; i++){bool b2 = UpdateResourceW(exeHandle, (char*)RT_ICON, (char*)i, 0, iconHandle, (uint)iconBytesSize); }EndUpdateResourceW(exeHandle, false);Marshal.FreeHGlobal(iconHandle);// icon组修改//int DIFFERENCE = 11;//int RT_GROUP_ICON = (RT_ICON + DIFFERENCE);//GRPICONDIR groupIconDir = new GRPICONDIR();//groupIconDir.idCount = iconDir.idCount;//groupIconDir.idReserved = 0;//groupIconDir.idType = 1;//groupIconDir.idEntries = ToStruct<GRPICONDIRENTRY>(iconBytes, Marshal.SizeOf(typeof(ICONDIR)));//groupIconDir.idEntries.nID = 0;//int ICONDIR_Size = Marshal.SizeOf(typeof(GRPICONDIR));//IntPtr iconDirHandle = Marshal.AllocHGlobal(ICONDIR_Size);//Marshal.StructureToPtr(groupIconDir, iconDirHandle, false);//bool b = UpdateResourceW(exeHandle, (char*)RT_GROUP_ICON, (char*)1, 0, iconDirHandle, (uint)ICONDIR_Size);//Marshal.FreeHGlobal(iconDirHandle);}struct ICONDIRENTRY{byte bWidth;byte bHeight;byte bColorCount;byte bReserved;short wPlanes;short wBitCount;public int dwBytesInRes;public int dwImageOffset;};struct ICONDIR{short idReserved;short idType;public short idCount;//ICONDIRENTRY idEntries;};struct GRPICONDIRENTRY{byte bWidth;byte bHeight;byte bColorCount;byte bReserved;short wPlanes;short wBitCount;int dwBytesInRes;public short nID;};struct GRPICONDIR{public short idReserved;public short idType;public short idCount;public GRPICONDIRENTRY idEntries;};[DllImport("kernel32.dll")]public static extern IntPtr BeginUpdateResourceW([In] [MarshalAs(UnmanagedType.LPWStr)] string pFileName, [MarshalAs(UnmanagedType.Bool)] bool bDeleteExistingResources);[DllImport("kernel32.dll")][return: MarshalAs(UnmanagedType.Bool)]public static extern unsafe bool UpdateResourceW([In] IntPtr hUpdate, [In]  char* lpType, [In]  char* lpName, ushort wLanguage, [In] IntPtr lpData, uint cb);[DllImport("kernel32.dll")][return: MarshalAs(UnmanagedType.Bool)]public static extern bool EndUpdateResourceW([In] IntPtr hUpdate, [MarshalAs(UnmanagedType.Bool)] bool fDiscard);public static T ToStruct<T>(byte[] bytes, int index) where T : struct{int size = Marshal.SizeOf(typeof(T));IntPtr buffer = Marshal.AllocHGlobal(size);try{Marshal.Copy(bytes, index, buffer, size);return (T)Marshal.PtrToStructure(buffer, typeof(T));}finally{Marshal.FreeHGlobal(buffer);}}}}

备注: 设置下项目允许不安全代码

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/38585.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

利用Resource Hacker工具修改.rsrc节中的数据,达到修改程序的图标与详细描述的功能 目录 一、.rsrc节 二、修改程序图标(Resource Hacker) 二、修改程序详细描述(Resource Hacker) 总结 一、.rsrc节 .rsrc节存储着程序的图标和程序的详细描述 二、修改程序图标(Resource Hack…

修改windows软件图标

情况1.如果要修改桌面软件的图标&#xff0c;右键图标&#xff0c;选择"属性"&#xff0c;在"快捷方式"页签点击"更改图标"&#xff0c;图标需要是.ico格式。 (这里有个网站可以下载好看的图标&#xff1a;http://www.icosky.com/) 情况2.如果要…

如何修改软件名称及图标,非常详细

所需工具 MT管理器&#xff1a;下载 理论&#xff1a; 补充android:versionName"2.4"是版本号 实战&#xff1a; 修改图标 wzry.png就是刚刚复制进来的图片名称 图标修改完成 下面开始修改名称&#xff1a;

【帮男(女)朋友抢演唱会门票脚本】

大麦网抢票脚本 使用脚本抢票步骤1、在PC端浏览器中安装油猴脚本管理器2、选择对应的浏览器版本安装&#xff08;Chrome、Microsoft Edge、Firefox、Safari、Opera Next&#xff09;3、在油猴脚本管理器中搜索需要的脚本4、获取与浏览器相对应的脚本5、安装脚本6、安装完后查看…

Servlet和Mybatis学习笔记

目录 什么是Servlet&#xff1f; Servlet的基本处理流程 如何配置Servlet和web网页相互对应&#xff1f; 如何解决Servlet中Post方法的中文乱码问题&#xff1f; Servlet的继承关系 Servlet生命周期 HTTP协议 HTTP请求数据解析 请求行 请求头 请求主体 响应 Sessio…

小红书七夕营销攻略,玩出新花样(内附小红书推广方案干货)

导语&#xff1a;作为中国传统情人节——七夕&#xff08;8月4日&#xff09;即将到来&#xff0c;品牌把握好节日机会&#xff0c;不仅可以刷一波存在感&#xff0c;提升品牌小红书指数&#xff0c;还能达成各种营销目的。那么&#xff0c;小红书七夕营销有哪些走心切入点&…

小红书如何爆粉,分享一些简单的玩法

作为一个社区&#xff0c;这些年是我收获最大的几年&#xff0c;当然不是金钱。毕竟有几百万。现在连别墅都买不起&#xff0c;什么都做不了。 主要收获在哪里&#xff1f; 那是我自己的成长。除了在社区里分享一些有用有价值的东西&#xff0c;更重要的是同学们教会了我太多…

小红书矩阵营销是什么?多账号如何管理?浅谈小红书矩阵玩法

小红书现在越来越火热了&#xff0c;因为它是一款生活方式分享平台&#xff0c;为用户提供好物分享的社区。那么怎么搭建小红书矩阵营销的方法&#xff1f;自媒体多账号管理又该如何实现呢&#xff1f;今天小编就来给大家进行分享&#xff01; 了解小红书矩阵 一、账号矩阵是…

基础模型自监督预训练的数据之谜:大量数据究竟是福还是祸?

©作者 | 诺亚方舟实验室 大型语言模型如 ChatGPT 的成功彰显了海量数据在捕捉语言模式和知识方面的巨大潜力&#xff0c;这也推动了基于大量数据的视觉模型研究。在计算视觉领域&#xff0c;标注数据通常难以获取&#xff0c;自监督学习成为预训练的主流方法。然而&#x…

巴比特 | 元宇宙每日必读:钉钉接入“通义千问”大模型,输入「/」可唤起10余种AI功能,拥挤的算法层外,应用层的革命开始了?...

摘要&#xff1a;据机器之心报道&#xff0c;今天&#xff0c;在 Copilot 面世一个月后&#xff0c;阿里巴巴旗下的钉钉也迈出了重要一步&#xff0c;演示了一个生产力工具在接入通义千问大模型之后所能带来的变革——只需输入一条「/」&#xff0c;就可唤起 10 余项 AI 能力&a…

程序员职场背锅甩锅指南

作者&#xff5c;无精疯 来源&#xff5c;大数据肌肉猿&#xff08;ID&#xff1a;BigData-BigMuscle&#xff09; 背景 最近在进行一个新项目&#xff0c;所以在有些需求不明确或工作任务不明确的时候难免做些无用功。但是&#xff0c;在跟领导确认了多遍需求之后&#xff0c;…

06【托业口语】 - PART6 Express an opinion

06【托业口语】- PART6 Express an opinion 评价标准&#xff1a;发音&#xff0c;语调&#xff0c;语速&#xff0c;重音&#xff0c;流畅度&#xff0c;连贯性&#xff0c;文章水平和多样性&#xff0c;词汇&#xff0c;全体构成 主题类型&#xff1a;职场生活&#xff0c…

c语言口语评分系统,FCE口语评分标准:考官更喜欢这样的考生

从KET, PET,FCE到BEC, IELTS 的口语面试&#xff0c;评分大多维度相似&#xff1a; 流利度&#xff0c;语法&#xff0c;词汇&#xff0c;发音。 换句话说&#xff0c;只要能较自然地流畅表达自己的观点&#xff0c;分数一般都较高。 KET/PET/FCE口语四大评分标准&#xff1a; …

logo字体在线设计工具

u钙网 http://www.uugai.com 自己做项目的时候没有UI设计师&#xff0c;图片logo都得自己搞&#xff0c;这下再也不怕没有UI 给你们看一下之前的logo丑爆了&#xff0c;而且用代码写标题 h1这种的&#xff0c;好难看啊&#xff0c;那天研究了半天的css3新属性font-face&…

字体图标 icon font

Icon font icon font 指的是用字体文件取代图片文件&#xff0c;来展示图标、特殊字体等元素的方法。 应用场景&#xff1a; iconfont的优缺点 大小可以自由地变化颜色可以自由地修改添加阴影效果*IE6也可以支持支持一些CSS3对文字的效果字体文件比图片文件小很多由于是字体…

字体图标库icomoon和iconfont使用方法

目录 1.iconmoon.io使用教程 2.iconfont.cn使用教程 3.如何不通过iconfont项目向已有字体图标中添加新的字体图标 1.iconmoon.io使用教程 icomoon是一个图标很全的字体库&#xff0c;以下介绍一下使用方法。 1.首先&#xff0c;打开官网https://icomoon.io/ 2.点击右上角的…

如何在微信小程序中使用icon字体图表

1.首先我们需要去icon字体库中选中几个想要的图标加入购物车 2.点击右上角的购物车图标进入 3. 进入购物车&#xff0c;点击下载代码 4.下载好的文件夹进行解压 5.将.ttf后缀文件转化为base64格式的方式&#xff08;推荐网址&#xff1a;Online font-face generator — Transfo…

iconfont字体图标的使用方法之Font class--超简单

目录 step 1:百度iconfont,找到阿里巴巴矢量图标库官网,然后注册登录,或者用github登录也行,此步骤跳过;step 2:找到图标管理->我的项目->然后新建项目:step 3:项目新建完成后,往项目里添加我们要想使用的图标,找到图标库,搜索一个想要的图标,然后添加到购物车;step 4:添…

微信小程序----引入外部字体库iconfont的图标

WXRUI体验二维码 如果文章对你有帮助的话&#xff0c;请打开微信扫一下二维码&#xff0c;点击一下广告&#xff0c;支持一下作者&#xff01;谢谢&#xff01; 直接使用阿里巴巴的网络路径 选择iconfont图标 官网&#xff1a;阿里巴巴矢量字体库 步骤&#xff1a;阿里巴巴字…

在线引入 iconfont 特殊图标字体

一、前言 本节使用的例子是 阿里巴巴图标库 的图标 有时候我们想在自己写的网页上在线引入一个或多个图标字体 比如下面这种 上面是一些来自 阿里巴巴图标库 网站的图标 如果通过下载到本地然后通过本地引入的话&#xff0c;网页中的这些图标在别人查看的时候是无法显示的&…