.net windows api: получить или установить самый последний каталог, используемый диалогом открытия файла

Есть ли способ установить или получить начальный каталог, используемый в диалоговом окне открытия файла Vista, без установки свойства InitialDirectory в диалоговом окне открытия файла?

Я хочу, чтобы мой WPF (при запуске) устанавливал папку по умолчанию один раз для всех диалогов Open/Save. Если вы заметили в Vista, пока машина работает, она по умолчанию продолжает / отслеживает последний выбранный каталог пользователя из любого файла, который открывается / сохраняется как диалоги. Блокнот или любые программы действуют таким образом.

Причина, по которой я пытаюсь это сделать, заключается в том, что я не хочу отслеживать это в своем приложении, настраивая и сохраняя папку. Я просто хотел бы установить значение по умолчанию и позволить Vista отслеживать его после этого.

Directory.SetCurrentDirectory не делает этого.

2 ответа

Решение

Вы исключаете именно то, что вам нужно сделать, чтобы решить вашу проблему. Если вы не установили InitialDirectory, тогда диалог использует последний использованный каталог. Эта информация хранится в реестре, индексируется по имени процесса. Вы не можете выборочно отключить это поведение.

Используемый раздел реестра менялся в зависимости от версии Windows. Я думаю, что на Win7 это теперь HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRU. Это больше не в открытом тексте, как это было в более ранних версиях. Если вы хотите рискнуть проанализировать значения ключей, перечисленные там, убедитесь, что вы проверили версию Windows. Честно говоря, это не стоит простого кода, который вам придется написать для инициализации свойства InitialDirectory.

Если вы не хотите писать код для загрузки и сохранения каталога для OpenFileDialog, напишите функцию-оболочку, которая делает это, а затем просто вызовите функцию-оболочку...

Другие вопросы по тегам