【问题标题】:Delphi TOpenDialog/TSaveDialog last used pathDelphi TOpenDialog/TSaveDialog 上次使用的路径
【发布时间】:2017-06-29 10:23:17
【问题描述】:

将我的问题引用到这个答案:https://stackoverflow.com/a/4016075/698266,特别是第 3 步说“否则,如果应用程序过去使用过打开或另存为对话框,则选择最近使用的路径作为初始目录。 "

Windows 将这些信息保存在哪里?

注意:通过实验,它似乎链接到应用程序文件名没有路径 - 即在不同目录中复制的相同可执行文件“看到”相同的最后路径信息,同时更改 exe文件名使对话框指向用户的文档目录。

我的实际兴趣是用于测试目的。我需要“重置”这些信息,以便在类似于第一次运行的条件下测试我的应用程序。

【问题讨论】:

  • 保存此信息的位置未记录,它可能会因版本而异。我想您真正感兴趣的是识别您的应用程序的规则。正确的?这根本不是德尔福问题。它是纯 Win32。
  • 是的,我知道它不是严格意义上的 Delphi,但我正在使用 Delphi 及其 TOpen/SaveDialog,在这种环境中工作时我可以看到这种行为。不,我对识别我的应用程序的规则不感兴趣。我将编辑问题以说明我的意图。
  • 另外,位置是否因版本而异,对我来说并不重要,在这种情况下我会适应新的地方。我只是想“手动”重置这个位置。
  • 只需在运行应用程序更改目录之前和之后导出 HKCU。然后比较。
  • 更直接的解决方案是使用SysInternals Process Monitor 并在您的EXE 上过滤它。然后它将向您显示 EXE 实时访问的确切注册表项和值。

标签: windows delphi winapi


【解决方案1】:

Windows XP 使用HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU,每个项目的格式似乎是 ExeFilename+Path,字符串以零结尾和 UTF-16LE 格式。 MRU 列表存储为名为@9​​87654326@ 的字符串。

较新版本的 Windows 使用 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRUHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRULegacy,格式似乎是 ExeFilename+ItemIdList(UTF-16LE 中的 ExeFilename 并以零结尾)。 MRU 列表似乎是一个名为 MRUListEx 的二进制值中的 DWORD 列表,并且该列表以 0xffffffff 终止。

我会假设更改发生在 Vista 中,因为那是添加新的 IFileDialog 的时候。当使用自定义模板和/或挂钩函数调用 GetOpen/SaveFileName 时,可能会使用 LastVisitedPidlMRULegacy。

【讨论】:

  • 完整答案!谢谢!
【解决方案2】:

我终于自己找到了答案。

对于 Windows 10(这在不同版本的 Windows 中可能有所不同,正如 David 指出的那样)注册表中有一个值列表,用于跟踪可执行文件名称及其关联的最后“访问”路径。

该列表可以在这个键中找到:

HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRU

为了重置特定程序的默认打开/保存路径,您必须找到其数据字符串 (UNICODE) 以您的可执行文件名称开头的值并将其删除。如果您查看数据字符串,您会注意到最后使用的路径在可执行文件名称之后。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多