技术开发 频道

Windows Shell开发:浏览一个文件夹

[IT168 技术文档]Windows Shell 编程,即 Windows 外壳编程。我们所看到的资源管理器以及整个桌面,都是一个 Shell。

关于 Windows 外壳的基本概念,我这里不做详细介绍,不了解的朋友,可以看看 姜伟华 的 Windows外壳名字空间的浏览

好,现在让我们从基础学起,早日做出一个强大的资源管理器软件。(偶也是初学者,多多指教)

1 - 基础,浏览一个文件夹

我们知道,在win32中是以外壳名字空间的形式来组织文件系统的,在外壳名字空间里的每一个对象(注)都实现了一个IShellFolder的接口,通过这个接口我们可以直接查询或间接得到其他相关的接口。
(注:这里的对象指的是外壳名字空间中的一个节点,对象有可能是一个文件夹,有可能是一个文件,也有可能是一个虚拟文件夹,例如:我的电脑,网上邻居,控制面板等)

在C#中,我们这样定义 IShellFolder 接口:

IShellFolder.cs

当然,这个接口还没有列出细节函数。我们要做的仅仅是从最基础开始。

首先我们必须了解,在外壳编程中,要使用 PIDL 路径代替普通路径(如果对 PIDL 不熟悉,请看Windows外壳名字空间的浏览)。

“桌面”是最优异的文件夹,外壳名字空间中其他各项都可以用从“桌面”开始的 PIDL 加以表示。

如何获取“桌面”的 PIDL 和其 IShellFolder 接口呢,可以通过 API SHGetDesktopFolder:

[DllImport("shell32.dll")]
        
public static extern Int32 SHGetDesktopFolder(out IntPtr ppshf);

/// <summary>
        
/// 获得桌面 Shell
        
/// </summary>

        public static IShellFolder GetDesktopFolder(out IntPtr ppshf)
        
{
            SHGetDesktopFolder(
out ppshf);
            Object obj 
= Marshal.GetObjectForIUnknown(ppshf);
            
return (IShellFolder)obj;
        }

//获得桌面 PIDL
            IntPtr desktopPtr;
            IShellFolder desktop 
= API.GetDesktopFolder(out desktopPtr);

当然,这个接口还没有列出细节函数。我们要做的仅仅是从最基础开始。首先我们必须了解,在外壳编程中,要使用 PIDL 路径代替普通路径(如果对 PIDL 不熟悉,请看)。“桌面”是最优异的文件夹,外壳名字空间中其他各项都可以用从“桌面”开始的 PIDL

 

当然,这个接口还没有列出细节函数。我们要做的仅仅是从最基础开始。首先我们必须了解,在外壳编程中,要使用 PIDL 路径代替普通路径(如果对 PIDL 不熟悉,请看)。“桌面”是最优异的文件夹,外壳名字空间中其他各项都可以用从“桌面”开始的 PIDL
0
相关文章