【发布时间】:2010-06-09 22:00:17
【问题描述】:
在我的应用程序中,我可以使用以下代码以编程方式打开资源管理器并选择一个文件:
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 如何做到这一点,我很想知道。
【问题讨论】:
-
我在 Windows 7 x64 上没有看到这种行为。两个窗口正确打开,每个窗口都选择了正确的文件。
-
你是对的,Vista 和 Win 7 上的行为是不同的。我已经更新了我的问题以提及这一点。
标签: c++ windows explorer shellexecute