游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4412|回复: 5

关于动态修改EXE文件图标

[复制链接]

1

主题

8

帖子

31

积分

注册会员

Rank: 2

积分
31
发表于 2006-11-29 14:47:00 | 显示全部楼层 |阅读模式
首先说明的是
我想达到的效果是用代码修改一个exe文件的图标
而且不是用PE exp /exec之类修改资源的软件去改图标
那样回答的朋友谢谢了

我想编个类似 Ticnbat 这样的小游戏

下载:
http://www.chinadforce.com/viewthread.php?tid=622749&extra=page%3D1

既然是图标对战,我就需要生成一个图标
且图标是自定义的
(就是两个图标PK,有点类似网上namePK那个小游戏)
现在问题就是,我如何能修改一个exe文件的图标呢?
就象Ticnbat 的生成分身功能.

我想过用
UpdateResource
EndUpdateResource
BeginUpdateResource
这三个函数来替换图标资源,可是图标是写进去了,可是怎么也显示不了
可能是加载图标文件出错了吧

这里是另一个vb写的有我想要的功能的小软件
http://www.vbgood.com/viewthread.php?tid=42090&extra=page%3D1

反编译了下发现核心 API用的是

Declare FreeLibrary Lib "kernel32.dll"
Declare LockResource Lib "kernel32.dll"
Declare FreeResource Lib "kernel32.dll"
Declare LoadResource Lib "kernel32.dll"
Declare FindResourceA Lib "kernel32.dll"
Declare LoadLibraryA Lib "kernel32.dll"
Declare UpdateResourceA Lib "kernel32.dll"
Declare InitCommonControls Lib "comctl32.dll"
Declare EndUpdateResourceA Lib "kernel32.dll"
Declare BeginUpdateResourceA Lib "kernel32.dll"

它是如何工作的呢?
是在搞不明改如何做了,PE文件结构用不上吧/ [em24]

1

主题

8

帖子

31

积分

注册会员

Rank: 2

积分
31
 楼主| 发表于 2006-11-29 14:51:00 | 显示全部楼层

Re: 关于动态修改EXE文件图标

我的代码(不成功的):


Private Declare Function EndUpdateResource Lib "kernel32" Alias "EndUpdateResourceA" (ByVal hUpdate As Long, ByVal fDiscard As Long) As Long
Private Declare Function UpdateResource Lib "kernel32" Alias "UpdateResourceA" (ByVal hUpdate As Long, ByVal lpType As Long, ByVal lpName As Long, ByVal wLanguage As Long, ByVal lpData As String, ByVal cbData As Long) As Long
Private Declare Function BeginUpdateResource Lib "kernel32" Alias "BeginUpdateResourceA" (ByVal pFileName As String, ByVal bDeleteExistingResources As Long) As Long
Private Declare Function EnumResourceNames Lib "kernel32" Alias "EnumResourceNamesA" (ByVal hModule As Long, ByVal lpType As String, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function LockResource Lib "kernel32" (ByVal hResData As Long) As Long

Const CREATEPROCESS_MANIFEST_RESOURCE_ID = 101

Private Const RT_CURSOR = 1&
Private Const RT_BITMAP = 2&
Private Const RT_ICON = 3&
Private Const RT_MENU = 4&
Private Const RT_DIALOG = 5&
Private Const RT_STRING = 6&
Private Const RT_FONTDIR = 7&
Private Const RT_FONT = 8&
Private Const RT_ACCELERATOR = 9&
Private Const RT_RCDATA = 10&
Private Const RT_MESSAGETABLE = 11&
Private Const DIFFERENCE = 11&
Private Const RT_GROUP_CURSOR = RT_CURSOR + DIFFERENCE
Private Const RT_GROUP_ICON = RT_ICON + DIFFERENCE
Private Const RT_VERSION = 16&
Private Const RT_DLGINCLUDE = 17&
Private Const RT_PLUGPLAY = 19&
Private Const RT_VXD = 20&
Private Const RT_ANICURSOR = 21&
Private Const RT_ANIICON = 22&
Private Const RT_HTML = 23&



Private Sub Command1_Click()

    AddManifestResource "f:\1.exe"
End Sub

Public Sub AddManifestResource(ExeFile As String)
    Dim Manifest As String
    Dim aa As Long
    Open "F:\1.ico" For Binary As #1
    Manifest = Space$(LOF(1))
    Get #1, , Manifest
    Close
    Dim hRes As Long
    hRes = BeginUpdateResource(ExeFile, 0&)
    UpdateResource hRes, RT_GROUP_ICON, CREATEPROCESS_MANIFEST_RESOURCE_ID, 0, ByVal Manifest, Len(Manifest)
    EndUpdateResource hRes, 0
End Sub

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2006-11-29 18:27:00 | 显示全部楼层

Re:关于动态修改EXE文件图标

替换ICON资源。

1

主题

8

帖子

31

积分

注册会员

Rank: 2

积分
31
 楼主| 发表于 2006-11-29 20:20:00 | 显示全部楼层

Re:关于动态修改EXE文件图标


我知道啊
但是替换不了啊

1

主题

8

帖子

31

积分

注册会员

Rank: 2

积分
31
 楼主| 发表于 2006-12-5 10:10:00 | 显示全部楼层

Re:关于动态修改EXE文件图标

问了几天居然没人能帮忙!

好在自己解决问题了

0

主题

1

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2007-1-9 23:24:00 | 显示全部楼层

Re:关于动态修改EXE文件图标

楼主您好  ~_~ 您是不是解决了这个问题啦?
能否教下我怎么做呢?我也在找这个问题好久了!至今还没找到答案
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 05:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表