【C#】WindowsAPICodePack-Shell使用教程
原文:【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使用教程的更多相关文章
- Linux Shell系列教程之(十七) Shell文件包含
本文是Linux Shell系列教程的第(十七)篇,更多Linux Shell教程请看:Linux Shell系列教程 通过文件包含,可以引用其他文件的内容,也可以将复杂内容分开,使程序结构更加清晰. ...
- Linux Shell系列教程之(十六) Shell输入输出重定向
本文是Linux Shell系列教程的第(十六)篇,更多Linux Shell教程请看:Linux Shell系列教程 Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为 ...
- Linux Shell系列教程之(十五) Shell函数简介
本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...
- Linux Shell系列教程之(十四) Shell Select教程
本文是Linux Shell系列教程的第(十四)篇,更多Linux Shell教程请看:Linux Shell系列教程 在上一篇文章:Linux Shell系列教程之(十三)Shell分支语句case ...
- Linux Shell系列教程之(十三)Shell分支语句case … esac教程
本文是Linux Shell系列教程的第(十三)篇,更多Linux Shell教程请看:Linux Shell系列教程 分支语句非常实用,基本上高级语言都支持分支语句(python 没有),大多数都使 ...
- Linux Shell系列教程之(十二)Shell until循环
本文是Linux Shell系列教程的第(十二)篇,更多Linux Shell教程请看:Linux Shell系列教程 在上两篇文章Linux Shell系列教程之(十)Shell for循环和Lin ...
- Linux Shell脚本教程
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程
Linux Shell脚本教程:30分钟玩转Shell脚本编程 http://c.biancheng.net/cpp/shell/
- Shell 基础教程
一个比较好的shell基础教程: http://www.runoob.com/linux/linux-shell.html
- (转)Linux Shell系列教程之(十四) Shell Select教程
本文属于<Linux Shell 系列教程>文章系列,该系列共包括以下 18 部分: Linux Shell系列教程之(一)Shell简介 Linux Shell系列教程之(二)第一个Sh ...
随机推荐
- VBA Code for Word Navigation Pane 【failed】 view-showheading-method-word
https://msdn.microsoft.com/VBA/Word-VBA/articles/view-showheading-method-word View.ShowHeading Metho ...
- ant脚本中设置环境变量
http://blog.csdn.net/quqi99/article/details/5329841
- html常用样式margin、border怎么使用
html常用样式margin.border怎么使用 一.总结 一句话总结:1.margin:auto配合width才能居中:2.border的三个属性依次是边框宽度,边框样式,边框颜色 1.html中 ...
- Oracle中的sid与servicename
在平时自己创建库的时候,习惯的将sid与servicename取同名,但是在实际生产中这两个名字很有可能不一致,再使用jdbc连接数据库的url时就需要注意区分了,否则创建不了数据库连接 //serv ...
- 【网络】无法解析服务器的DNS地址?;能登陆QQ,无法打开网页
1. 无法解析服务器的DNS地址 手动设置 DNS(域名解析服务器) 8.8.8.8 114.114.114.114 清除浏览器缓存: 重启主机: 无法解析服务器的DNS地址?DNS解析错误怎么办? ...
- NOIP模拟 Work - 二分 + 树状数组 / ???
题目分析 如果没有最后的注意事项,此题就是二分裸题.有了注意事项,会有两种思路: 在线:二分天数t,并在主席树上求1~t天中大于d(浪费的时间)的时间之和以及数量,答案即为:sum - d * cnt ...
- ART、JIT、AOT、Dalvik之间有什么关系?
JIT与Dalvik JIT是"Just In Time Compiler"的缩写,就是"即时编译技术",与Dalvik虚拟机相关. 怎么理解这句话呢?这要从A ...
- Word 2010/2013 菜单栏添加 MathType 菜单
一般对于 office 的高级版本,比如 word 2010/2013,在手动安装 mathtype 之后,并不会再 word 的菜单栏,创建 mathtype 按钮,此时需要按照如下步骤,手动导入 ...
- 利用WPF建立自己的3d gis软件(非axhost方式)(十三)万能的用户层接口,(强大的WPF)
原文:利用WPF建立自己的3d gis软件(非axhost方式)(十三)万能的用户层接口,(强大的WPF) 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt ...
- 关于MOVE 和 CopyMemory 的用法区别
最近做了一个数据采集服务器, 根据程序的框架,使用了大量的指针结构体(内存块) 操作. 例子: PArrayByte = ^TArrayByte; TArrayByte = packed recor ...