【问题标题】: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 上运行。

【问题讨论】:

    标签: c++ windows visual-studio-2008 mfc


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多