【问题标题】:Matlab : open OS explorer window only if not already openMatlab:仅在尚未打开的情况下打开操作系统资源管理器窗口
【发布时间】:2014-07-16 02:42:41
【问题描述】:

我在 Windows 资源管理器中从 matlab 中打开一个文件夹,其中包含以下行:

system('explorer.exe /select,./my_folder/my_file.tif');

它运行良好,即使 Matlab“当前文件夹”的相对路径带有“./”。请注意,它还选择了指定的文件,这正是我想要的。

但是,我只想在同一路径尚未打开的情况下打开此窗口。现在,我得到了同一个窗口的多个副本,这很烦人。你知道有什么办法吗?

谢谢,

吉斯兰

(Windows 8,Matlab R2011b 64 位)

【问题讨论】:

  • 嗯...这很难。我尝试使用'system(start c:\folder'),因为在CMD 提示符下执行start 只会打开一个窗口。但没有运气。它可能通过调用一些 DDE 魔法来工作,但几乎不可能找到有关它的信息,因为“DDE 已经过时了十多年”。但在内部,windows 到处都在使用它——例如,在执行start...

标签: matlab explorer


【解决方案1】:

免责声明

这是部分答案。我不知道如何从这里继续,但无论如何它可能会有所帮助。你的问题对我来说很有趣,如果在接口(Matlab/Explorer)之间进行更改更容易,它会使数据分析更容易!

一些历史

DDE 是一项古老的技术(16 位 Windows,是的!),它使 Windows 应用程序能够相互通信。 DDE 在 Windows XP 上已被弃用,但它只是拒绝消亡。

DDE 长寿的一个原因是 Windows 资源管理器仍然大量使用 DDE。例如,当您双击一个文件时,资源管理器会向 Excel 发送一个 DDE 命令,告诉它在当前 Excel 窗口中打开该文件。

DDE 如何帮助您

Matlab 的 DDE 支持已正式弃用。如果不是因为 Explorer 通过 DDE 消息与 Matlab 对话,它可能会完全消失!

您可以通过向应用程序“文件夹”告知有关主题“appproperties”的启动 DDE 通道来逆转此过程:

channel = ddeinit('folders', 'appproperties')

“文件夹”应用程序似乎是“progman”的同义词,它是优秀的 Windows 3 程序管理器。您可以告诉资源管理器(“文件夹”)通过执行来查看文件夹

ddeexec(channel, '[ViewFolder("%l", c:\windows, 5)]')

如果资源管理器已经指向该文件夹,则不会打开新窗口。不幸的是,我无法告诉您有关该命令的更多信息。我不知道 %l 在那里做什么,或者 5 就是这样。我唯一知道的是 ViewFolder 可以替换为 ExploreFolder,在这种情况下,您总是会打开一个新窗口,并且该窗口总是在左侧窗格中显示文件夹树结构。

更多信息

与 DDE 相关的最重要的函数是 ddeinit、ddeexec 和 ddeterm。他们的文档隐藏在这些函数的 .m 文件中。您只需执行即可查看.m文件

edit ddeinit

Yair Altman 在 Matlab 的 DDE 功能上有 some more info。 Explorer 理解的 DDE 命令是什么让我回避了。我根据找到的 here 组装了我的示例。

【讨论】:

  • 感谢您的详细解答!似乎我不能再使用相对路径(这不是问题),而且我没有找到如何像我的问题中的示例那样预先选择给定文件。这没什么大不了的,但如果有人找到“ViewFolder”的更多选项......告诉我们!
  • 另外,有时文件夹窗口会打开,但不会出现在其他窗口的顶部(只有任务栏资源管理器图标闪烁)。它不会每次都发生,我没有找到重现它的方法。
  • 嗯... DDE 对于此任务可能过于有限。我一直在试图弄清楚如何使用 COM 或 .NET 来做同样的事情,但我就是不知道如何与文件资源管理器窗口对话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-14
  • 2014-11-12
  • 1970-01-01
相关资源
最近更新 更多