Мне нужно открыть окно проводника, показывающее конкретную папку, скажем "C:\\Windows"
Какую функцию я должен использовать для достижения своей цели? Я использую Windows, поэтому могу использовать API, также могу использовать boost, но я не могу использовать C++ 11.Как открыть папку с C++
ответ
Вы можете использовать функцию SHOpenFolderAndSelectItems
, чтобы сделать это, а не принудительно работает Проводник самостоятельно (что, если Например, пользователь заменил Explorer как своего файлового менеджера по умолчанию?).
LPCWSTR pszPathToOpen = L"C:\\Windows";
PIDLIST_ABSOLUTE pidl;
if (SUCCEEDED(SHParseDisplayName(pszPathToOpen, 0, &pidl, 0, 0)))
{
// we don't want to actually select anything in the folder, so we pass an empty
// PIDL in the array. if you want to select one or more items in the opened
// folder you'd need to build the PIDL array appropriately
ITEMIDLIST idNull = { 0 };
LPCITEMIDLIST pidlNull[1] = { &idNull };
SHOpenFolderAndSelectItems(pidl, 1, pidlNull, 0);
ILFree(pidl);
}
В качестве альтернативы, вы можете вызвать ShellExecute
папку непосредственно запускать его действие по умолчанию (которое обычно откроется в окне браузера):
ShellExecute(NULL, NULL, L"C:\\Windows", NULL, NULL, SW_SHOWNORMAL);
При использовании 'ShellExecute()' вы можете (и должны) установить глагол '' expl "" вместо полагаясь на действие по умолчанию: «* Обычно используются следующие глаголы: ... ** explum ** Исследует папку, указанную lpFile. *« –
@RemyLebeau Citation for «should»? –
Час назад я только что написал аналогичную функцию.
Эта функция не делает 100%, как вы хотите, но вы можете использовать ее, чтобы получить то, что хотите. Он открывает окно проводника и файл меток, на которые вы указываете. Допустим, вы указали "C:\Windows\System32"
, в этом случае у вас будет "C:\Windows"
и System32
. Если вы хотите зайти внутрь, вам нужно использовать что-то вроде FindFirstFile
. Если папка пуста, мое Предлагаемое решение не будет работать ...
bool ExplorerGoTo (const String &Path)
{
TCHAR tcBuff[8] = {0};
lstrcpyn(tcBuff, Path.c_str(), 5);
String stParams = _T("/n, /select, ");
if(lstrcmpi(_T("\\??\\"), tcBuff) == 0)
{
stParams += (Path[4]);
}
else
{
stParams += Path;
}
String stExplorer = _T("C:\\Windows\\explorer.exe");
//ExpandPath(stExplorer);
if (stExplorer.empty()) stExplorer = _T("explorer.exe");
SHELLEXECUTEINFO shi = { 0 };
shi.cbSize = sizeof (SHELLEXECUTEINFO);
shi.lpVerb = _T("open");
shi.lpFile = stExplorer.c_str();
shi.lpParameters = stParams.c_str();
shi.nShow = SW_SHOW;
bool bRes = ShellExecuteEx(&shi);
if(bRes == FALSE && GetLastError() != 0)
{
Sleep(200);
return ShellExecuteEx(&shi);
}
return bRes;
}
И никогда не использовать system()
Что именно вы имеете в виду «открыть папку» ? Вы пытаетесь перечислить файлы в папке? –
Я хочу что-то вроде 'system (" explorer.exe ")' –
О, так что используйте опцию '/ e,': 'explorer.exe/e,' и используйте' system' –