夜听女人这辈子挺难的:用.NET/C#进行Shell编程
来源:百度文库 编辑:偶看新闻 时间:2024/04/18 20:05:35
用.NET/C#进行Shell编程
2006年6月28日 1:48这些天我在家里用C#实现一个资源管理器控件,功能和Windows自己的那个类似,我想把它实现的和Windows的尽量接近 — 当然是越接近越好啦。
问题马上就来了,.NET目前似乎并不是很擅长搞这个,或者说那些相关的Windows API还没被收入进FCL(WinFX/.NET 3.0应该已经收录了吧),这下可麻烦了:
- 地址栏
MFC里面有个CComboBoxEx类,可以用来做带层次缩进和图标的ComboBox,实现资源管理器的地址栏。但是.NET没有,不过还好可以继承System.Windows.Forms.ComboBox类,然后重写OnDrawItem方法,搞定 - 文件图标
.NET 2.0终于开始支持这个功能了,就是Icon.ExtractAssociatedIcon方法,不过它返回的总是文件的大图标.... 而Windows XP里面一个文件可以包含大中小三种尺寸的图标(每种还有三等色深所以一共是九种),所以还是得调用SHGetFileInfo这个API;
还有些图标是在shell32.dll里头的(比如文件夹的图标),那样还得把它们枚举出来... 这个得用ExtractIconEx;
此外还要维护一个ImageList,不然占用太多Icon句柄,会发生GDI Failue的... 这个还好,FCL已经有这个类支持了 - 文件类型信息
每种文件类型都有一个Description,比如说.doc就是Microsoft Word Document,也记录在注册表里头。这个问题我在CSDN已经回答了N遍,不想再打一遍了 - 文件夹背景图
这个暂时还没功夫去研究,并且我认为这个功能相对不是那么的重要。还有文件夹缩略图之类的... 不是一般的麻烦,日后再说 - 左边的树形视图
.NET自带了TreeView控件,只要有Icon,剩下的工作就很容易了 - 右键菜单
菜单里有很多项目都是记录在注册表里面的。这个又是个很大的话题... 总而言之就是麻烦得要死。不过那些Cut、Copy、Delete、Properties什么的操作的实现倒是简单,可以直接用ShellExecuteEx这个API - 快捷方式
解析.lnk文件到目标文件,可以直接打开文件流读取里面的字符,在某个偏移量的某个位置是可以找到的,不过这样不“安全”,还是用API吧。MSDN说可以使用IShellLink和IPersistFile这两个COM接口,代码虽然很ugly但是不算很长。问题又来了,IShellLink没有继承IDispatch,只是继承了IUnknown,这意味着tlbimp.exe也帮不了忙(貌似),得自己声明那些接口和组件原型... 阿门,我今天搞了一晚上,还是不大对头,想睡觉了... - 主文件视图
这个可以用.NET自带的ListView控件应付,和Windows一样它也带了5种浏览模式(Title、List、Detail等等),不用自己实现 - 文件/文件夹的Tooltip
Tooltip的内容并不是固定的... 比如说doc文件的Tooltip还会包括Author等信息,mp3文件则会有Duration之类的,这个要用Structure Storage相关的COM组件,超级麻烦,暂时不想管了~ - .....
.....
不过今天也不是没有收获,在Google上找到了这么个网站:
http://www.vbaccelerator.com/home/NET/Code/Libraries/Shell_Projects/index.asp
# re: 用.NET/C#进行Shell编程
2006-6-28 8:33 by Kevin There are so many useful articles on Codeproject.com regarding Shell Programming, it‘s really simple to create a Explorer liked project using Windows Shell.http://www.codeproject.com/atl/shellfoldertree.asp
我学ASP.NET C#编程,请问用什么工具?
向 .net+c# 编程高手请教
向 .net+c# 编程高手请教
shell 编程
再次请教高手。.NET的C#编程问题
.NET的C#编程中的随机函数如何使用
用c#进行socket编程时出现了个奇怪的问题
vc.net如何进行可视化编程
C# 编程
关于shell编程
用java.net进行UDP编程服务器端和客户端的流程是怎样的?
用vb.net以编程方式对serversql2000数库进行增加
学C# .NET要用什么软件?
vb.net下进行WEB编程,如何连SQL2000数据库!
Linux下的Shell编程
再次请教高手。.NET的C#编程问题,我问了3次了
。NET C#的问题,请问怎么编程控制TEXTBOX究竟是显示明文还是显示密码
C# asp.net 断点续传
asp.net C#
asp.net c# 问题!
asp.net(C# )
.NET C#写数据库
C# net数字递增
.NET C# 代码解释