Программно выбирающий файл в проводнике

В моем приложении я могу программно открыть проводник и выбрать файл с помощью следующего кода:

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 Открыть Containing Folder документа. Эта функция в Visual Studio ведет себя то же на XP, Vista и Win7. Это не создаст новый экземпляр, если другой экземпляр с той же папкой будет уже открыт, но это обновит выбор в новый файл.

Если кто-либо знает, как Visual Studio выполняет это, я хотел бы знать об этом.

17
задан flashk 9 June 2010 в 22:31
поделиться

2 ответа

Нашел ответ на мой вопрос. Мне нужно использовать функцию оболочки SHOpenFolderAndSelectItems. Вот код для функции, если кто-то когда-либо заинтересован:

void BrowseToFile(LPCTSTR filename)
{
    ITEMIDLIST *pidl = ILCreateFromPath(filename);
    if(pidl) {
        SHOpenFolderAndSelectItems(pidl,0,0,0);
        ILFree(pidl);
    }
}
28
ответ дан 30 November 2019 в 12:35
поделиться

В том случае, если вы обрисовали его в общих чертах, окно файла выбирает файл только при его инициализации, а не при активации.

Хотя это похоже на кладж, вы можете обнаружить XP и только для этой ОС закрыть диалоговое окно, используя его дескриптор, и открыть новый, чтобы настроить таргетинг на другой файл.

0
ответ дан 30 November 2019 в 12:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: