سؤال

لدي اسم المسار إلى ملف .exe.

كيف يمكنني العثور على المسار إلى الرمز الذي سيستخدم Windows إذا تم إسقاط هذا الملف على سطح المكتب؟ (أريد عرض هذا الرمز في برنامجي الخاص.)

أحتاج إلى أن أكون قادرا على العثور على الرمز عبر برنامج C # في وقت التشغيل.

باستخدام C # في Visual Studio 2008.

هل كانت مفيدة؟

المحلول

إذا وجدت هذا الرمز عبر الإنترنت منذ فترة للقيام بذلك:

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

ستحتاج أيضا

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

للإشارة إلى جميع الفئات المناسبة

نصائح أخرى

سيكون الرمز الافتراضي هو واحد مضمن في EXE في الفهرس 0.

إلقاء نظرة على: خصائص المشروع> علامة تبويب التطبيق> أيقونة.

هذه التعليمات البروية يبدو أن تفعل الوظيفة جيدا. إنه يوفر ل IconExtractor الطبقة التي تغطي جميع الأشياء Win32 API لك في واجهة مدارة لطيفة.

يمكنك استخدامه على هذا النحو:

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

    ...
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top