首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

怎么得到系统ico

2012-09-18 
如何得到系统ico我知道 可以用C# codeIcon icon System.Drawing.Icon.ExtractAssociatedIcon(openFileDi

如何得到系统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(System.Runtime.InteropServices.UnmanagedType.LPWStr)] string lpszFile, int nIconIndex, ref System.IntPtr phiconLarge, ref System.IntPtr phiconSmall, uint nIcons);        } 


[解决办法]

C# code
[DllImport("shell32", EntryPoint = "SHExtractIconsW", CharSet = CharSet.Unicode, SetLastError = true)]        public static extern int ExtractIcons        (            string filename,            int index,            int cx,            int cy,            IntPtr[] icons,            int[] iconIds,            int numberOfIcons,            int flags        );
[解决办法]
通过读注册表,取得文件的关联exe,.调用ExtractIcons 获取所有图标,大概思路就是这样,
好不好用没试过,自己测试下

热点排行