有没有一种方法可以更改 MATLAB 命令窗口的标题?

4
我正在使用C++ API启动MATLAB(通过engOpenSingleUse)。一切都正常工作。但我想将窗口的标题从“MATLAB命令窗口”更改为其他内容。
我经常同时打开4或5个MATLAB窗口,如果我的程序崩溃,有时会有一个窗口变成孤立状态。如果我能更改标题,我就能更好地知道哪个是哪个。
是否有一个MATLAB命令可以执行(通过engEvalString),以实现这一点?
2个回答

11

对于 Matlab 7:

jDesktop = com.mathworks.mde.desk.MLDesktop.getInstance;
jDesktop.getMainFrame.setTitle('my new title');

*或者针对命令窗口:

cmdWin = jDesktop.getClient('Command Window');
cmdWin.getTopLevelAncestor.setTitle('my new title');

Matlab 6 的解决方案:

jDesktop = com.mathworks.ide.desktop.MLDesktop.getMLDesktop;
jDesktop.getMainFrame.setTitle('my new title');

*或者对于命令窗口:

cmdWin = jDesktop.getClient('Command Window');
cmdWin.getTopLevelWindow.setTitle('my new title');


其他相关的未记录桌面特性在此处描述:
http://UndocumentedMatlab.com/blog/tag/desktop/


该代码在我自己启动的MATLAB中运行正常(使用getMainFrame的前两行)。但是在使用engOpen()打开的MATLAB命令窗口中无法正常工作。我可以在那里输入命令,以下是错误信息:» jDesktop = com.mathworks.mde.desk.MLDesktop.getInstance;» cmdWin = jDesktop.getClient('MATLAB Command Window');» cmdWin.getTopLevelAncestor.setTitle('my new title');??? 尝试引用非结构数组的字段。 - Eric H.
Eric - 问题可能是因为代码正确获取了jDesktop句柄,但返回了一个空的cmdWin句柄。这可能是因为在尝试获取cmdWin引用句柄时,您没有打开名为“MATLAB命令窗口”的窗口。尝试运行jDesktop.getClientTitles(或类似变体-请参见methods(jDesktop)以获取支持的方法的完整列表)以获取桌面窗口客户端的实际名称。 - Yair Altman
嗯......这是我看到的......getClientTitles返回9个条目,'Command Window','Command History'等等。但是我在我的Windows桌面上只看到一个窗口,它被称为'MATLAB命令窗口'。当我使用字符串('MATLAB命令窗口'或'Command Window')调用jDesktop.getClient时,它只返回空集[]。我没有运行常规实例的MATLAB,这是我从engOpen()获取的实例。感谢您的帮助,我非常感激! - Eric H.
Eric - 也许你在调用engOpen()后尝试过早地检索客户端句柄?当你调用getClient()时,命令窗口客户端可能仍然没有准备好。也许尝试插入一个短暂的延迟暂停()? - Yair Altman
Yair - 不,一旦命令窗口打开,我可以使用endEvalString()函数,或者我可以直接在命令窗口中输入命令。但两种方法都不起作用,所以这不是一个时间问题。我的猜测是,命令窗口在Java UI类方面与常规的“完整”MATLAB有所不同。唉。 - Eric H.
显示剩余3条评论

1

尝试直接针对Java AWT类进行编码。这可能更灵活并且可以在运行在C ++下的Matlab引擎内工作。(我没有在那种情况下测试过,因为我不使用该引擎。)

function change_win_title(oldName, newName)

wins = java.awt.Window.getOwnerlessWindows();
for i = 1:numel(wins)
    if isequal(char(wins(i).getTitle()), oldName)
        wins(i).setTitle(newName);
    end
end

你可以像这样使用它。

change_win_title('MATLAB Command Window', 'My new window name')

你可以使用其他的测试(窗口类等)来识别感兴趣的窗口。


在常规GUI中可运行,但无法在引擎命令窗口中运行。 - Eric H.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接