首页 新闻 搜索 专区 学院

代码实现:给exe添加图标

0
悬赏园豆:10 [待解决问题]

怎么用代码实现:给一个没有图标资源的exe文件添加图标。

详细情况:

1、有2个exe执行文件:A.exe和B.exe;

2、A.exe是已知的(没有ico资源),B.exe是未知的(可能包含多个ico资源);

3、现在要做的就是,如何提取B.exe中的ico资源并将它们写入到A.exe中。

(注意1:B.exe中的ico资源可能尺寸为64*64,要求提取后不失真;)

参考工具:“IcoSprite.exe”——这个工具可以提取并修改指定尺寸的图标,但是无法直接写入;

参考类库:Vestris.ResourceLib.1.2.zip——这个类库有一个方法可以把图标资源写入到A.exe中,并且我用IcoSprite.exe工具可以看到被写入后的A.exe中的图标资源。但是,A.exe并不显示其被写入的图标资源?

问题补充:

我用Icon.ExtractAssociatedIcon(sourceFile);可以提取到B.exe的图标资源,

但是使用Icon.Save()保存后图标严重失真,好像是以16的色值保存的。

关于如何提取一个完整的ico文件,还请各位大侠指点。

ExDevilLee的主页 ExDevilLee | 初学一级 | 园豆:184
提问于:2014-04-09 17:18
< >
分享
所有回答(3)
0

楼主,我用过一个工具可以修改msi文件,即可以在A.exe还没有安装的时候修改它的icon图标。

可以配合你的“IcoSprite.exe”工具来实现你要的效果。

工具名字叫“Orca.exe” 图标是一个黑色的海豚。

seaconch | 园豆:4823 (老鸟四级) | 2014-04-09 17:49

你好,我是希望通过代码来实现提取完整图标信息,并希望保存后不失真。

另外,“IcoSprite.exe”工具是我从网上找的一款图标提取以及修改工具。

我的问题在于如何给没有图标的程序“添加”图标,而不是修改图标!

还是感谢您的回答!

支持(0) 反对(0) ExDevilLee | 园豆:184 (初学一级) | 2014-04-09 18:52

@ExDevilLee: 程序默认还是有Icon图标的。不然当你没有给的时候,按照您的意思,那么桌面上的快捷方式应该就什么都没有,只有一排文字咯

支持(0) 反对(0) seaconch | 园豆:4823 (老鸟四级) | 2014-04-10 09:36

@Goona: 当不给某个程序设置图标的时候,系统会给一个默认的图标,但是这个exe中的资源中确实不存在图标资源的。系统给的默认图标如下,并不像你所说的仅有一行文字:

支持(0) 反对(0) ExDevilLee | 园豆:184 (初学一级) | 2014-04-10 09:43

@ExDevilLee: 那就说明有咯,还有就是,即便是您的安装包没有icon也是可以用你计算机上的icon添加进去的。这个我是用过的,不会骗你的。

他的功能准确点说不是改,而是“给”,楼主为何不尝试一下后再说这个软件不行呢?

支持(0) 反对(0) seaconch | 园豆:4823 (老鸟四级) | 2014-04-10 09:46

感谢您的跟进,可能是我没有说清楚,我的这个A程序仅仅是个exe的执行程序,并不是msi的安装包程序。

我用过您说的这款软件,是无法打开exe程序的,不过这个软件确实不错,有其他用途,谢谢推荐。

支持(0) 反对(0) ExDevilLee | 园豆:184 (初学一级) | 2014-04-10 09:55

@ExDevilLee: 那没办法了

支持(0) 反对(0) seaconch | 园豆:4823 (老鸟四级) | 2014-04-10 10:04
0

1、提前图标还是比较简单的,不需要编程,网上随便找可以找出一堆软件达到这个目标。

2、修改一个EXE的图标,这个是比较难的,属于黑客手段。

    a. 如果有源代码,这个不用说了,最简单的,加入ICO后重新编译。

    b. 我估计你是没有源代码的,那为什么要给他图标呢?如果是只要在桌面上显示好看的话,可以给快捷方式选择一个图标的。

    c. 可能你有你的需求吧,不过感觉这个问题比较无聊,老费劲,没产出或是很少的产出,投入产出不成正比,呵呵。

差不多跟一个用户说要求我的软件看起来象OFFICE或是GOOGLE CHROM之类的外观,然后他只愿意出1元钱修改费,而我需要花费60个程序员天。

爱编程的大叔 | 园豆:30743 (高人七级) | 2014-04-09 17:51

您好,感谢您的回答。

第一个问题 ,提取图标我确实找到了一些方便的小工具,不过我就是比较好奇,那些小工具是怎么做到的可以提取并且保存后不失真。(我自己虽然也实现了图标的提取功能,但是保存后是失真的)

第二个问题,其实我做的是一个加壳工具,A.exe就是一个壳程序,B.exe是需要加壳的目标程序,其中我昨了一个工具是用A对B加壳,加壳后的效果就是从A程序启动B程序,但是现在功能实现了,加壳后的程序图标却没办法添加上,所以前来求助。

不过您说的2.b方案,确实是个不错的解决方案,可以考虑,谢谢!

支持(0) 反对(0) ExDevilLee | 园豆:184 (初学一级) | 2014-04-09 18:48

@ExDevilLee: 

保存失真是因为你选择的位值只有16位,这个有两个可能,一个是你用的类库太老了,不支持新的

高位值的ICO格式,还有另一个可能是你用的函数,默认设置是16位,你看看是否有变量可以修改,

要求更高的位值。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30743 (高人七级) | 2014-04-10 11:23
0

我是这样用代码实现给桌面快捷方式加图标的 

 

WshShell shell = new WshShell();
            //创建桌面快捷方式
            IWshShortcut shortcut;

 shortcut = (IWshShortcut)shell.CreateShortcut(i.FullName + "\\桌面\\A.lnk");
                    shortcut.Description = FileName;
                    shortcut.IconLocation = AppDomain.CurrentDomain.BaseDirectory + "\\Image\\" + ico;
                    shortcut.Save();

钱耀祖 | 园豆:44 (初学一级) | 2014-04-11 10:36

感谢您的回复。

关于如何生成快捷方式,我这已经有一套比较成熟且完整的方法。

不过有一个问题一直有些困扰着我:

我创建了一个相对路径的快捷方式,虽然路径发生变化,快捷方式仍有效,但是该快捷方式的图标却必须是绝对路径下的,暂时还没有找到如何设置相对路径的图标!

如果您有什么解决方案,请回复,谢谢!

支持(0) 反对(0) ExDevilLee | 园豆:184 (初学一级) | 2014-04-11 10:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册