发新话题
打印

如何从文件中提取图标

如何从文件中提取图标

  使用下面的示例,你可以方便地从EXE,DLL及ICO文件中提取图标。该示例程序使用ExtractIconEXAPI函数从文件中提取图标,并返回图标句柄,然后利用该句柄,使用DrawIcon函数将图标绘制到目标设备中。最后清除句柄以释放系统资源。
创建新工程后,在工程中添加对StandardOLETypes的引用,然后在工程中添加一个标准模块。将下面的代码粘贴到标准模块中:
OptionExplicit
**TypePicBmp
SizeAsLong
tTypeAsLong
hBmpAsLong
hPalAsLong
ReservedAsLong
EndType
**TypeGUID
Data1AsLong
Data2AsInteger
Data3AsInteger
Data4(7)AsByte
EndType
**DeclareFunctionOleCreatePictureIndirectLib"olepro32.dll"(PicDescAsPicBmp,RefIIDAsGUID,_
ByValfPictureOwnsHandleAsLong,IPicAsIPicture)AsLong
**DeclareFunctionExtractIconExLib"shell32.dll"Alias"ExtractIconExA"(ByVallpszFileAsString,ByVal_
nIconIndexAsLong,phiconLargeAsLong,phiconSmallAsLong,ByValnIconsAsLong)AsLong
**DeclareFunctionDestroyIconLib"user32"(ByValhiconAsLong)AsLong
PublicFunctionGetIconFromFile(FileNameAsString,IconIndexAsLong,UseLargeIconAsBoolean)AsPicture
'参数:
'FileName-包含有图标的文件(EXEorDLL)
'IconIndex-欲提取的圉标的索引,从零开始
'UseLargeIcon-如设置为True,则提取大图标,否则提取小图标
'返回值:包含标标的Picture对象
DimhlargeiconAsLong
DimhsmalliconAsLong
DimselhandleAsLong
'IPicturerequiresareferenceto"StandardOLETypes."
DimpicAsPicBmp
DimIPicAsIPicture
DimIID_IDispatchAsGUID
IfExtractIconEx(FileName,IconIndex,hlargeicon,hsmallicon,1)>0Then
IfUseLargeIconThen
selhandle=hlargeicon
Else
selhandle=hsmallicon
EndIf
'FillinwithIDispatchInterfaceID.
WithIID_IDispatch
.Data1=

TOP

发新话题