Delphi TOpenDialog / TSaveDialog最后使用的路径

时间:2017-06-29 10:23:17

标签: windows delphi winapi

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

Windows在哪里保存此信息?

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

我的实际兴趣是用于测试目的。我需要"重置"此信息是为了在类似于第一次运行的条件下测试我的应用程序。

2 个答案:

答案 0 :(得分:4)

Windows XP使用HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU,每个项目的格式似乎是ExeFilename + Path,两个字符串都以零终止并采用UTF-16LE格式。 MRU列表存储为名为MRUList的字符串。

WinXP regedit

较新版本的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。

答案 1 :(得分:2)

我终于找到了答案。

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

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

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

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