Domanda

Ho il nome di percorso di un file exe.

Come faccio a trovare il percorso per l'icona che le finestre userebbero se questo file sono state ritirate sul desktop? (Voglio visualizzare questa icona nel mio programma.)

Ho bisogno di essere in grado di trovare l'icona tramite il mio programma C # in fase di esecuzione.

con C # in Visual Studio 2008.

È stato utile?

Soluzione

Se trovato questo codice in linea qualche tempo fa per fare questo:

class Win32
{
    public const uint SHGFI_ICON = 0x100;
    public const uint SHGFI_LARGEICON = 0x0; // 'Large icon
    public const uint SHGFI_SMALLICON = 0x1; // 'Small icon

    [DllImport("shell32.dll")]
    public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);

    public static Bitmap GetFileIcon(string fName)
    {
        IntPtr hImgSmall; //the handle to the system image list
        SHFILEINFO shinfo = new SHFILEINFO();
        hImgSmall = Win32.SHGetFileInfo(fName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_SMALLICON);
        return Icon.FromHandle(shinfo.hIcon).ToBitmap();
    }
}


[StructLayout(LayoutKind.Sequential)]
public struct SHFILEINFO
{
    public IntPtr hIcon;
    public IntPtr iIcon;
    public uint dwAttributes;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
    public string szDisplayName;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
    public string szTypeName;
};

è inoltre necessario

using System.Drawing;
using System.Runtime.InteropServices;

per fare riferimento a tutte le classi appropriate

Altri suggerimenti

L'icona di default sarebbe quello incorporato nel exe di indice 0.

un'occhiata a:. Progetto immobili> scheda applicazione> Icona

questo articolo CodeProject sembra fare il lavoro abbastanza bene. Esso fornisce una classe IconExtractor che incapsula tutte le cose API Win32 per voi in una bella interfaccia gestita.

È possibile usarlo come tale:

using TKageyu.Utils;

...

using (IconExtractor ie = new IconExtractor(@"D:\sample.exe")) 
{
    Icon icon0 = ie.GetIcon(0);
    Icon icon1 = ie.GetIcon(1);

    ...

    Icon[] splitIcons = IconExtractor.SplitIcon(icon0);

    ...
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top