У меня есть приложение для Windows, написанное на C ++.
Приложение генерирует определенные файлы конфигурации в скрытом каталоге.
Я хочу дать пользователю возможность открыть этот каталог из моего приложения.
Нажатие на эту опцию должно открыть диалоговое окно, подобное проводнику Windows, с указанием местоположения входного каталога.
Я трачу время на поиск похожих API, но в итоге получаю определенные диалоги, такие как «DlgDirListComboBoxW» или «GetOpenFileName» или «GetSaveFileName».
Я ищу API для открытия обычного проводника Windows, такого как Dialog, с указанием местоположения входного каталога.
Было бы очень полезно, если бы API входил в раздел CommonDialogs.
Как насчет:
HWND hWndOwner = NULL;
ShellExecute(
hWndOwner,
_T("explore"),
_T("c:\\some\\path"),
NULL,
NULL,
SW_SHOWNORMAL);
Вы можете установить hWndOwner
на ваш дескриптор главного окна, если вы так склонны и можете выбирать из множества других вариантов.
Для получения дополнительной информации и сведений об использовании посетите страницу MSDN на ShellExecute
.
Вы можете использовать SHBrowseForFolder
Это показывает диалог, подобный этому:
Это пример того, как его использовать:
BOOL GetFolder(LPCSTR folderpath,
LPCSTR szCaption,
HWND hOwner /*= NULL*/)
{
BOOL retVal = FALSE;
// The BROWSEINFO struct tells the shell
// how it should display the dialog.
BROWSEINFO bi;
memset(&bi, 0, sizeof(bi));
bi.ulFlags = BIF_USENEWUI;
bi.hwndOwner = hOwner;
bi.lpszTitle = szCaption;
// must call this if using BIF_USENEWUI
::OleInitialize(NULL);
// Show the dialog and get the itemIDList for the
// selected folder.
LPITEMIDLIST pIDL = ::SHBrowseForFolder(&bi);
if(pIDL != NULL)
{
// Create a buffer to store the path, then
// get the path.
char buffer[_MAX_PATH] = {'\0'};
if(::SHGetPathFromIDList(pIDL, buffer) != 0)
{
// Set the string value.
folderpath = buffer;
retVal = TRUE;
}
// free the item id list
CoTaskMemFree(pIDL);
}
::OleUninitialize();
return retVal;
}