Вопрос по openfiledialog, working-directory – Как WPF OpenFileDialog отслеживает каталог последнего открытого файла?

2

Как мы знаем WPFOpenFileDialog больше не меняет рабочий каталог приложения иRestoreDirectory свойство "не реализовано". Однако при последующем открытии его исходный каталог по умолчанию является последним открытым файлом, а не исходным рабочим каталогом, поэтому эта информация должна храниться где-то. Интересно, возможно ли получить / установить его из кода пользователя?

Ваш Ответ

1   ответ
5

ключу:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Comdlg32\OpenSaveMRU

Под этим ключом находятся подразделы для различных расширений файлов (например,exe, docx, py, так далее)

Теперь, если вы хотите прочитать эти значения, вы получите список всех путей, хранящихся под подразделами (адаптировано изВо):

String mru = @"Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU";
RegistryKey rk = Registry.CurrentUser.OpenSubKey(mru);
List<string> filePaths = new List<string>();

foreach (string skName in rk.GetSubKeyNames())
{
    RegistryKey sk = rk.OpenSubKey(skName);
    object value = sk.GetValue("0");
    if (value == null)
        throw new NullReferenceException();

    byte[] data = (byte[])(value);

    IntPtr p = Marshal.AllocHGlobal(data.Length);
    Marshal.Copy(data, 0, p, data.Length);

    // get number of data;
    UInt32 cidl = (UInt32)Marshal.ReadInt16(p);

    // get parent folder
    UIntPtr parentpidl = (UIntPtr)((UInt32)p);

    StringBuilder path = new StringBuilder(256);

    SHGetPathFromIDListW(parentpidl, path);

    Marshal.Release(p);

    filePaths.Add(path.ToString());
}

Ссылки

http: //social.msdn.microsoft.com/Forums/zh/vcmfcatl/thread/bfd89fd3-8dc7-4661-9878-1d8a1bf6269 Получение последнего открытого файла в диалоговом окне открытия файлаhttp: //social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/c43ddefb-1274-4ceb-9cda-c78d860b687)
Благодарность. Это работает на Win8? NS.X.
@ NS.X. На данном этапе у меня нет доступа к машине с Windows 8, поэтому я не уверен. Похоже, что этот ключ существовал, начиная с XP / 2K, но он наверняка стоил бы проверить его при установке Win 8. nick_w

Похожие вопросы