// Lástima que cuando llegás mediante una búsqueda no aparece
(almenos usando el mozilla) la opción de "responder". //
bueno el tema es que me interesé en la función ExtractIconA para
sacar el icono por default de un exe.
pero los ejemplos que vi lo usan en convinación con DrawIcon ... en
fin
yo no quiero mostrar el icono en el tiempo en que lo extraigo, yo lo
que necesito es guardar el icono en una variable stdpicture para un uso
posterior
se puede?
incluso saca iconos de EXE, ICO todo... todito y hasta mejor
--------------------------------------
Private Type tPicBmp
Size As Long
Type 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 OleCreatePictureIndirect Lib "olepro32.dll"
(PicDesc As tPicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long,
IPic As IPicture) 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 IconFromFile(sFileName As String, Optional lIconIndex
As Long = 0, Optional bUseLargeIcon As Boolean = False) As StdPicture
Dim lhwndLargeIcon As Long, lhwndSmallIcon As Long, lhwndSelected As
Long
Dim tPic As tPicBmp, IPic As IPicture
Dim IID_IDispatch As GUID
If ExtractIconEx(sFileName, lIconIndex, lhwndLargeIcon, lhwndSmallIcon,
1) > 0 Then
If bUseLargeIcon Then
lhwndSelected = lhwndLargeIcon
Else
lhwndSelected = lhwndSmallIcon
End If
'Fill in with IDispatch Interface ID.
With IID_IDispatch
.Data1 = &H20400
.Data4(0) = &HC0
.Data4(7) = &H46
End With
'Fill tPic with necessary parts.
With tPic
.Size = Len(tPic) 'Length of structure.
.Type = 3 'vbPicTypeIcon, type of Picture
(bitmap).
.hBmp = lhwndSelected 'Handle to bitmap.
End With
'Create Picture object.
Call OleCreatePictureIndirect(tPic, IID_IDispatch, 1, IPic)
'Return the new Picture object.
Set IconFromFile = IPic
DestroyIcon lhwndSmallIcon
DestroyIcon lhwndLargeIcon
End If
End Function
--------------------------------
su uso es sencillisimo
dim ObjPicture as stdpicture
Set ObjPicture = IconFromFile("path\archivo.exe o .ico o .dll",,true)
Muy sorprendido... por ejemplo con el
set varstdpicture = loadpicture("ico.ico")
no me leia el icono del fifa2006 x que daba error formato no soportado
con esa función lee toooodo.
cuanlquier cosa que le pongas , tan eficaz como el mismismo explorer de
windows ensima si ponés el último parámetro en TRUE te devuelve la
versión 16x16 o 32x32 de los iconos y sino los chiquitos creo de 8x8 .
con el método loadpicture común de VB no solo los iconos eran
grabados en la variable con poca calidad (fidelidad) y hasta se veía
una sobrepixelación sino que además no trabajaba correctamente los
colores transparentes... ya que los ponía de color blanco y no del
color de fondo del objeto destino.
en fin..
con esta función lo hace todo perfecto....
miren