标题:大家帮帮忙,看怎么解决
只看楼主
ouyangouyang
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:273
专家分:579
注 册:2009-10-8
得分:0 
回复 10楼 小J
背景颜色搞定了,图标问题继续期待

多少恨, 昨夜梦魂中。 还似旧时游上苑, 车如流水马如龙; 花月正春风!
2010-03-04 19:27
longlong89
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:小飞侠
威 望:6
帖 子:1043
专家分:2754
注 册:2009-8-18
得分:0 
控制台下用API。

想象力征服世界
2010-03-04 19:28
longlong89
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:小飞侠
威 望:6
帖 子:1043
专家分:2754
注 册:2009-8-18
得分:0 
VC修改EXE文件图标的编程实现
作者:admin    文章来源:转载    点击数:553    更新时间:2009-8-10




这个问题以前在CSDN上解答过,但是当时只是提了提几个要用到的函数,自己并没有去动手写实现。前几天和某人讨论这个问题,他认为只有通过PE内部的资源偏移才好改,熊猫烧香就是这么搞的,而我坚持API也可以的观点。后来我想了想觉得这个问题值得记住,并自己亲手把它写出来并试验成功。贴出代码来给大家分享

EnableDebugPrivilge(SE_DEBUG_NAME,TRUE);
HGLOBAL hResLoad(NULL);      
HANDLE hExe(NULL);        
HRSRC hRes(NULL);         
HANDLE hUpdateRes(NULL);   
char * lpResLock;   
BOOL result;
hExe = LoadLibrary(_TEXT("D:\\Src.exe"));
if (hExe == NULL)
{
   AfxMessageBox("加载Src.exe失败.",0,0);
}
hRes = FindResource((HMODULE)hExe, (LPCSTR)1, RT_ICON);
if (hRes == NULL)
{
   AfxMessageBox("不能定位Src.exe中的第一个图标");
}
hResLoad = LoadResource((HMODULE)hExe, hRes);
if (hResLoad == NULL)
{
   AfxMessageBox("不能加载该图标资源");
}
lpResLock =(char *)LockResource(hResLoad);
if (lpResLock == NULL)
{
   AfxMessageBox("不能锁定该资源.");
}
hUpdateRes = BeginUpdateResource("G:\\Target.exe", FALSE);
if (hUpdateRes == NULL)
{
   AfxMessageBox("不能打开Target.exe准备写.");
}
result =UpdateResource((HMODULE)hUpdateRes , RT_ICON,
   (LPCSTR)1, 0, lpResLock, SizeofResource((HMODULE)hExe, hRes));
if (result == FALSE)
{
   AfxMessageBox("添加资源失败.");
}
if (!EndUpdateResource(hUpdateRes, FALSE))
{
   AfxMessageBox("不能向目标EXE中写入改动结束资源更新");
}
if (!FreeLibrary((HMODULE)hExe))
{
   AfxMessageBox("不能释放Src的句柄.");
}


有人说编程靠思路和套路,这个套路可真是够长的,这么多的函数必须按顺序配套使用,不能有差错。其实按照讨论的VC编程还有很多啊,比如CreateFile、CreateFileMapping、MapViewOfFile、UnmapViewOfFile这也是一个典型套路。

想象力征服世界
2010-03-04 19:32
ouyangouyang
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:273
专家分:579
注 册:2009-10-8
得分:0 
什么叫控制台,什么是api,你的代码我不知道什么意思额,别嫌麻烦说通俗点我只会拣现成的,拜托

多少恨, 昨夜梦魂中。 还似旧时游上苑, 车如流水马如龙; 花月正春风!
2010-03-05 08:54
韦春敢
Rank: 3Rank: 3
来 自:广西
等 级:论坛游侠
帖 子:91
专家分:142
注 册:2010-1-25
得分:0 
晕你们什么给人家来了VC++里面的东西能?人家学习的是C语言..像小J的那个解法行!
想用很多的图形函数就叁看#include<graphics.h>里函数.

哈哈
2010-03-05 10:10
wanlxtx
Rank: 2
来 自:河南郑州
等 级:论坛游民
威 望:1
帖 子:45
专家分:84
注 册:2010-2-6
得分:0 
上面说的改颜色不错啊,可以用的,楼主的问题确实比较难,我问了好几个人都不会啊!
2010-03-05 11:44
zdyzhang
Rank: 9Rank: 9Rank: 9
来 自:栖息地
等 级:蜘蛛侠
威 望:4
帖 子:2335
专家分:1227
注 册:2008-9-20
得分:0 
推荐使用OD- OllyDbg,至于使用方法。自己去找些教程。你只要把框架图片和图标那里的属性改成你自己想要的就行了。

悲剧源于生活。
2010-03-05 13:45
zhangxf1989
Rank: 6Rank: 6
等 级:侠之大者
帖 子:96
专家分:419
注 册:2009-9-5
得分:0 
要用简单的那就用Restorator啊!!

用Restorator 2007方法是:用Restorator打开程序,在右边的程序列表处右键单击程序名称,选择添加资源,在弹出的对话框中选择windows standard type 在下拉列表中选择图标,然后随便取一个名称(英文大写!),然后单击确定;然后就可以在程序下方看到多了一个名为图标的文件夹图标,右键单击图标文件夹,选择导入,然后选择你想要的图标文件(格式为ico)即可。(用Restorator可以更改几乎所有程序的图标)
 
2010-03-05 13:48
zdyzhang
Rank: 9Rank: 9Rank: 9
来 自:栖息地
等 级:蜘蛛侠
威 望:4
帖 子:2335
专家分:1227
注 册:2008-9-20
得分:0 
楼上的方法不错。不过要注意,找对对象!

悲剧源于生活。
2010-03-05 13:52
ouyangouyang
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:273
专家分:579
注 册:2009-10-8
得分:0 
不行啊,我试了好久没搞定,你们试了吗

多少恨, 昨夜梦魂中。 还似旧时游上苑, 车如流水马如龙; 花月正春风!
2010-03-05 19:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-298530-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.226658 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved