问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c#怎么实现一个替换exe图标的功能,如qq.exe图标替换成酷狗的ico。

发布网友 发布时间:2022-07-10 14:07

我来回答

1个回答

热心网友 时间:2023-10-14 06:10

using System;
using System.IO;
using System.Runtime.InteropServices;
 
namespace ConsoleApplication2
{
    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;
    };
 
    class Program
    {
        [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);
            }
        }
 
        public static unsafe void Main(string[] args)
        {
            var exe = @"f:\SkypeSetup.exe";
            var ico = "f:\\1.ico";
 
            var RT_ICON = 3;
            var DIFFERENCE = 11;
            var RT_GROUP_ICON = (RT_ICON + DIFFERENCE);
            var p = BeginUpdateResourceW(exe, false);
            var ico2 = File.ReadAllBytes(ico);
            var stID = ToStruct<ICONDIR>(ico2, 0);
            var stIDE = ToStruct<ICONDIRENTRY>(ico2, Marshal.SizeOf(typeof(ICONDIR)));
            var nSize = stIDE.dwBytesInRes;
            var pIcon = Marshal.AllocHGlobal(nSize);
            Marshal.Copy(ico2, stIDE.dwImageOffset, pIcon, nSize);
            var stGID = new GRPICONDIR();
            stGID.idCount = stID.idCount;
            stGID.idReserved = 0;
            stGID.idType = 1;
            stGID.idEntries = ToStruct<GRPICONDIRENTRY>(ico2, Marshal.SizeOf(typeof(ICONDIR)));
            stGID.idEntries.nID = 0;
 
            var nGSize = Marshal.SizeOf(typeof(GRPICONDIR));
            var pGrpIcon = Marshal.AllocHGlobal(nGSize);
            Marshal.StructureToPtr(stGID, pGrpIcon, false);
            var b = UpdateResourceW(p, (char*)RT_GROUP_ICON, (char*)1, 0, pGrpIcon, (uint)nGSize);
            b = UpdateResourceW(p, (char*)RT_ICON, (char*)1, 0, pIcon, (uint)nSize);
 
            EndUpdateResourceW(p, false);
            Marshal.FreeHGlobal(pIcon);
        }
    }
}
需要用到不安全代码

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...每分钟走50米,就会迟到6分钟,如果每分钟走80米,就会早到3分钟。小... 谢馥春飞燕胭脂的持妆能力如何? stray中城夜店剧情怎么触发 老家房子怎么办理不动产登记 谁给我个真三国无双4武器修改器 那个……移动硬盘无法读取是什么原因呢? 移动硬盘无法正常运行,怎么办? ...高么?以后上大学学费高么? 还有什么专业时候我学? 电影《教父》:探析符号的价值 11岁女孩适合什么发形 VB如何编写BMP转换ICO的程序 用C#写windows应用程序图片浏览器,利用pictureBox控件为何打开ico和gif格式图像为何报错?求各位高手教教 ln(int)+1/lnt的积分 如何给exe图标加载32位色的ico 金山毒霸里面一个红色叉叉叫什么unint.ico 32*32 acdsee ico图像点击后怎么出现好多麻烦事?关都来不及? 手机微信上的电话号码可以再电脑上打印出来吗 百无一用是书生出自何典故?有着什么意义? 鲁迅《杂感》赏析200字 仙佛茫茫两未成,只知独夜不平鸣。 风蓬飘尽悲歌气,泥絮沾来薄幸名。 十有九人堪白眼,百无一用是 杂感黄景仁感情赏析 黄景仁 (清)杂感 的解释? 我想请您帮我整理一下七年级上历史与社会的第二章地理部分的知识!谢谢 魔百和精准拓新优惠啥意思 拓新这两个的拼音 非励学无以笃志,非拓新无以致远什么意思 没有违反交通法开车意外撞死人怎么判 没有违反交通规则撞死人怎么处理 没有任何违规撞死人咋办 开车没有违章撞死人? 开车没有违规撞死人怎么处理 thinkpad x61 屏幕坏了,外接显示器是好的。重装系统后Fn+F7不能直接切换屏幕了。现在两个不显示了 “憧”字怎么读 憧怎么读了 空中瑜伽可以天天练吗 憧这个字读什么 憧的读音是什么 憧读什么 憧怎么读? 憧念什么字 考二建的作用大么,能做什么,没有经验如何备考? 丰田奕泽仪表盘如何设置油耗和里程?- 问一问 谁有 日本卡通鸭子操?(是一只*的小鸭子 ,要么可能是小鸡)那位大侠有 ,多谢了 有分值奖励哦。。。 小鸡洗了操怎么办 吃节操的小鸡叫什么 爱的生卵小鸡我的想法我的想法应该怎么写 英语,翻跟头怎么说 典范英语6 1翻译 欢呼声不断,非常热闹。英语 软件测试中,哪些项目活动能发现软件缺陷:()和()。 留学生回国购车能否用外汇