当我在谷歌搜索,我发现它让我们用下面的代码行更改任何.exe
文件的图标,一类有用:如何将图标添加到现有的exe文件(默认没有图标)?
WindowsFormsApplication1.IconInjector.InjectIcon("myfile.exe", "myicon.ico", 200, 1);
其中200和1分别图标GroupID
和图标BaseID
我可以使用Resource Hacker来确定。在这种情况下,文件的图标会成功更改而不会破坏文件。
所以我打算用我的这个程序类,这是一个SFX /软件保护,输出文件始终没有一个图标,所有我能够在资源黑客看到的是如下:
我无法看到图标组ID和基本ID,无论如何(我不知道该如何放置,而不是200和1在这种情况下)所以我试图改变图标使用相同的代码行提到上面,我用了下面的代码行(与上面相同):
WindowsFormsApplication1.IconInjector.InjectIcon("myfile.exe", "myicon.ico", 200, 1);
文件图标已成功更改,但文件不再有效!
当我试图重新使用ResourceHacker文件,我发现下面的:
看来,成功添加的图标资源,但我不明白,为什么没有按文件”工作了,它似乎已损坏。
任何帮助,将不胜感激。
注:我试过使用这个类与不受保护的文件,它的作品就像一个魅力!
我使用的类是如下:
// IconInjector.cs
using System;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace WindowsFormsApplication1
{
/// <summary>
/// IconInjectorクラスの定義
/// </summary>
public class IconInjector
{
[DllImport("kernel32.dll", SetLastError = true)]
//static extern bool UpdateResource(IntPtr hUpdate, string lpType, string lpName, ushort wLanguage, IntPtr lpData, uint cbData);
static extern int UpdateResource(IntPtr hUpdate, uint lpType, uint lpName, ushort wLanguage, byte[] lpData, uint cbData);
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr BeginUpdateResource(string pFileName,
[MarshalAs(UnmanagedType.Bool)]bool bDeleteExistingResources);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool EndUpdateResource(IntPtr hUpdate, bool fDiscard);
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
public static void InjectIcon(string execFileName, string iconFileName, uint iconGroupID, uint iconBaseID)
{
const uint RT_ICON = 3;
const uint RT_GROUP_ICON = 14;
// アイコンファイルの読み込み
IconFile iconFile = new IconFile();
iconFile.Load(iconFileName);
// リソースの更新開始
IntPtr hUpdate = BeginUpdateResource(execFileName, false);
Debug.Assert(hUpdate != IntPtr.Zero);
// RT_GROUP_ICON 書き込み
byte[] data = iconFile.CreateIconGroupData(iconBaseID);
UpdateResource(hUpdate, RT_GROUP_ICON, iconGroupID, 0, data, (uint)data.Length);
// RT_ICON書き込み
for (int i = 0; i < iconFile.GetImageCount(); i++)
{
byte[] image = iconFile.GetImageData(i);
UpdateResource(hUpdate, RT_ICON, (uint)(iconBaseID + i), 0, image, (uint)image.Length);
}
// リソースの更新終了
EndUpdateResource(hUpdate, false);
}
}
}
上添加图标受保护的文件,而不会破坏任何帮助或建议?
如果输入文件(要保护的文件)默认没有图标,怎么办? – 2012-03-21 19:12:47
@mohamedmaache:如果将其注入到输出可执行文件中,如果将其注入输出可执行文件,保护系统是否会将其传递给输出可执行文件?如果这样,应该工作。 – Guvante 2012-03-21 19:15:58
好吧,我会试一试。 – 2012-03-21 19:20:40