首页 > 解决方案 > 如何区分处理从 Windows 资源管理器和 cmd 打开的文件?

问题描述

我们有两种使用应用程序打开文件的方法:

如果事情像上面那样简单,我们应该完美地模仿 CLI 中的双击操作,即,让应用程序无法判断它是从 CLI 调用还是在资源管理器中双击:它们从操作系统接收非常相同的参数. 这是我长期相信的。

然而,MATLAB 打破了我的梦想。我发现 MATLAB 可以区别对待从资源管理器和 CLI 打开的 .m 脚本文件。当已经有一个 MATLAB 实例正在运行时,在资源管理器中双击一个 .m 文件将在现有实例中打开该文件。但是,当我通过从注册表中找到的 CLI 打开文件时,MATLAB 启动了一个新实例!

MATLAB 是如何做到这一点的?是在监控explorer吗?还是将其真正的 CLI 隐藏在其他地方?

我从 HKEY_CLASSES_ROOT\MATLAB.mlx.9.11.0\Shell\Open\command 的注册表中找到了 CLI。默认值为

"C:\Program Files\MATLAB\R2021b\bin\win64\matlab.exe" -r  "eval('[WinReg_path,WinReg_name,WinReg_ext]=fileparts(''%1'');cd(WinReg_path);clear WinReg_path WinReg_name WinReg_ext');"

我尝试用文件路径替换 %1 占位符,但新实例仍然启动。太混乱了!

标签: windowsmatlabregistrycommand-line-argumentswindows-explorer

解决方案


推荐阅读