В моем приложении я могу программно открыть проводник и выбрать файл, используя следующий код:
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
.
Есть ли способ заставить исследователя обновить выбор или лучший способ выполнить это?
EDIT:
Поведение, упомянутое выше, было в Windows XP. Кажется, что поведение на Vista/Win7 отличается. Каждый вызов откроет новый экземпляр проводника и выберет файл.
Моя основная цель - реплицировать параметр Visual Studio на Открыть содержащую папку документа. Эта функция в Visual Studio ведет себя одинаково на XP, Vista и Win7. Он не будет создавать новый экземпляр, если другой экземпляр с той же папкой уже открыт, но он обновит выбор до нового файла.
Если кто-нибудь знает, как Visual Studio справится с этим, мне бы хотелось узнать об этом.