日期:2014-05-17  浏览次数:21030 次

如何得到系统ico
我知道 可以用

C# code
     Icon icon = System.Drawing.Icon.ExtractAssociatedIcon(openFileDialog1.FileName);


得到一个已经存在的文件的系统图标.

但是我想指定一个后缀后, 没有文件也能得到它的系统ico

例如 输入"*.txt" 它就给我一个txt文件的图标

------解决方案--------------------
SHGetFileInfo 封装一下
------解决方案--------------------
你可以在程序的当前文件夹下创建个.txt文件,然后再获取这个临时文件的ICO,然后再删掉文件。。。
------解决方案--------------------
这里有代码,自己看下吧。

Display pretty file icons in your ASP.NET applications with IconHandler
http://mvolo.com/display-pretty-file-icons-in-your-aspnet-applications-with-iconhandler
------解决方案--------------------
C# code


        /// <summary>   
        /// 通过扩展名得到图标和描述   
        /// </summary>   
        /// <param name="ext">扩展名</param>   
        /// <param name="LargeIcon">得到大图标</param>   
        /// <param name="smallIcon">得到小图标</param>   
        static void GetExtsIconAndDescription(string ext, out Icon largeIcon, out Icon smallIcon, out string description)
        {
            largeIcon = smallIcon = null;
            description = "";
            var extsubkey = Registry.ClassesRoot.OpenSubKey(ext);   //从注册表中读取扩展名相应的子键   
            if (extsubkey != null)
            {
                var extdefaultvalue = (string)extsubkey.GetValue(null);     //取出扩展名对应的文件类型名称   
                var typesubkey = Registry.ClassesRoot.OpenSubKey(extdefaultvalue);  //从注册表中读取文件类型名称的相应子键   
                if (typesubkey != null)
                {
                    description = (string)typesubkey.GetValue(null);   //得到类型描述字符串   
                    var defaulticonsubkey = typesubkey.OpenSubKey("DefaultIcon");  //取默认图标子键   
                    if (defaulticonsubkey != null)
                    {
                        //得到图标来源字符串   
                        var defaulticon = (string)defaulticonsubkey.GetValue(null); //取出默认图标来源字符串   
                        var iconstringArray = defaulticon.Split(',');
                        int nIconIndex = 0;
                        if (iconstringArray.Length > 1) int.TryParse(iconstringArray[1], out nIconIndex);
                        //得到图标   
                        System.IntPtr phiconLarge = new IntPtr();
                        System.IntPtr phiconSmall = new IntPtr();
                        NativeMethods.ExtractIconExW(iconstringArray[0].Trim('"'), nIconIndex, ref phiconLarge, ref phiconSmall, 1);
                        if (phiconLarge.ToInt32() > 0) largeIcon = Icon.FromHandle(phiconLarge);
                        if (phiconSmall.ToInt32() > 0) smallIcon = Icon.FromHandle(phiconSmall);
                    }
                }
            }
        }
        //----以下是Pinvoke生成代码----   

        [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
        public struct HICON__
        {

            /// int   
            public int unused;
        }

        public partial class NativeMethods
        {

            /// Return Type: UINT->unsigned int   
            ///lpszFile: LPCWSTR->WCHAR*   
            ///nIconIndex: int   
            ///phiconLarge: HICON*   
            ///phiconSmall: HICON*   
            ///nIcons: UINT->unsigned int   
            [System.Runtime.InteropServices.DllImportAttribute("shell32.dll", EntryPoint = "ExtractIconExW", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
            public static extern uint ExtractIconExW([System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute