封装: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系统文件图标的更多相关文章
- SOUI界面库 添加 windows系统文件图标皮肤
最近在学习soui界面库.其中有用到SListCtrl这个控件来现在文件信息.控件用法基本上和mfc 的CListCtrl差不多.也支持图标显示.但是图标是要自己加入图标图片的.这个就有点不好弄.于是 ...
- [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)
[分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...
- 修改windows系统文件权限
修改windows系统文件总是提示没有权限,虽然已是administrator也不管用. 以下方法可以解决: 右键属性,安全,高级,所有者,编辑,选择当前用户并确定, 回到上一页再确定, 然后在安全页 ...
- windows系统文件和linux系统文件
windows系统文件和linux系统文件 1.单用户操作系统和多用户操作系统 单用户操作系统:指一台计算机在同一时间 只能由一个用户 使用,一个用户独自享用系统的全部硬件和软件资源 Windows ...
- Windows系统文件详解【大全】
这是网络上转载的一篇文章,找不到原创的出处了--详细的介绍了WINDOWS系统文件的用途,我想各位保存一份以后说不定会有用吧,呵呵..这里按A到Z为大家分好类了,查询的话可以按键盘的Ctrl+F进行搜 ...
- 清除Windows系统图标缓存
如果改变程序图标重新编译之后看到的图标并未改变,这可能不windows缓存了之前的图标导致的,需要清除Window的图标缓存来显示正确的图标. 下面是清除Windows系统图标缓存的批处理代码: re ...
- Windows桌面图标不见了,可能是结束了explorer.exe进程导致
Windows桌面图标不见了,怎么办?那么可能是你关掉了explorer.exe的进程. 解决办法: ① Ctrl+shift+delete打开任务管理器,查看进程是否有explorer.exe ② ...
- 【管理员已阻止你运行此应用】windows defender图标打叉,无法打开mmc.exe解决办法
今天开机遇到一个奇怪的问题,发现windows defender图标上面打了个×: 打开按照系统提示需要restart服务,但是无法重启服务,会出现错误,然后尝试手动重启服务,准备打开管理控制台mmc ...
- [ES4封装教程]3.使用 Easy Sysprep v4 封装 Windows 7
(一)安装与备份系统 1.安装 Windows 7 可能很多人会说,安装Win7谁不会,这也用说?装Win7的确人人都会,但如何安装才是最适合系统封装的,就未必是人人都会了.安装是封装之本,没有好的安 ...
随机推荐
- <code> 标签 让一段计算机代码显示在网页中
<code> 标签 解释:要让一段计算机代码显示在网页中,那么这段代码需要用<code> 标签包起来,不然他会被当作网页的代码被 运行. 例如: <code>< ...
- java 深copy
public static<T> T deepClone(T src) throws IOException, ClassNotFoundException { Object obj = ...
- vue-router模式history与hash
[重点] history与hash路由的区别 hash前端路由,无刷新 history 会去请求接口 vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 U ...
- andrlid 处理大图片思路,未实践
Loading Large Bitmaps Efficiently 先不解码,读取image的宽高,然后降采样显示图片. 参考:http://developer.android.com/trainin ...
- 移动端适配(rem & viewport)--移动端开发整理笔记(四)
移动端适配 通过rem适配 em: 根据元素自身的字体大小来计算自己的尺寸 rem: (root em) 根据根节点(html)的字体大小来计算自己的尺寸 我们知道,在不同的手机设备,分辨率大小是 ...
- GrowingIO配置
一.什么是UTM参数UTM是一套标准的跟踪渠道流量的参数,你可以通过它来跟踪访问你网站的流量来自于哪些渠道.哪些媒介等. 二.高级用法 UTM参数包括了utm_source在内的5个参数,分别是: 参 ...
- Console工程下如何不显示控制台黑窗口只显示Windows窗口
原文地址https://www.cnblogs.com/smiler/p/4575052.html OpenGL,绘制图形的时候,如果不进行设置,运行的时候会先出现黑窗口再出现Windows窗口. 其 ...
- ESA2GJK1DH1K基础篇: STM32+GPRS(AT指令版)实现MQTT源码讲解(支持Air202,SIM800)
前言 注: 本程序发送心跳包,发送温湿度,返回控制数据这三个发送是单独的,有可能凑到一起发. 由于本身程序就是复杂性的程序,所以这节程序没有使用中断发送,没有使用环形队列发送,为了避免多条消息可能凑到 ...
- zabbix解决监控图形中文乱码
原文: https://blog.csdn.net/xujiamin0022016/article/details/86541783 zabbix 4解决监控图形中文乱码首先在windows里找到你想 ...
- <每日 1 OJ> -LeetCode20. 有效的括号
题目: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符串可 ...