![]() |
Реализация класса для смены иконок.
Код: [CODE] public class IconChanger { #region Structure [SuppressUnmanagedCodeSecurity()] private class NativeMethods { [DllImport("kernel32")] public static extern IntPtr BeginUpdateResource(string fileName, [MarshalAs(UnmanagedType.Bool)] bool deleteExistingResources); [DllImport("kernel32")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool UpdateResource(IntPtr hUpdate, IntPtr type, IntPtr name, short language, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 5)] byte[] data, int dataSize); [DllImport("kernel32")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool EndUpdateResource(IntPtr hUpdate, [MarshalAs(UnmanagedType.Bool)] bool discard); } [StructLayout(LayoutKind.Sequential)] private struct ICONDIR { public ushort Reserved; public ushort Type; public ushort Count; } [StructLayout(LayoutKind.Sequential)] private struct ICONDIRENTRY { public byte Width; public byte Height; public byte ColorCount; public byte Reserved; public ushort Planes; public ushort BitCount; public int BytesInRes; public int ImageOffset; } [StructLayout(LayoutKind.Sequential)] private struct BITMAPINFOHEADER { public uint Size; public int Width; public int Height; public ushort Planes; public ushort BitCount; public uint Compression; public uint SizeImage; public int XPelsPerMeter; public int YPelsPerMeter; public uint ClrUsed; public uint ClrImportant; } [StructLayout(LayoutKind.Sequential, Pack = 2)] private struct GRPICONDIRENTRY { public byte Width; public byte Height; public byte ColorCount; public byte Reserved; public ushort Planes; public ushort BitCount; public int BytesInRes; public ushort ID; } #endregion public void InjectIcon(string exeFileName, string iconFileName, bool backUp = true) { File.Copy(exeFileName, exeFileName + ".backup"); InjectIcon(exeFileName, iconFileName, 1, 1); } public void InjectIcon(string exeFileName, string iconFileName, uint iconGroupID, uint iconBaseID) { const uint RT_ICON = 3u; const uint RT_GROUP_ICON = 14u; IconFile iconFile = new IconFile().FromFile(iconFileName); var hUpdate = NativeMethods.BeginUpdateResource(exeFileName, false); var data = iconFile.CreateIconGroupData(iconBaseID); NativeMethods.UpdateResource(hUpdate, new IntPtr(RT_GROUP_ICON), new IntPtr(iconGroupID), 0, data, data.Length); for (int i = 0; i |
| Время: 15:11 |