如何检测 Windows 资源管理器是否正在显示给定文件夹?
我的程序在可执行文件的目录中创建一个文件夹并保存一些输出文件。当应用程序完成时,我让它使用 ShellExecute(NULL, _T("Open"), _T("Explorer"), _T(m_strOutputPath), NULL, SW_SHOWDEFAULT); 自动在资源管理器窗口中打开文件夹。 code>
现在,如果我继续重新运行该程序,即使它已经打开,它也会继续打开同一个文件夹。对于心不在焉的用户(我就是其中之一),这会导致同一文件夹出现多个窗口。
有没有办法检测文件夹是否已在资源管理器窗口中打开,并且如果已打开则不使其打开新窗口?
我正在 Windows Vista 上的 MSVS 2008 SP1 中进行开发,但该程序将在 XP、Vista 和 7 上运行。
My program creates a folder in the executable's directory and saves some output files. When the application finishes, I have it automatically open the folder in an explorer window using ShellExecute(NULL, _T("Open"), _T("Explorer"), _T(m_strOutputPath), NULL, SW_SHOWDEFAULT);
Now, if I keep re-running the program, it will just keep opening the same folder even if it is already opened. For the absent-minded user (with me being one of them), this results in multiple windows of the same folder.
Is there a way to detect if the folder is already opened in an explorer window and not make it open a new window if it is already opened?
I'm developing in MSVS 2008 SP1 on Windows Vista, but the program will run on XP, Vista, and 7.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 SHOpenFolderAndSelectItems 函数。它将打开一个文件夹窗口并选择给定的文件。如果窗口已经打开,它将把它带到前面。
在内部,它使用 IShellWindows 界面,特别是 FindWindowSW 方法。
You can use the SHOpenFolderAndSelectItems function. It will open a folder window and select the files given. If the window is already open, it'll bring it to the front.
Internally, it uses the IShellWindows interface, specifically the FindWindowSW method.
试试这个:
Try this: