Newsgroup: it.comp.lang.visual-basic
Titolo: VB6 e le icone associate agli applicativi !

Salutoni a tutto il NG, ho bisogno di popolare una ImageList con le icone 
associate ad un applicazione, un pò come avviene esplorando una cartella con 
"esplora risorse", dove appunto ogni file ha la sua icona che lo rappresenta 
in base all'estensione, come posso caricare l'icona ad esempio del file 
"pippo.txt" nella mia ImageList, in pratica il problema è dove si trovano 
queste icone fisicamente e risalire ad esse in base appunto all'estensione 
che hanno.
Premetto che con la funzione API "FindExecutable", ho ricavato 
l'applicazione che ad esempio apre il file, ecco ora si tratta di trovare un 
qualcosa di analogo per le rispettive icone associate.
E' possibile tutto questo in VB in qualche modo senza l'utilizzo di API ?
E se fosse possibile solo con le API appunto, allora cerco una funzione che 
passando il nome dell'applicazione esempio (notepad.exe), mi restituisca 
l'icona associata permettendomi di caricarla in una ImageList.
Da qui potrò poi inserirla come SmallIcon in una listview, e questa cosa sò 
già come affrontarla.
Spero in una risposta o magari ancora meglio ad un esempio di codice cocreto 
!!!
Fatemi sapere :-)
 

Questo fa parecchio:
Dim IcoInfor As SHFILEINFO
SHGetFileInfo "C:\prova.txt", 0, IcoInfor, Len(IcoInfor), SHGFI_ICON
DrawIconEx Picture1.hDC, 0, 0, IcoInfor.hicon, 0, 0, 0, 0, DI_NORMAL
nota:
c' è anche il parametro per quelle piccole
SHGFI_SMALLICON



Grazie Teo, tuttavia mi manca una informazione ancora, cosa è IcoInfor ?
Nel tuo esempio, manca la dichiarazione di questa variabile, che viene 
passata per riferimento, così mi dice VB6 quando eseguo l'esempio, ti posto 
come ho dichiarato le funzioni, mi puoi dire se e cosa manca eventualmente?
Ho dichiarato in modulo.bas le funzioni, in questo modo:
*******************************************
Public Const SHGFI_SMALLICON = &H1
Public Const SHGFI_ICON = &H100
Public Const MAX_PATH = 260
Public Type SHFILEINFO
        hIcon As Long          '  out: icona
        iIcon As Long          '  out: indice icona
        dwAttributes As Long               '  out: flag SFGAO_
        szDisplayName As String * MAX_PATH '  out: nome visualizzato (o 
percorso)
        szTypeName As String * 80         '  out: nome tipo
End Type
Public Declare Function SHGetFileInfo Lib "shell32.dll" Alias 
"SHGetFileInfoA" (ByVal pszPath As String, ByVal dwFileAttributes As Long, 
psfi As SHFILEINFO, ByVal cbFileInfo As Long, ByVal uFlags As Long) As Long
Public Declare Function DrawIconEx Lib "user32" (ByVal hdc As Long, ByVal 
xLeft As Long, ByVal yTop As Long, ByVal hIcon As Long, ByVal cxWidth As 
Long, ByVal cyWidth As Long, ByVal istepIfAniCur As Long, ByVal 
hbrFlickerFreeDraw As Long, ByVal diFlags As Long) As Long
******************************************
Se qui non ho omesso nulla, cosa che credo in quanto non ho più errori 
RUNTIME nel modulo, ma solo nella Sub del tuo esempio cioè qui:
SHGetFileInfo "C:\prova.txt", 0, icoinfor, Len(icoinfor), SHGFI_ICON
Infatti il RunTime mi comunica come non definita la variabile "icoinfor" 
passata come o per riferimento, dove e come va dichiarata questa ?
Ho provato con DIM prima del tuo codice cosi:
Dim icoinfor As Long     ' cosi non va
Dim icoinfor As Variant  ' e nemmeno cosi non va
SHGetFileInfo "C:\prova.txt", 0, icoinfor, Len(icoinfor), SHGFI_ICON
Non ne sto uscendo da questo pasticcio, mi potresti illuminare 
ulteriormente, e magari controllando per me che io abbia effettivamente 
dichiarato tutto ciò che serve, sopratutto nel modulo.bas ?
Grazie per la pazienza, sono un novellino e nell'uso delle API, finisco 
sempre per impantanarmi !!!
Ivan :-)

 Dim icoinfor As Variant  ' e nemmeno cosi non va
Infatti è una variabile di tipo SHFILEINFO quindi:
Dim IcoInfor As SHFILEINFO
Ciao!
-- 
Free As In Freedom
www.fsf.org
http://blog.libero.it/LeleB/


Grazie
Purtoppo come novizio non ci sarei mai arrivato, ma c'è ancora un problema 
nella riga seguente, ed è della stessa natura o quasi, almeno credo:
DrawIconEx Picture1.hdc, 0, 0, IcoInfor.hIcon, 0, 0, 0, 0, DI_NORMAL
questa volta è DI_NORMAL, ho cercato questa costante che penso possa essere 
una costante con il visualizzatore di API ma non la trovo e probabilmente 
andava definita nel modulo.bas insieme alle altre, e nell'elenco delle 
costanti ho trovato solo queste 2 che tuttavia non credo abbiano alcuna 
attinenza con il problema che mi si presenta:
DI_CHANNEL = 1
DI_READ_SPOOL_JOB = 3
Che faccio adesso ?
Ivan 

Const DI_MASK = &H1
Const DI_IMAGE = &H2
Const DI_NORMAL = DI_MASK Or DI_IMAGE
oppure
Const DI_Normal = &H3


Grazie a tutti per la collaborazione e con rammarico vi dico anticipatamente 
che so che sembrerò di una pesantezza inaudita, ma adesso che finalmente ho 
risolto tutto, e che il runtime viaggia normale, devo purtoppo dire che 
nella Picture1. non compare nulla, rimane vuota !!!
E adesso ?
Ivan !

 ha scritto nel messaggio 
news:ue%pf.17156$Cn4....@tornado.fastwebnet.it...

Rettifico, adesso tutto funziona, non andava perchè purtoppo non era attivo 
AutoRedraw nella PictureBox, per fortuna almeno questo l'ho scoperto da 
solo, però se me lo avreste detto avrei risparmiato il post precedente, 
comunque grazie a tutti per l'aiuto, adesso anzi che nella piturebox, vorrei 
poter caricare la stessa icona in una ImageList, prima vedo se ci arrivo da 
solo al come, e se non ci arriverò in tal caso chiederò nuovamente i vostri 
preziosi consigli.
Grazie per ora !!! :-)
Ivan