私のアプリケーションでは、プログラムでエクスプローラーを開き、次のコードを使用してファイルを選択できます。
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
選択されます。関数を で 2 回呼び出すとC:\path\to\file2.txt
、既存のエクスプローラ ウィンドウがアクティブになりますが、選択はまだ on のままfile1.txt
です。
エクスプローラーに選択を強制的に更新させる方法、またはこれを達成するためのより良い方法はありますか?
編集:
上記の動作は Windows XP でのものでした。Vista / Win7 での挙動が違うようです。呼び出しごとに、エクスプローラーの新しいインスタンスが開き、ファイルが選択されます。
私の主な目標は、ドキュメントのOpen Containing Folderに Visual Studio オプションをレプリケートすることです。Visual Studio のこの機能は、XP、Vista、および Win7 で同じように動作します。同じフォルダーを持つ別のインスタンスが既に開いている場合、新しいインスタンスは作成されませんが、選択内容が新しいファイルに更新されます。
Visual Studio がこれをどのように達成するかを知っている人がいれば、ぜひ知りたいです。