Question

J'ai le nom de chemin vers un fichier .exe.

Comment puis-je trouver le chemin de l'icône que les fenêtres utiliseraient si ce fichier a été déposé sur le bureau? (Je veux afficher cette icône dans mon propre programme.)

Je dois être en mesure de trouver l'icône via mon programme C # à l'exécution.

Utilisation de C # dans Visual Studio 2008.

Était-ce utile?

La solution

Si ce code trouvé en ligne il y a un certain temps pour le faire:

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;
};

vous avez également besoin

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

pour faire référence à toutes les classes appropriées

Autres conseils

L'icône par défaut serait celui intégré dans l'exe à l'index 0.

Regardez:. Propriétés du projet> onglet application> Icône

Cet article CodeProject semble faire le travail assez bien. Il fournit une classe IconExtractor qui encapsule tous les trucs de l'API Win32 pour vous dans une belle interface gérée.

Vous pouvez l'utiliser comme tel:

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);

    ...
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top