如何读/写Windows 7库位置?

时间:2012-09-18 21:34:53

标签: windows delphi registry

简介

在Windows 7中,您有一些名为库的文档,图片和音乐等特殊文件夹。

如果您不了解它们,基本上每个Library文件夹都可以包含位置(路径),这些基本上是每个库的快捷方式。

一些例子:

Documents (Library)

  • E:\ Personal \ Documents (Location)
  • F:\ Backups \ Documents (Location)

Music (Library)

  • E:\ Media \ Music \ Albums (Location)
  • E:\ Media \ Music \ Singles (Location)

Pictures (Library)

  • E:\ Media \ Photos (Location)

当您从Windows资源管理器或“开始”菜单中单击任何这些库文件夹时,Windows资源管理器将显示该库中定义的位置。

任务

我需要做的是阅读每种库类型的位置,并能够使用我自己的位置回写(更新)库。我发现库存储在用户AppData文件夹中,如下所示:

C:\Users\SOMEUSER\AppData\Roaming\Microsoft\Windows\Libraries

这些库是此文件类型:库(.library-ms) - 如果右键单击一个并选择属性,“库”选项卡可以看到与该库关联的库位置。

我没有看到提取这些并将它们放入TStringList以便在Delphi中进行编辑的方法。我想知道这些库位置是否实际存储在Windows注册表中,所以通过Google的一些研究我找到了这些路径:

  • HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folders
  • HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ User Shell Folders

但同样,我没有看到库位置的实际列表。

那么,如何在Delphi中读取库文件中的Locations列表,将它们添加到Listbox或TStringList,编辑条目然后写回更改?能够提取库位置路径将是一个开始。

我只是觉得这将成为一个我无法找到的简单答案的问题之一!

1 个答案:

答案 0 :(得分:1)

我刚刚在Marco Cantu的源代码存储库中找到了他的Mastering Delphi书籍,这是Delphi 2010的一个例子,它展示了一种在库中获取位置的方法。

存储库的链接位于:http://code.marcocantu.com/p/marcodelphibooks/source/tree/HEAD/

delphi2010handbook中,chapter 05 (Win7Libraries)是示例来源。

该演示中使用的方法基本上是使用已经提到的Windows API,该演示确认了库文件确实是XML格式。


此外,我发现以下信息非常有用:

  • SHAddFolderPathToLibrary - 将文件夹添加到库中。
  • SHCreateLibrary IShellLibrary - 创建对象。
  • SHLoadLibraryFromItem - 从指定的库定义文件创建IShellLibrary并将其加载到对象。
  • SHLoadLibraryFromKnownFolder - 为指定的KNOWNFOLDERID创建和加载IShellLibrary对象。
  • SHLoadLibraryFromParsingName - 为指定路径创建和加载IShellLibrary对象。
  • SHRemoveFolderPathFromLibrary - 从库中删除文件夹。
  • SHResolveFolderPathInLibrary - 尝试解析已移动或重命名的库文件夹的目标位置。
  • SHResolveLibrary - 尝试查找图书馆的位置。
  • SHSaveLibraryInFolderPath - 将IShellLibrary对象保存到磁盘。
  • SHShowManageLibraryUI - 显示库管理对话框,使用户可以管理库文件夹和默认保存位置。