VB 提取exe 中的图标(ICO)

2025-06-21 20:15:50
推荐回答(5个)
回答1:

'SavePicture方法保存ico图标时会失真,他保存真彩色时候会自动把图标转换成256色,这也是这个方法保存ico的不足,除非自己懂ico文件结构,把ico图标数据自己写到文件中,否则该函数会自动将真彩色
转换
256色保存,放在picturebox中的图片已经不是ico图标了,那是bmp图片,即使把bmp背景去掉还是要显示出来,ico图片里面有2张位图,一张是真图,另一张是掩码图(掩码图就是在显示的时候去除真图中不该显示的地方,比如说把ico图标放在桌面显示,系统会将ico的真图和掩码图拿出来,通过掩码图进行一种图像的叠加计算,让真图不该显示的地方去掉,让这个去掉的地方显示桌面的背景图)
Private
Type
PicBmp
Size
As
Long
tType
As
Long
hBmp
As
Long
hPal
As
Long
Reserved
As
Long
End
Type
Private
Type
GUID
Data1
As
Long
Data2
As
Integer
Data3
As
Integer
Data4(7)
As
Byte
End
Type
Private
Declare
Function
ExtractIcon&
Lib
"shell32.dll"
Alias
"ExtractIconA"
(ByVal
hInst
As
Long,
ByVal
lpszExeFileName
As
String,
ByVal
nIconIndex
As
Long)
Private
Declare
Function
OleCreatePictureIndirect
Lib
"olepro32.dll"
(PicDesc
As
PicBmp,
RefIID
As
GUID,
ByVal
fPictureOwnsHandle
As
Long,
IPic
As
Picture)
As
Long
Private
Declare
Function
ExtractIconEx
Lib
"shell32.dll"
Alias
"ExtractIconExA"
(ByVal
lpszFile
As
String,
ByVal
nIconIndex
As
Long,
phiconLarge
As
Long,
phiconSmall
As
Long,
ByVal
nIcons
As
Long)
As
Long
Private
Declare
Function
DestroyIcon
Lib
"user32"
(ByVal
hIcon
As
Long)
As
Long
Public
Function
GetIconFromFile(FileName
As
String)
As
Picture
Dim
hlargeicon
As
Long,
hsmallicon
As
Long,
selhandle
As
Long
Dim
pic
As
PicBmp,
IPic
As
IPicture,
IID_IDispatch
As
GUID
selhandle
=
ExtractIcon(0,
FileName,
0)
If
selhandle
>
0
Then
With
IID_IDispatch
.Data1
=
&H20400
.Data4(0)
=
&HC0
.Data4(7)
=
&H46
End
With
With
pic
.Size
=
Len(pic)
.tType
=
vbPicTypeIcon
.hBmp
=
selhandle
End
With
Call
OleCreatePictureIndirect(pic,
IID_IDispatch,
0,
IPic)
Picture1.Picture
=
IPic
Set
GetIconFromFile
=
IPic
DestroyIcon
hsmallicon
DestroyIcon
hlargeicon
End
If
End
Function
Private
Sub
Form_Load()
SavePicture
GetIconFromFile("exe文件路径"),
"保存的位置.ico"
End
Sub

回答2:

已经有好的软件了,不用做了。

回答3:

有一个软件,可以把任何软件里的ICO提取出来,不管是exe还识别的文件,都可以,你要不?

回答4:

IcoSprite这个工具提处图标很强,什么样的加密加壳都可以提出来

回答5:

eXeScope 用这个打开EXE 点资源--图标~然后d导出~原滋原味