这是一个C#调用系统API SHGetFileInfo 的一个演示例子,也是给一位网友的答复,先看效果图:

SHGetFileInfo 这个API, 可以获取指定对象的非常详细的相关信息,具体的内容,大家可以MSDN上关于此API的说明。

这个获取关联图标,可以获取磁盘分区的图标,可以获取某个特定类型的文件的图标,也可以获取某个指定文件的图标,下面给出实现的全部代码:

/// <summary>
/// 保存文件信息的结构体
/// </summary>
///
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
struct SHFILEINFO
{public IntPtr hIcon;public int iIcon;public uint dwAttributes;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]public string szDisplayName;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]public string szTypeName;
}class NativeMethods
{[DllImport("Shell32.dll", EntryPoint = "SHGetFileInfo", SetLastError = true, CharSet = CharSet.Auto)]public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbFileInfo, uint uFlags);[DllImport("User32.dll", EntryPoint = "DestroyIcon")]public static extern int DestroyIcon(IntPtr hIcon);#region API 参数的常量定义public const uint SHGFI_ICON = 0x100;public const uint SHGFI_LARGEICON = 0x0; //大图标 32×32public const uint SHGFI_SMALLICON = 0x1; //小图标 16×16public const uint SHGFI_USEFILEATTRIBUTES = 0x10;#endregion}
/// <summary>
/// 获取文件类型的关联图标
/// </summary>
/// <param name="fileName">文件类型的扩展名或文件的绝对路径</param>
/// <param name="isLargeIcon">是否返回大图标</param>
/// <returns>获取到的图标</returns>
static Icon GetIcon(string fileName, bool isLargeIcon)
{SHFILEINFO shfi = new SHFILEINFO();IntPtr hI;if (isLargeIcon)hI = NativeMethods.SHGetFileInfo(fileName, 0, ref shfi, (uint)Marshal.SizeOf(shfi), NativeMethods.SHGFI_ICON | NativeMethods.SHGFI_USEFILEATTRIBUTES | NativeMethods.SHGFI_LARGEICON);elsehI = NativeMethods.SHGetFileInfo(fileName, 0, ref shfi, (uint)Marshal.SizeOf(shfi), NativeMethods.SHGFI_ICON | NativeMethods.SHGFI_USEFILEATTRIBUTES | NativeMethods.SHGFI_SMALLICON);Icon icon = Icon.FromHandle(shfi.hIcon).Clone() as Icon;NativeMethods.DestroyIcon(shfi.hIcon); //释放资源return icon;
}private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{Help.ShowHelp(this, "http://www.zu14.cn");
}private void btnGetIcon_Click(object sender, EventArgs e)
{using (Graphics g = this.pbSmallIcon.CreateGraphics()){g.Clear(this.pbSmallIcon.BackColor); //清除picturebox的背景色,为了画透明图标g.DrawIcon(GetIcon(this.tbFileExt.Text, false), 1, 1); //绘制小图标}using (Graphics g = this.pbLargeIcon.CreateGraphics()){g.Clear(this.pbLargeIcon.BackColor); //清除picturebox的背景色,为了画透明图标g.DrawIcon(GetIcon(this.tbFileExt.Text, true), 1, 1); //绘制小图标}
}

转载于:https://www.cnblogs.com/sjcatsoft/archive/2009/04/04/1429479.html

C#获取文件(磁盘驱动器)的关联图标(使用API SHGetFileInfo)相关推荐

  1. 根据文件名或文件扩展名获取文件的默认图标

    新建一个vs2010 窗体项目,新建按钮button和图片picturebox 下面是程序 using System; using System.Collections.Generic; using ...

  2. windows 文件关联图标的设置方法 (附部分代码)

    windows文件关联图标的查看与设置, 主要是通过注册表实现的. 举例来说, .cpp文件的关联图标. 首先, 打开注册表: HKCR/.cpp, 如下图. 看红框部分, "默认" ...

  3. 用SHGetFileInfo函数获取文件信息

    Windows系统的shallapi函数 SHGetFileInfo函数 WINSHELLAPI DWORD WINAPI SHGetFileInfo(     LPCTSTR pszPath,   ...

  4. java 获取文件版本号_Java 获取资源文件路径

    1 问题描述 通过源码运行时,一般使用如下方式读取资源文件: String str = "1.jpg"; 资源文件与源码文件放在同一目录下,或者拥有同一父级目录: String s ...

  5. C#获取文件夹及文件的大小与占用空间的方法

    本文详细介绍了利用C#实现根据路径,计算这个路径所占用的磁盘空间的方法 . 网上有很多资料都是获取文件夹/文件的大小的.对于占用空间的很少有完整的代码.这里介绍实现这一功能的完整代码,供大家参考一下. ...

  6. 获取Favicon.ico网站图标接口api源码

    介绍: 获取Favicon.ico网站图标接口 favicon.ico一般用于作为缩略的网站标志,它显示位于浏览器的地址栏或者在标签上用于显示网站的logo, 目前主要的浏览器都支持favicon.i ...

  7. 拖放获取文件信息的bat代码

    参考:岁月如歌-通过拖曳获取文件信息的bat代码 拖放获取文件信息的bat代码 使用命令行配合7z解压文件时由于每次解压的文件不同,因此搜索了一下拖放识别文件信息的方法,以此方式来减轻工作量 获取文件 ...

  8. restfull服务器端获取文件,使用 FileREST API (获取文件服务) - Azure 文件存储 | Microsoft Docs...

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 获取文件服务属性 06 ...

  9. python中的content方法_content最新:python计算Content-MD5并获取文件的Content-MD5值方式_爱安网 LoveAn.com...

    关于"content"的最新内容 聚合阅读 这篇文章主要介绍了python计算Content-MD5并获取文件的Content-MD5值方式,具有很好的参考价值,希望对大家有所帮助 ...

最新文章

  1. python之路day05--字典的增删改查,嵌套
  2. win32 API 遍历一个目录下的文件
  3. 推送改变世界!Push提高用户活跃度的三不原则
  4. 单向环形列表及应用场景(约瑟夫环)
  5. 让 fork 出来的 Github 仓库从远端仓库拖取最新的修改
  6. Oracle 11g中文版高清视频教程
  7. leetcode150. 逆波兰表达式求值
  8. [Python][小知识][NO.3] Python 使用系统默认浏览器打开指定URL的网址
  9. kafka window 启动_Apache Flink结合Kafka构建端到端的Exactly-Once处理
  10. 卸载VMware Server后,无法加载登录用户界面 #F#
  11. Android 手机进入不了fastboot模式的解决方案
  12. 用Python实现简单的人脸识别,10分钟搞定!(附源码)
  13. 服务器部署Java项目详述
  14. 使用winfrom调用BarTender实现标签的打印
  15. 数据库表锁死的解决方法
  16. MATLAB求解导弹运动的一些基础方法
  17. 卡西欧5800程序集 第15篇 任意斜交角度坐标反算通用程序
  18. 我是这样克服拖延症的,你也可以试试
  19. leetcode | 971. Flip Binary Tree To Match Preorder Traversal(DFS/preorder)
  20. 手机测血氧Android应用,手机也能监测血氧饱和度?华为这个黑科技太实用了

热门文章

  1. 软考系统架构师笔记-最后知识点总结(四)
  2. Opencv 图片缩小尺寸原理
  3. python scatter 简书_写给 Pythonist 的 Spacemacs 入门指北
  4. 怎样在计算机中创建d盘,我在电脑D盘内新建了一个文件夹,怎么才能给 – 手机爱问...
  5. php的 datetime,PHP DateTime-修改参考
  6. python autoit获取网页ajax数据_WebDriver + Python 调用AutoIt例子(实现139邮箱写信页的附件上传)...
  7. python设计自定义函数_我可以为内置Python类型添加自定义方法/属性吗?
  8. linux 统计目录大小并按大小排序
  9. 操作系统之文件管理:9、磁盘的结构与磁盘调度算法(先来先服务FCFS、最短寻找时间优先SSTF、扫描算法SCAN、循环扫描算法C-SCAN、LOOK调度算法、C-LOOK调度算法)
  10. (计算机组成原理题目题型总结)第四章:指令系统