Как отключить сохранение состояния IFileDialog («Данные MRU») - PullRequest
0 голосов
/ 19 апреля 2020

Реализации IFileDialog (для диалогов «Открыть файл» и «Сохранить файл») сохраняют последние выбранные данные в реестре. Это приводит к открытию диалогового окна файла с последней предварительно выбранной папкой.

См. (слишком) короткий параграф по MSDN и этот ответ по WPF , который предположительно использует тот же базовая структура.

Теперь можно очистить данные с помощью IFileDialog::ClearClientData.

Но можно ли вообще отключить эту функцию ( из * 1018) * код моего приложения и для моего приложения), чтобы Windows даже не пытался сохранить или прочитать эти данные, и если да, то как?

ПРИМЕЧАНИЕ. ожидал, что один из FOS-флагов сделает это. Но ни FOS_DONTADDTORECENT, ни FOS_HIDEMRUPLACES не работают.

Код использования (для краткости проверка ошибок и очистка опущены):

HRESULT hr = 0;
IFileDialog *pfd = nullptr;
IShellItem *default_preselected_folder = nullptr;

hr = CoCreateInstance(CLSID_FileOpenDialog, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pfd));

//pfd->ClearClientData();
DWORD dwFlags = 0;
hr = pfd->GetOptions(&dwFlags);
hr = pfd->SetOptions(dwFlags | FOS_FORCEFILESYSTEM | FOS_DONTADDTORECENT | FOS_NOCHANGEDIR);

// To test whether it works -- should always open in this folder, even if you select a file in a different folder.
hr = SHCreateItemFromParsingName(L"C:\\Users", nullptr, IID_PPV_ARGS(&default_preselected_folder));
hr = pfd->SetDefaultFolder(default_preselected_folder);

hr = pfd->Show(NULL);
...