Newsgroup: it.comp.lang.visual-basic
Titolo: [.NET] Icone accanto a nome file

Ciao a tutti.
Dove posso reperire l'icona associata all'estensione tipica di windows
per ogni file in una ListView?
Mi spiego.
Ho l'elenco dei file in una listview e vorrei metterci a sinistra
l'icona tipica che quel file ha in windows (Ad esempio se č un .doc
potrei avere l'icona di Word se word č il programma associato).
Grazie!!!
Shi Shao Max
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Già postato poco più sotto...
 Declare Function ExtractAssociatedIcon Lib "shell32" Alias
"ExtractAssociatedIconA" (ByVal hInst As IntPtr, ByVal lpIconPath As String,
ByRef lpiIcon As Int32) As IntPtr
Public Function ExtractIcon(ByVal file As String) As Icon
      Dim m As [Module] = GetType(MeasureItemEventArgs).Module
      Dim hPtr As IntPtr = ExtractAssociatedIcon(Marshal.GetHINSTANCE(m),
file, 0)
      Return Icon.FromHandle(hPtr)
   End Function
HTH
-- 
Corrado Cavalli [Microsoft MVP]
UGIdotNET - 
http://www.ugidotnet.org

 potrei avere l'icona di Word se word č il programma associato).
Guarda sul Sito Comune ZipDir, fa anche questo.
Nota: č scritto male e ha qualche bug (ogni tanto va in errore), ma non era
questo lo scopo del progetto :)
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net


Ooops, scusa, non ho notato il tag [.NET] :(


    End Function
Purtroppo non riesco a capire la funzione. Ho messo l'Api in un modulo ma
poi non riesco ad utilizzarla :(
Se metto il nome del modulo "Dim m as [module]" mi dice che un modulo non
può essere un tipo.
Marshal.GetHINSTANCE cosa rappresenta?
Che capra :-)

Hai importato System.Runtime.InteropServices?


> Hai importato System.Runtime.InteropServices?
Quando vedevo che Marshal (non sapendo cosa fosse) non funzionava ho visto
che dovevo importare la classe.
Ho fatto un modulo con la dichiarazione:
Module Modulo
    Declare Function ExtractAssociatedIcon Lib "shell32" Alias _
    "ExtractAssociatedIconA" (ByVal hInst As IntPtr, ByVal lpIconPath As
String, _
    ByRef lpiIcon As Int32) As IntPtr
End Module
Ho aggiunto la funzione che hai postato tu:
Public Function ExtractIcon(ByVal file As String) As System.Drawing.Icon
    Dim m = GetType(MeasureItemEventArgs).Module
    Dim hPtr As IntPtr = ExtractAssociatedIcon(GetHINSTANCE(m), file, 0)
    Return Icon.FromHandle(hPtr)
End Function
Questo è il pezzo che dovrebbe (ma non fa) associare l'immagine. Sicuramente
sarà sbagliata...
Private Sub cboxDIR_SelectedIndexChanged(ByVal sender As Object, ByVal e As
System.EventArgs) Handles cboxDIR.SelectedIndexChanged
    Dim d As New System.IO.DirectoryInfo(cboxDIR.Text)
    Dim f As System.IO.FileInfo
    Dim img As New ImageList()
    Dim index As Integer
    ListaCLIENT.Items.Clear()
    ListaCLIENT.View = View.Details
    For Each f In d.GetFiles
        Dim ico As System.Drawing.Icon = ExtractIcon(f.Name)
        img.Images.Add(ico)
        index = img.Images.Count()
        ListaCLIENT.Items.Add(f.Name, index)
    Next
End Sub
GrAzIe!!!

Perň, visto che avevi problemi con [Module] hai pensato di toglierlo, non mi
pare un ottima idea e sopratutto vuol dire che stai lavorando con Option
Strict Off...
Comunque, prova in questo modo
Imports System.Runtime.InteropServices
Imports System.Reflection
Module Module1
   Declare Function ExtractAssociatedIcon Lib "shell32" Alias
"ExtractAssociatedIconA" (ByVal hInst As IntPtr, ByVal lpIconPath As String,
ByRef lpiIcon As Int32) As IntPtr
   Public Function ExtractIcon(ByVal file As String) As Icon
      Dim m As [Module] = GetType(MeasureItemEventArgs).Module
      Dim hPtr As IntPtr = ExtractAssociatedIcon(Marshal.GetHINSTANCE(m),
file, 0)
      Return Icon.FromHandle(hPtr)
   End Function
End Module


 Imports System.Reflection
Non importavo la System Reflection...
Problemi sintattici non ne ho piů, ma quando visualizzo le icone sono tutte
uguali in qualsiasi directory :(
Ti spiace dare un'occhiata a questa subroutine? Ci vedi qualcosa di
sbagliato?
Private Sub cboxDIR_SelectedIndexChanged(ByVal sender As Object, ByVal e As
System.EventArgs) Handles cboxDIR.SelectedIndexChanged
Dim d As New System.IO.DirectoryInfo(cboxDIR.Text)
Dim f As System.IO.FileInfo
Dim index As Integer
ListaCLIENT.Items.Clear()
ListaCLIENT.View = View.Details
Dim img As New ImageList()
For Each f In d.GetFiles
    Dim ico As System.Drawing.Icon = ExtractIcon(f.Name)
    img.Images.Add(ico)
    index = img.Images.Count() - 1
    ListaCLIENT.SmallImageList = img
    ListaCLIENT.Items.Add(f.Name, index)
Next
End Sub
Grazie infinite!!