原文:【C#】WindowsAPICodePack-Shell使用教程

1.首先在项目中添加WindowsAPICodePack的Nuget包。

  点击安装即可。

2.获取《我的电脑》的名字和电脑图标

ShellObject so = ShellFileSystemFolder.FromParsingName(KnownFolders.Computer.ParsingName);
displayName = so.Name;
Bitmap bm = so.Thumbnail.SmallBitmap;
bm.MakeTransparent(System.Drawing.Color.Black);

其中,so.Name就是“我的电脑”的名字,注意不是机器名哦,机器名可以直接通过Environment.MachineName获取。

电脑图标可以通过so的Thumbnail获取,可以获得SmallBitmap,Bitmap,LargeBitmap,SmallIco,Ico,LargeIco等。不过由于获取到的Bitmap的背景色由之前的透明色变成了黑色,可以是因为api的原因,所以需要我们用MakeTransparent手动转为透明色。

获取到的电脑图标如下:

其中,KownFolders这个类功能很丰富,里面包含系统的一些特殊文件夹,如“我的文档”、“我的音乐”、“桌面”、“网络连接”等,可直接访问。比.Net Framework里的Environment.SpecialFolders更强大。

3.获取文件/文件夹的图标

获取文件夹信息时,可以调用ShellFolder.FromParsingName(string FolderPath),它返回一个ShellObject对象,通过此对象的Thumbnail属性可以得到图标,方法如第二步。

获取文件图标时,调用ShellFile.FromFilePath(string filePath),返回一个ShellFile对象,调用对象的Thumbnail属性可以获得图标。

4.获取文件/文件夹的属性信息

4.1获取指定的属性信息

ShellPropertyCollection props = new ShellPropertyCollection(path);
typeName = props.Where(prop => prop.CanonicalName == "System.IsFolder").First().FormatForDisplay(PropertyDescriptionFormatOptions.None);

以上,代码可以获得一个值用来判断给定的path是一个文件夹还是一个文件。

4.2获取文件/文件夹所有不为null的属性信息

ShellPropertyCollection cooll = new ShellPropertyCollection(@"c:");
var properties = cooll.Where(prop => prop.CanonicalName != null).OrderBy(prop=>prop.CanonicalName).ToArray();
Array.ForEach(
properties,
p =>
{
DisplayPropertyValue(p);
});

其中,DisplayPropertyValue()方法为:

 private static void DisplayPropertyValue(IShellProperty prop)
{
string value = string.Empty;
value = prop.ValueAsObject == null ? "" : prop.FormatForDisplay(
PropertyDescriptionFormatOptions.None);
Debug.WriteLine(prop.CanonicalName + "-------" + value);
}

如例子所示,C:这个文件夹的属性信息如图:


(文件夹的不同,可展示出来的属性信息数量也不同)

如果把C:改为一个文件的路径,如:C:\1.txt。它的属性信息为(没有完全截出来):

获取某个盘符的名称:

var item=ShellFileSystemFolder.FromFolderPath("c:\\");

            Console.WriteLine(string.Format("displayname is {0},name is {1}", item.GetDisplayName(DisplayNameType.Default), item.Name));

            Console.Read();

输出:displayname is Local Disk (C:),name is Local Disk (C:)

最后:送给大家项目的github地址:https://github.com/aybe/Windows-API-Code-Pack-1.1   

其中source/Samples里有各种各样的Demo,大家可以参考。

【C#】WindowsAPICodePack-Shell使用教程的更多相关文章

  1. Linux Shell系列教程之(十七) Shell文件包含

    本文是Linux Shell系列教程的第(十七)篇,更多Linux Shell教程请看:Linux Shell系列教程 通过文件包含,可以引用其他文件的内容,也可以将复杂内容分开,使程序结构更加清晰. ...

  2. Linux Shell系列教程之(十六) Shell输入输出重定向

    本文是Linux Shell系列教程的第(十六)篇,更多Linux Shell教程请看:Linux Shell系列教程 Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为 ...

  3. Linux Shell系列教程之(十五) Shell函数简介

    本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...

  4. Linux Shell系列教程之(十四) Shell Select教程

    本文是Linux Shell系列教程的第(十四)篇,更多Linux Shell教程请看:Linux Shell系列教程 在上一篇文章:Linux Shell系列教程之(十三)Shell分支语句case ...

  5. Linux Shell系列教程之(十三)Shell分支语句case … esac教程

    本文是Linux Shell系列教程的第(十三)篇,更多Linux Shell教程请看:Linux Shell系列教程 分支语句非常实用,基本上高级语言都支持分支语句(python 没有),大多数都使 ...

  6. Linux Shell系列教程之(十二)Shell until循环

    本文是Linux Shell系列教程的第(十二)篇,更多Linux Shell教程请看:Linux Shell系列教程 在上两篇文章Linux Shell系列教程之(十)Shell for循环和Lin ...

  7. Linux Shell脚本教程

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  8. 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程

    Linux Shell脚本教程:30分钟玩转Shell脚本编程 http://c.biancheng.net/cpp/shell/

  9. Shell 基础教程

    一个比较好的shell基础教程: http://www.runoob.com/linux/linux-shell.html

  10. (转)Linux Shell系列教程之(十四) Shell Select教程

    本文属于<Linux Shell 系列教程>文章系列,该系列共包括以下 18 部分: Linux Shell系列教程之(一)Shell简介 Linux Shell系列教程之(二)第一个Sh ...

随机推荐

  1. Deepin下python安装uwsgi报错: Python.h:没有那个文件或目录

    解决方法是安装python-dev,这是Python的头文件和静态库包 正在读取软件包列表... 完成正在分析软件包的依赖关系树       正在读取状态信息... 完成       下列软件包是自动 ...

  2. PDF编译出现错误解决的方法————————【Badboy】

    额 今天  在编译PDF时发现使用了一下STL中的z数值极限居然编译只是. return GetRangeConstraint(value <= std::numeric_limits::max ...

  3. lower_case_table_names(大小写敏感)

    1 简介    在MySQL中,数据库对应数据目录中的目录.数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎).因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小 ...

  4. 如何去掉windows2003的自动锁定(每离开一会都会出现这个界面,不想让它出现)

    http://zhidao.baidu.com/link?url=SOCv57C-hX_3f0Xl0J0RFIVXpowXk73zdQd2B-wMUzYOm5E_N397bw_UkX4uLPlAiWQ ...

  5. [CSS] Get up and running with CSS Grid Layout

    We’ll discuss the display values pertinent to CSS Grid Layout – grid, inline-grid, and subgrid. Then ...

  6. 2015年工作中遇到的问题:71-80,Tomcat-Redis-浮点数-HTTPS

    71.Tomcat访问项目带了"项目名称".最简单的办法,是把这个项目部署到"root"目录,据boss所说,阿里的每一个项目,都单独放到1个Tomcat的ro ...

  7. 手机端自适应布局demo

    原型如下: 要求如下:适应各种机型 源码如下: <!DOCTYPE html > <html>     <head>         <meta http-e ...

  8. NOIP模拟 - 莫队

    题目描述 给定一个元素个数为 n 的整数数组 a 和 Q 个问题,每个问题有 x,y 两个参数,请统计共有多少个整数 K 满足 K 在 a[x]-a[y] 中出现了恰好 K 次. 输入格式 第一行两个 ...

  9. Unity UGUI——Rect Transform包(Anchors)

    Anchors(锚)操作演示 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTXJfQUhhbw==/font/5a6L5L2T/fontsize/400/ ...

  10. ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.RuntimeException: java.lang.RuntimeException: java.sql.SQLException: The connection property 'zeroDateTimeBehavior' acceptable values are: 'CO

    使用sqoop导入数据时报了如题的异常,异常的提示是 The connection property 'zeroDateTimeBehavior' acceptable values are: 'CO ...