探险家的"virtual filesystem"有没有publicAPI?
Does Explorer's "virtual filesystem" have public API?
Windows Explorer 显示一个虚拟 "filesystem",其根目录是 Desktop 文件夹,包含回收站和 This/My 计算机,后者又包含已安装的文件系统、库、UPnP/MTP/PTP 设备和网络快捷方式。
鉴于在内置 open/save/directory 选择器对话框中可以观察到相同的布局,可以假设有一个(内部的?)API 暴露了这个 "VFS"。
是这样吗?如果是,是这样 API public 并且可以在我自己的应用程序中使用吗?
Given that the same layout can be observed in the builtin open/save/directory picker dialogs, one can assume that there's an (internal?) API exposing this "VFS".
实际上,选择器会显示一个嵌入其 UI 中的真实资源管理器 window,并让资源管理器处理文件系统。
但是,正如@JonathanPotter 提到的那样,有一个 public API - Shell Namespace。这与 Explorer 本身用于几乎所有操作的 API 相同。
文件夹和文件表示为 ITEMIDLIST identifers, and can be accessed using the IShellFolder
and IShellItem
个界面(以及其他)。
从SHGetDesktopFolder()
to get the IShellFolder
interface for the root Desktop folder, and then you can drill down through its hierarchy as needed, using IShellFolder::EnumObjects()
to enumerate child folders/files, IShellFolde::BindToObject()
to get IShellFolder
interfaces for subfolders, IShellFolder::GetDisplayNameOf()
开始获取folder/file个名字等
通过 Shell 界面,您可以 access/do 做很多事情,这甚至还没有触及可用的所有内容的表面。
Windows Explorer 显示一个虚拟 "filesystem",其根目录是 Desktop 文件夹,包含回收站和 This/My 计算机,后者又包含已安装的文件系统、库、UPnP/MTP/PTP 设备和网络快捷方式。
鉴于在内置 open/save/directory 选择器对话框中可以观察到相同的布局,可以假设有一个(内部的?)API 暴露了这个 "VFS"。
是这样吗?如果是,是这样 API public 并且可以在我自己的应用程序中使用吗?
Given that the same layout can be observed in the builtin open/save/directory picker dialogs, one can assume that there's an (internal?) API exposing this "VFS".
实际上,选择器会显示一个嵌入其 UI 中的真实资源管理器 window,并让资源管理器处理文件系统。
但是,正如@JonathanPotter 提到的那样,有一个 public API - Shell Namespace。这与 Explorer 本身用于几乎所有操作的 API 相同。
文件夹和文件表示为 ITEMIDLIST identifers, and can be accessed using the IShellFolder
and IShellItem
个界面(以及其他)。
从SHGetDesktopFolder()
to get the IShellFolder
interface for the root Desktop folder, and then you can drill down through its hierarchy as needed, using IShellFolder::EnumObjects()
to enumerate child folders/files, IShellFolde::BindToObject()
to get IShellFolder
interfaces for subfolders, IShellFolder::GetDisplayNameOf()
开始获取folder/file个名字等
通过 Shell 界面,您可以 access/do 做很多事情,这甚至还没有触及可用的所有内容的表面。