频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

Windows Shell 开发:从“桌面”开始展开

来源: 作者:柠檬的 出处:巧巧读书 2008-01-23 进入讨论组
下一页 1 2 
接上一篇:(C#)Windows Shell 编程系列1 - 基础,浏览一个文件夹

让我们详细解释一下 Shell 编程中最基本的一些函数、结构体和枚举。

SHGetDesktopFolder
获取桌面的 IShellFolder 接口

Windows Shell 开发:从“桌面”开始展开(图一)
[DllImport("shell32.dll")]
Windows Shell 开发:从“桌面”开始展开(图一)         public static extern Int32 SHGetDesktopFolder(out IntPtr ppshf);

要使用这个函数,必须先定义一个 IntPtr 指针。然后通过指针,使用 GetObjectForIUnknown 返回通过指向 COM 对象的 IShellFolder 接口的指针实例。于是需要编写以下函数:

Windows Shell 开发:从“桌面”开始展开(图一) public static IShellFolder GetDesktopFolder(out IntPtr ppshf)
Windows Shell 开发:从“桌面”开始展开(图二) Windows Shell 开发:从“桌面”开始展开(图三)          Windows Shell 开发:从“桌面”开始展开(图四) {
Windows Shell 开发:从“桌面”开始展开(图五)             SHGetDesktopFolder(out ppshf);
Windows Shell 开发:从“桌面”开始展开(图五)             Object obj = Marshal.GetObjectForIUnknown(ppshf);
Windows Shell 开发:从“桌面”开始展开(图五)             return (IShellFolder)obj;
Windows Shell 开发:从“桌面”开始展开(图六)         }

ParseDisplayName
获得对象的PIDL,即便对象在目录树中处于当前目录下一层或更多层。例如,对于文件对象来说,它的解析名就是它的路径,我们用文件系统对象的完全路径名来调用桌面的IshellFolder接口的 ParseDisplayName 方法,它会返回这个对象的完全PIDL。定义:
Windows Shell 开发:从“桌面”开始展开(图一) void ParseDisplayName(
Windows Shell 开发:从“桌面”开始展开(图一)             IntPtr hwnd,
Windows Shell 开发:从“桌面”开始展开(图一)             IntPtr pbc,
Windows Shell 开发:从“桌面”开始展开(图一)             [MarshalAs(UnmanagedType.LPWStr)] string pszDisplayName,
Windows Shell 开发:从“桌面”开始展开(图一)             out uint pchEaten,
Windows Shell 开发:从“桌面”开始展开(图一)             out IntPtr ppidl,
Windows Shell 开发:从“桌面”开始展开(图一)             ref uint pdwAttributes);

里面最重要的参数就是 out IntPtr ppidl 了,它返回 pszDisplayName 指定路径对应的 PIDL。然而仅仅是 PIDL 并不能让你做更多的事情。这时候还需要调用 BindToObject 来返回 IShellFolder 接口。

BindToObject
根据 PIDL 创建和初始化 IShellFolder 对象。定义:

Windows Shell 开发:从“桌面”开始展开(图一) void BindToObject(
Windows Shell 开发:从“桌面”开始展开(图一)             IntPtr pidl,
Windows Shell 开发:从“桌面”开始展开(图一)             IntPtr pbc,
Windows Shell 开发:从“桌面”开始展开(图一)             [In()] ref Guid riid,
Windows Shell 开发:从“桌面”开始展开(图一)             out IShellFolder ppv);

里面有一个 [In()] ref Guid riid 参数,表示接口的接口标识符 (IID)。GUID其实就是一个唯一的标识符。世界上的任何两台计算机都不会生成重复的 GUID 值。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。我们这里使用 IID_IShellFolder 表示它获取的是一个 IShellFolder 接口。

Windows Shell 开发:从“桌面”开始展开(图一) public static Guid IID_IShellFolder = new Guid("{000214E6-0000-0000-C000-000000000046}");

另外介绍 IEnumIDList 接口。IEnumIDList 接口使资源管理器获得文件夹包含的全部对象的PIDL,PIDL然后可以用来获得这些对象的信息。通告:http://www.qqread.com/csharp/j394035.html 更多文章 更多内容请看Windows操作系统安装Windows权限设置Windows操作系统安全集专题,或进入讨论组讨论。
下一页 1 2 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章