原文:封装:Windows系统文件图标

用途:用于获取文件系统默认图标

    1. using System;
      1. using System.Collections.Generic;
        1. using System.Drawing;
          1. using System.IO;
            1. using System.Linq;
              1. using System.Runtime.InteropServices;
                1. using System.Text;
                    1. namespace HebianGu.ComLibModule.API
                      1. {
                          1. /// <summary> 获取文件关联图标 </summary>
                            1. public partial class IconHelper
                              1. {
                                1. /// <summary> 返回系统设置的图标 </summary>
                                  1. /// <param name="pszPath">文件路径 如果为"" 返回文件夹的</param>
                                    1. /// <param name="dwFileAttributes">0</param>
                                      1. /// <param name="psfi">结构体</param>
                                        1. /// <param name="cbSizeFileInfo">结构体大小</param>
                                          1. /// <param name="uFlags">枚举类型</param>
                                            1. /// <returns>-1失败</returns>
                                              1. [DllImport("shell32.dll")]
                                                1. public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);
                                                    1. /// <summary> 获取文件图标 </summary>
                                                      1. public Icon GetFileIcon(string p_Path)
                                                        1. {
                                                          1. SHFILEINFO _SHFILEINFO = new SHFILEINFO();
                                                            1. IntPtr _IconIntPtr = SHGetFileInfo(p_Path, 0, ref _SHFILEINFO, (uint)Marshal.SizeOf(_SHFILEINFO), (uint)(SHGFI.SHGFI_ICON | SHGFI.SHGFI_LARGEICON | SHGFI.SHGFI_USEFILEATTRIBUTES));
                                                              1. if (_IconIntPtr.Equals(IntPtr.Zero)) return null;
                                                                1. Icon _Icon = System.Drawing.Icon.FromHandle(_SHFILEINFO.hIcon);
                                                                  1. return _Icon;
                                                                    1. }
                                                                        1. /// <summary> 获取文件夹图标 </summary>
                                                                          1. public Icon GetDirectoryIcon()
                                                                            1. {
                                                                              1. SHFILEINFO _SHFILEINFO = new SHFILEINFO();
                                                                                1. IntPtr _IconIntPtr = SHGetFileInfo(@"", 0, ref _SHFILEINFO, (uint)Marshal.SizeOf(_SHFILEINFO), (uint)(SHGFI.SHGFI_ICON | SHGFI.SHGFI_LARGEICON));
                                                                                  1. if (_IconIntPtr.Equals(IntPtr.Zero)) return null;
                                                                                    1. Icon _Icon = System.Drawing.Icon.FromHandle(_SHFILEINFO.hIcon);
                                                                                      1. return _Icon;
                                                                                        1. }
                                                                                            1. /// <summary> 获取系统图标 </summary>
                                                                                              1. public Icon GetSystemInfoIcon(string p_Path)
                                                                                                1. {
                                                                                                  1. if (Path.HasExtension(p_Path))
                                                                                                    1. {
                                                                                                      1. try
                                                                                                        1. {
                                                                                                          1. return Icon.ExtractAssociatedIcon(p_Path);
                                                                                                            1. }
                                                                                                              1. catch
                                                                                                                1. {
                                                                                                                  1. return null;
                                                                                                                    1. }
                                                                                                                        1. }
                                                                                                                          1. else
                                                                                                                            1. {
                                                                                                                              1. return this.GetDirectoryIcon();
                                                                                                                                1. }
                                                                                                                                  1. }
                                                                                                                                      1. }
                                                                                                                                          1. partial class IconHelper
                                                                                                                                            1. {
                                                                                                                                              1. #region - Start 单例模式 -
                                                                                                                                                  1. /// <summary> 单例模式 </summary>
                                                                                                                                                    1. private static IconHelper t = null;
                                                                                                                                                        1. /// <summary> 多线程锁 </summary>
                                                                                                                                                          1. private static object localLock = new object();
                                                                                                                                                              1. /// <summary> 创建指定对象的单例实例 </summary>
                                                                                                                                                                1. public static IconHelper Instance
                                                                                                                                                                  1. {
                                                                                                                                                                    1. get
                                                                                                                                                                      1. {
                                                                                                                                                                        1. if (t == null)
                                                                                                                                                                          1. {
                                                                                                                                                                            1. lock (localLock)
                                                                                                                                                                              1. {
                                                                                                                                                                                1. if (t == null)
                                                                                                                                                                                  1. return t = new IconHelper();
                                                                                                                                                                                    1. }
                                                                                                                                                                                      1. }
                                                                                                                                                                                        1. return t;
                                                                                                                                                                                          1. }
                                                                                                                                                                                            1. }
                                                                                                                                                                                              1. /// <summary> 禁止外部实例 </summary>
                                                                                                                                                                                                1. private IconHelper()
                                                                                                                                                                                                  1. {
                                                                                                                                                                                                      1. }
                                                                                                                                                                                                        1. #endregion - 单例模式 End -
                                                                                                                                                                                                            1. }
                                                                                                                                                                                                                1. [StructLayout(LayoutKind.Sequential)]
                                                                                                                                                                                                                  1. public struct SHFILEINFO
                                                                                                                                                                                                                    1. {
                                                                                                                                                                                                                      1. public IntPtr hIcon;
                                                                                                                                                                                                                        1. public IntPtr iIcon;
                                                                                                                                                                                                                          1. public uint dwAttributes;
                                                                                                                                                                                                                            1. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
                                                                                                                                                                                                                              1. public string szDisplayName;
                                                                                                                                                                                                                                1. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
                                                                                                                                                                                                                                  1. public string szTypeName;
                                                                                                                                                                                                                                    1. }
                                                                                                                                                                                                                                          1. public enum SHGFI
                                                                                                                                                                                                                                            1. {
                                                                                                                                                                                                                                              1. SHGFI_ICON = 0x100,
                                                                                                                                                                                                                                                1. SHGFI_LARGEICON = 0x0,
                                                                                                                                                                                                                                                  1. SHGFI_USEFILEATTRIBUTES = 0x10
                                                                                                                                                                                                                                                    1. }
                                                                                                                                                                                                                                                      1. }
                                                                                                                                                                                                                                                    1.  

                                                                                                                                                                                                                                                    应用示例:

                                                                                                                                                                                                                                                      1. /// <summary> 图片路径 </summary>
                                                                                                                                                                                                                                                        1. public Icon ImagePath
                                                                                                                                                                                                                                                          1. {
                                                                                                                                                                                                                                                            1. get { return IconHelper.Instance.GetSystemInfoIcon(FilePath); }
                                                                                                                                                                                                                                                              1. }
                                                                                                                                                                                                                                                            1.  

                                                                                                                                                                                                                                                            封装:Windows系统文件图标的更多相关文章

                                                                                                                                                                                                                                                            1. SOUI界面库 添加 windows系统文件图标皮肤

                                                                                                                                                                                                                                                              最近在学习soui界面库.其中有用到SListCtrl这个控件来现在文件信息.控件用法基本上和mfc 的CListCtrl差不多.也支持图标显示.但是图标是要自己加入图标图片的.这个就有点不好弄.于是 ...

                                                                                                                                                                                                                                                            2. [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)

                                                                                                                                                                                                                                                              [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...

                                                                                                                                                                                                                                                            3. 修改windows系统文件权限

                                                                                                                                                                                                                                                              修改windows系统文件总是提示没有权限,虽然已是administrator也不管用. 以下方法可以解决: 右键属性,安全,高级,所有者,编辑,选择当前用户并确定, 回到上一页再确定, 然后在安全页 ...

                                                                                                                                                                                                                                                            4. windows系统文件和linux系统文件

                                                                                                                                                                                                                                                              windows系统文件和linux系统文件 1.单用户操作系统和多用户操作系统 单用户操作系统:指一台计算机在同一时间 只能由一个用户 使用,一个用户独自享用系统的全部硬件和软件资源 Windows ...

                                                                                                                                                                                                                                                            5. Windows系统文件详解【大全】

                                                                                                                                                                                                                                                              这是网络上转载的一篇文章,找不到原创的出处了--详细的介绍了WINDOWS系统文件的用途,我想各位保存一份以后说不定会有用吧,呵呵..这里按A到Z为大家分好类了,查询的话可以按键盘的Ctrl+F进行搜 ...

                                                                                                                                                                                                                                                            6. 清除Windows系统图标缓存

                                                                                                                                                                                                                                                              如果改变程序图标重新编译之后看到的图标并未改变,这可能不windows缓存了之前的图标导致的,需要清除Window的图标缓存来显示正确的图标. 下面是清除Windows系统图标缓存的批处理代码: re ...

                                                                                                                                                                                                                                                            7. Windows桌面图标不见了,可能是结束了explorer.exe进程导致

                                                                                                                                                                                                                                                              Windows桌面图标不见了,怎么办?那么可能是你关掉了explorer.exe的进程. 解决办法: ① Ctrl+shift+delete打开任务管理器,查看进程是否有explorer.exe ② ...

                                                                                                                                                                                                                                                            8. 【管理员已阻止你运行此应用】windows defender图标打叉,无法打开mmc.exe解决办法

                                                                                                                                                                                                                                                              今天开机遇到一个奇怪的问题,发现windows defender图标上面打了个×: 打开按照系统提示需要restart服务,但是无法重启服务,会出现错误,然后尝试手动重启服务,准备打开管理控制台mmc ...

                                                                                                                                                                                                                                                            9. [ES4封装教程]3.使用 Easy Sysprep v4 封装 Windows 7

                                                                                                                                                                                                                                                              (一)安装与备份系统 1.安装 Windows 7 可能很多人会说,安装Win7谁不会,这也用说?装Win7的确人人都会,但如何安装才是最适合系统封装的,就未必是人人都会了.安装是封装之本,没有好的安 ...

                                                                                                                                                                                                                                                            随机推荐

                                                                                                                                                                                                                                                            1. flask Gunicorn和uwsgi并发对比(转载)

                                                                                                                                                                                                                                                              转载 结果 吞吐量(要求/秒) 响应时间(毫秒) 失误 吞吐量的标准偏差(要求/秒) 尽管uWSGI的性能在高负载下确实有些不稳定,但它看起来像Python应用服务器.uWSGI不仅速度快得离谱,而且 ...

                                                                                                                                                                                                                                                            2. 【GPU加速系列】PyCUDA(一):上手简单操作

                                                                                                                                                                                                                                                              PyCUDA 可以通过 Python 访问 NVIDIA 的 CUDA 并行计算 API. 具体介绍和安装可以参考 PyCUDA 官网文档和 pycuda PyPI. 本文涵盖的内容有: 通过 PyC ...

                                                                                                                                                                                                                                                            3. linux 文件上传 linux服务器

                                                                                                                                                                                                                                                              1.Linux下目录复制:本机->远程服务器 1 2 scp  -r /home/shaoxiaohu/test1  zhidao@192.168.0.1:/home/test2  #test1 ...

                                                                                                                                                                                                                                                            4. 浅析 fstab 与移动硬盘挂载方法

                                                                                                                                                                                                                                                              本文转自 Steins;Lab,非常详细地介绍了树莓派上 fstab 的配置项. 近期自己的Raspberry Pi出了点问题,总结总结便有了这篇文章. 本文首先记录“移动硬盘挂载”实际发生的问题,然 ...

                                                                                                                                                                                                                                                            5. 仿照手机写一个WIFI的操作程序

                                                                                                                                                                                                                                                              本篇博客仿照手机的功能,写一个WIFI的操作程序. 手机的WIFI功能有哪些呢?当我们进入wlan的设置界面的时候,将自动识别出若干个wifi的热点,并且会自动更新,当点击某个wifi热点的时候,然后 ...

                                                                                                                                                                                                                                                            6. 数组问题:a与&a有的区别

                                                                                                                                                                                                                                                              int a[5] = {0,1,2,3,4};这种用法还是比较常见的. #include <stdio.h> int main(void) { int a[5] = {0,1,2,3,4} ...

                                                                                                                                                                                                                                                            7. redhat quay 集成镜像构建

                                                                                                                                                                                                                                                              redhat quay 可以类似docker hub 那样进行镜像的构建,以下是一个学习,但是在测试中发现流程是可以通的,但是 quay 在对于dockerfile 内容处理上有bug,造成build ...

                                                                                                                                                                                                                                                            8. 踩iviewui中Tabs 标签页数据绑定坑

                                                                                                                                                                                                                                                              今天小颖要实现点击Tabs 标签页中每个标签,并动态获取当前点击的标签值. 一句话说不清楚,那就看动态图吧 小颖一开始看官网写的代码是: <template> <Tabs :valu ...

                                                                                                                                                                                                                                                            9. flex布局整理以及demo

                                                                                                                                                                                                                                                              flex: 概念: flex容器: display:flex flex项: 轴:水平的主轴.垂直的交叉轴 容器的属性: 1. flex-direction(决定主轴的方向.即项目的排列方向) 1.1 ...

                                                                                                                                                                                                                                                            10. 安卓设备连接Mac的简单方法

                                                                                                                                                                                                                                                              mac设备是苹果出品的桌面系统,以高冷而闻名,不同于我们平常使用的windows系统,mac系统对软件硬件的兼容性很差,将iOS 设备(iPhone.iPad和iPod)连接至Mac是一件很简单的事, ...