封装:Windows系统文件图标

2024-05-26 16:58

本文主要是介绍封装:Windows系统文件图标,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

应用示例:

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


这篇关于封装:Windows系统文件图标的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1005057

相关文章

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)

《Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)》:本文主要介绍Java导入、导出excel的相关资料,讲解了使用Java和ApachePOI库将数据导出为Excel文件,包括... 目录前言一、引入Apache POI依赖二、用法&步骤2.1 创建Excel的元素2.3 样式和字体2.

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

Python中Windows和macOS文件路径格式不一致的解决方法

《Python中Windows和macOS文件路径格式不一致的解决方法》在Python中,Windows和macOS的文件路径字符串格式不一致主要体现在路径分隔符上,这种差异可能导致跨平台代码在处理文... 目录方法 1:使用 os.path 模块方法 2:使用 pathlib 模块(推荐)方法 3:统一使

Windows server服务器使用blat命令行发送邮件

《Windowsserver服务器使用blat命令行发送邮件》在linux平台的命令行下可以使用mail命令来发送邮件,windows平台没有内置的命令,但可以使用开源的blat,其官方主页为ht... 目录下载blatBAT命令行示例备注总结在linux平台的命令行下可以使用mail命令来发送邮件,Win