2

私たちが知っているように、WPFOpenFileDialogはアプリの作業ディレクトリを変更しなくなり、RestoreDirectoryプロパティは「実装されていません」。ただし、その後開くと、初期ディレクトリは元の作業ディレクトリではなく、最後に開いたファイルにデフォルト設定されるため、この情報はどこかに保存する必要があります。ユーザーコードから取得/設定することは可能ですか?

4

1 に答える 1

5

Windows 7 では、最近のファイル情報はレジストリの次のキーに保存されます。

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());
}

参考文献:

于 2013-02-01T07:23:16.653 に答える