Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

extraer icono de exe y guardarlo en stdpicture

60 views
Skip to first unread message

flyguille

unread,
Feb 14, 2006, 5:58:56 PM2/14/06
to
ví este thread
http://groups.google.com/group/microsoft.public.es.vb/browse_frm/thread/3a081c3e61a79bdf/ae06873d2b106663?q=extraer+icono+exe&rnum=2#ae06873d2b106663

// 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?

flyguille

unread,
Feb 14, 2006, 8:07:53 PM2/14/06
to
me respondo a mi mismo para que quede... es que estoy tan maravillado
por esta función que hasta lee e interpreta correctamente lo que el
método LOADPICTURE de una variable std.picture NO 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 .

flyguille

unread,
Feb 14, 2006, 8:25:45 PM2/14/06
to
Y sigo asombrado...

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

http://www.mnbios.com.ar/dibujo.bmp

0 new messages