В моем приложении я могу программно открыть проводник и выбрать файл, используя следующий код:
void BrowseToFile(LPCTSTR filename)
{
CString strArgs;
strArgs = _T("/select,\"");
strArgs += filename;
strArgs += _T("\"");
ShellExecute(0, _T("open"), _T("explorer.exe"), strArgs, 0, SW_NORMAL);
}
Моя проблема в том, что если я вызываю эту функцию второй раз с другим файлом, но в той же папке, выбор в проводнике не изменяется на новый файл, но остается в предыдущем файле.
Например, если я вызову свою функцию с помощью C:\path\to\file1.txt
, откроется новое окно проводника и будет выбрано file1.txt
. Если я вызову свою функцию второй раз с C:\path\to\file2.txt
, будет активировано существующее окно проводника, но выбор все равно будет на file1.txt
.
Есть ли способ заставить проводник обновить выделение или лучший способ сделать это?
РЕДАКТИРОВАТЬ:
Поведение, упомянутое выше, было в Windows XP. Кажется, поведение на Vista / Win7 отличается. Каждый вызов открывает новый экземпляр проводника и выбирает файл.
Моя главная цель - скопировать опцию Visual Studio в Открыть содержащую папку документа. Эта функция в Visual Studio работает одинаково на XP, Vista и Win7. Он не создаст новый экземпляр, если другой экземпляр с той же папкой уже открыт, но обновит выбор до нового файла.
Если кто-нибудь знает, как Visual Studio выполняет это, я хотел бы знать об этом.