用Microsoft.Win32中的类读注册表,
在HKEY_CLASSES_ROOT下找到扩展名的键如.txt, 读出它的(默认)值,是一个string,如:
txtfile,再找到名为txtfile的键,它的子键 DefaultIcon的默认值就是图标的路径

解决方案 »

  1.   


    public class ExtractIcon
    {
    [DllImport("Shell32.dll")]
    private static extern int  SHGetFileInfo
    (
    string pszPath,
    uint dwFileAttributes,
    out SHFILEINFO psfi,
    uint cbfileInfo,
    SHGFI uFlags
    ); [StructLayout(LayoutKind.Sequential)]
    private struct SHFILEINFO
    {
    public SHFILEINFO(bool b)
    {
    hIcon=IntPtr.Zero;iIcon=0;dwAttributes=0;szDisplayName="";szTypeName="";
    }
    public IntPtr hIcon;
    public int iIcon;
    public uint dwAttributes;
    [MarshalAs(UnmanagedType.LPStr, SizeConst=260)]
    public string szDisplayName;
    [MarshalAs(UnmanagedType.LPStr, SizeConst=80)]
    public string szTypeName;
    }; private ExtractIcon()
    {
    } private enum SHGFI
    {
    SmallIcon   = 0x00000001,
    LargeIcon   = 0x00000000,
    Icon    = 0x00000100,
    DisplayName   = 0x00000200,
    Typename   = 0x00000400,
    SysIconIndex  = 0x00004000,
    UseFileAttributes = 0x00000010
    }
    public static Icon GetIcon(string strPath,bool bSmall)
    {
    SHFILEINFO info = new SHFILEINFO(true);
    int cbFileInfo = Marshal.SizeOf(info);
    SHGFI flags;
    if (bSmall)
    flags = SHGFI.Icon|SHGFI.SmallIcon|SHGFI.UseFileAttributes;
    else
    flags = SHGFI.Icon|SHGFI.LargeIcon|SHGFI.UseFileAttributes; SHGetFileInfo(strPath, 256, out info,(uint)cbFileInfo, flags);
    return Icon.FromHandle(info.hIcon);
    }
    }
      

  2.   

    http://www.codeproject.com/csharp/fileicon.asp
    http://support.microsoft.com/default.aspx?scid=kb;en-us;319350
      

  3.   

    to: Tigatron(Illidian)
    好象很少扩展名有 DefaultIcon 这个子键,他们都有自己的图标,是否还有其他方法读取?