in

dotNet Umbria

Il primo User Group in Umbria sul mondo .Net

Paolo Possanzini

Ottenere l'icona di default di un tipo di file.

Spesso capita di dover creare una struttura per allegare alcuni file all'interno delle nostre applicazioni
Ecco un piccolissimo frammento di codice che aiuta ad ottenere a runtime l'icona di default per ogni tipo di file conosciuto dalla nostra macchina.

[code language="c#"]

[DllImport("Shell32.dll", EntryPoint = "ExtractIconExW", CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern int ExtractIconEx(string sFile, int iIndex, out IntPtr piLargeVersion, out IntPtr piSmallVersion, int amountIcons);

public static Icon GetIconForFileExtension(string fileextension)
{
  try
  {
    // Verifico la struttura dell'estensione (deve avere il puntino)
    if (!fileextension.StartsWith("."))
      fileextension = "." + fileextension;

    // Apro la chiave di registro dell'estensione ed ottengo l'applicazione associata al tipo di file
    RegistryKey fileextregkey = Registry.ClassesRoot.OpenSubKey(fileextension);
    string applicationname = fileextregkey.GetValue(string.Empty).ToString();

    // Apro la chiave di registro dell'applicazione ed ottengo il path e la posizione dell'icona di default.
    RegistryKey defaulticonkey = Registry.ClassesRoot.OpenSubKey(applicationname + @"\DefaultIcon");
    string defaulticonpath = defaulticonkey.GetValue(string.Empty).ToString();

    // Il tipo di file รจ composto da due parti separate da virgola, quindi procedo con lo split.
    string[] iconargs = defaulticonpath.Split(',');

    IntPtr large, small;

    // Eseguo la chiamata alla API che mi permette di estrarre gli Handle che contengono le mie icone.
    ExtractIconEx(iconargs[0], int.Parse(iconargs[1]), out large, out small, 1);
    // Ottengo l'icona dall'Handle
    Icon extractedIcon = Icon.FromHandle(small);
    return extractedIcon;
  }
  catch
  {
    return null;
  }
}

[/code]

Only published comments... Dec 10 2007, 11:53 PM by Paolo Possanzini

About Paolo Possanzini

Programmatore di vecchia data, mi sono appassionato a dotnet fin dalla prima versione. Mi interesso di programmazione, accesso ai dati, Sql Server.
Con Andrea abbiamo fondato TeamDev snc.

Scarica il mio Biglietto da visita
dotNet Umbria 2007-2008
Powered by Community Server (Commercial Edition), by Telligent Systems