如何检测 Windows 资源管理器是不是显示给定文件夹?

Posted

技术标签:

【中文标题】如何检测 Windows 资源管理器是不是显示给定文件夹?【英文标题】:How do I detect if Windows Explorer is displaying a given folder?如何检测 Windows 资源管理器是否显示给定文件夹? 【发布时间】:2011-02-03 16:50:18 【问题描述】:

我的程序在可执行文件的目录中创建一个文件夹并保存一些输出文件。当应用程序完成时,我让它使用ShellExecute(NULL, _T("Open"), _T("Explorer"), _T(m_strOutputPath), NULL, SW_SHOWDEFAULT);在资源管理器窗口中自动打开文件夹

现在,如果我继续重新运行程序,即使它已经打开,它也会继续打开同一个文件夹。对于心不在焉的用户(我就是其中之一),这会导致同一文件夹的多个窗口。

有没有办法检测文件夹是否已在资源管理器窗口中打开,如果已打开则不使其打开新窗口?

我正在 Windows Vista 上使用 MSVS 2008 SP1 进行开发,但该程序将在 XP、Vista 和 7 上运行。

【问题讨论】:

【参考方案1】:

您可以使用SHOpenFolderAndSelectItems 函数。它将打开一个文件夹窗口并选择给定的文件。如果窗口已经打开,它将把它带到前面。

在内部,它使用IShellWindows 接口,特别是 FindWindowSW 方法。

【讨论】:

如何使用它来查找窗口的存在的步骤是什么? 您可能需要从单线程 COM 单元调用它。即:来自称为 OleInitialize、CoInitialize 或 AfxOleInit 的线程。 或者,您可以直接运行 explorer.exe,而不是使用 ShellExecute 并传递“打开”动词。有关命令行参数,请参阅 support.microsoft.com/kb/130510。 使用 COM 的东西对我来说太高级了,运行资源管理器仍然在单独的窗口中打开。【参考方案2】:

试试这个:

ShellExecute(NULL, _T("Open"), _T(m_strOutputPath), NULL, NULL, SW_SHOWDEFAULT);

【讨论】:

以上是关于如何检测 Windows 资源管理器是不是显示给定文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测pdf文档是不是有损坏

Windows Server:如何将给定用户限制为文件资源管理器“打开...”窗口的一个文件夹?

您如何检测文件何时被放入 Windows 资源管理器?

如何检测给定类大小的 UIView 是不是存在?

怎么看端口是不是打开

如何像 Windows 任务管理器中显示的那样获得可用的物理内存