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