使用API获取Windows系统的文件关联图标

#region 读取文件图标

        [DllImport("shell32.dll")]

          static extern uint ExtractIconEx(string lpszFile, int nIconIndex, int[] phiconLarge, int[] phiconSmall, uint nIcons);

  

          /// <summary>

          /// 给出文件扩展名(.*),返回相应图标

          /// </summary>

          /// <param name="fileType">文件类型</param>

          /// <param name="isLarge">是否需要大图标,bool值</param>

         /// <returns></returns>

         Icon GetIconByFileType(string fileType, bool isLarge)

         {

 

             if (fileType == null || fileType.Equals(string.Empty)) return null;

 

             RegistryKey regVersion = null;

             string regFileType = null;

             string regIconString = null;

             string systemDirectory = Environment.SystemDirectory + "//";

 

             if (fileType[0] == '.')

             {

                 //读系统注册表中文件类型信息

                 regVersion = Registry.ClassesRoot.OpenSubKey(fileType, true);

                 if (regVersion != null)

                 {

                     regFileType = regVersion.GetValue("") as string;

                     regVersion.Close();

                     regVersion = Registry.ClassesRoot.OpenSubKey(regFileType + @"/DefaultIcon", true);

                     if (regVersion != null)

                     {

                         regIconString = regVersion.GetValue("") as string;

                         regVersion.Close();

                     }

                 }

                 if (regIconString == null || regIconString.Length <= 0)

                 {

                     //没有读取到文件类型注册信息,指定为未知文件类型的图标

                     regIconString = systemDirectory + "shell32.dll,0";

                 }

             }

             else

             {

                 //直接指定为文件夹图标

                 regIconString = systemDirectory + "shell32.dll,3";

             }

             string[] fileIcon = regIconString.Split(new char[] { ',' });

             if (fileIcon.Length != 2)

             {

                 //系统注册表中注册的标图不能直接提取,则返回可执行文件的通用图标

                 fileIcon = new string[] { systemDirectory + "shell32.dll", "2" };

             }

             Icon resultIcon = null;

             try

             {

                 //调用API方法读取图标

                 int[] phiconLarge = new int[1];

                 int[] phiconSmall = new int[1];

                 uint count = ExtractIconEx(fileIcon[0], Int32.Parse(fileIcon[1]), phiconLarge, phiconSmall, 1);

                 IntPtr IconHnd = new IntPtr(isLarge ? phiconLarge[0] : phiconSmall[0]);

                 resultIcon = Icon.FromHandle(IconHnd);

             }

             catch { }

             return resultIcon;

         }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值