欢迎光临
我们一直在努力

获取文件夹中的图标资源

本站教程收集整理的这篇文章主要介绍了获取文件夹中的图标资源,本站教程本站觉得挺不错的,现在分享给大家,也给大家做个参考。

实现效果:

  

知识运用:

  API函数SHGetFileInfo    //获取包含在可执行文件或Dll中的图标数或图标资源

  

  和ExtractIconEx函数      //从限定的可执行文件 动态链接库 或者图标文件中生成图标句柄数组

  

香港vps

实现代码:

        [DllImport("sHell32.dll",EntryPoint = "SHGetFileInfo")]
        public static extern IntPtr SHGetFileInfo(@R_674_10495@ng pszPath,uint Flags);
        [DllImport("User32.dll",EntryPoint = "DestroyIcon")]
        public static extern int DestroyIcon(IntPtr hIcon);
        [DllImport("sHell32.dll")]
        public static extern uint ExtractIconEx(@R_674_10495@ng lpszFile,uint nIcons);
        [StructLayout(LayoutKind.Sequential)]
        public struct SHFILEINFO
        {
            public intPtr hIcon;
            public intPtr iIcon;
            public uint dwAttributes;
            [MarshalAs(UnmanagedType.byValTStr,SizeConst = 260)]
            public @R_674_10495@ng szdisplayName;
            [MarshalAs(UnmanagedType.byValTStr,SizeConst = 80)]
            public @R_674_10495@ng szTypename;
        }

        private void button2_Click(object sender,EventArgs E)
        {
            if (textBox1.Text.Length > 0)
                GetlistViewItem(textBox1.Text,imageList1,lv1);
        }

        public void GetlistViewItem(@R_674_10495@ng path,ImageList imagelist,ListView lv)      //获取指定路径下的所有文件及其图标
        {
            lv.Items.Clear();
            SHFILEINFO shfi = new SHFILEINFO();                                         //创建SHFILEINFO对象
            try
            {
                @R_674_10495@ng[] dirs = Directory.GetDirectories(path);                         //获取指定目录中子目录的名称
                @R_674_10495@ng[] files = Directory.GetFiles(path);                              //获取指定路径中文件的名称
                for (int i = 0; i < dirs.Length; i++)                                   //遍历子文件夹
                {
                    @R_674_10495@ng[] info = new String[4];                                      //定义一个数组
                    DirectoryInfo dir = new DirectoryInfo(dirs[i]);                     //根据文件夹路径创建DirectoryInfo对象
                    if (!(dir.Name == "RECYCLER" || dir.Name == "RECYCLED" || dir.Name == "Recycled" || dir.Name == "System Volume Infomation"))
                    {
                        //获取文件夹的图标及类型
                        SHGetFileInfo(dirs[i],(uint)0x80,ref shfi,(uint)System.Runtime.Interopservices.Marshal.SizeOf(shfi),(uint)(0x100 | 0x400));
                        imagelist.Images.Add(dir.Name,(Icon)Icon.FromHandle(shfi.hIcon).Clone());  //添加图标
                        info[0] = dir.Name;                                             //获取文件夹名称
                        info[1] = "";                                                   //获取文件夹大小
                        info[2] = "文件夹";                                             //获取类型
                        info[3] = dir.LastAccesstime.To@R_674_10495@ng();                        //获取修改时间
                        ListViewItem item = new ListViewItem(info,dir.Name);            //创建ListViewItem对象
                        lv.Items.Add(item);                                             //添加当前文件夹的基本信息
                        DestroyIcon(shfi.hIcon);                                        //销毁图标
                    }

                }
                for (int i = 0; i < files.Length; i++)                                  //遍历目录下的文件
                {
                    @R_674_10495@ng[] info = new String[4];
                    FileInfo fi=new FileInfo(files[i]);
                    @R_674_10495@ng Filetype=files[i].Sub@R_674_10495@ng(files[i].LasTindexOf(".")+1,files[i].Length-files[i].LasTindexOf(".")-1);
                    @R_674_10495@ng Newtype=Filetype.To@R_674_10495@ng();
                    if (!(Newtype == "sys" || Newtype == "ini" || Newtype == "bin" || Newtype ==  "log" || Newtype == "com" || Newtype == "bat" || Newtype == "db"))
                    {
                        SHGetFileInfo(files[i],(uint)(0x100 | 0x400));
                        imagelist.Images.Add(fi.Name,(Icon)Icon.FromHandle(shfi.hIcon).Clone());
                        info[0] = fi.Name;
                        info[1] = fi.Length.To@R_674_10495@ng();
                        info[2] = fi.Extension.To@R_674_10495@ng();
                        info[3] = fi.LastAccesstime.To@R_674_10495@ng();
                        ListViewItem item = new ListViewItem(info,fi.Name);
                        lv.Items.Add(item);
                        DestroyIcon(shfi.hIcon);
                    }
                }
            }
            catch{}
        }

        private void button1_Click(object sender,EventArgs E)
        {
            if (folderbrowserDialog1.ShowDialog() == DialogResult.oK)
            {
                textBox1.Text = folderbrowserDialog1.SELEctedpath;
            }
        }

本站总结

以上是本站教程为你收集整理的获取文件夹中的图标资源全部内容,希望文章能够帮你解决获取文件夹中的图标资源所遇到的程序开发问题。

如果觉得本站教程网站内容还不错,欢迎将本站教程推荐给好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。