2009-12-17 2 views
4

J'utilise l'API C++ pour lancer MATLAB (via engOpenSingleUse). Tout fonctionne bien. Mais je voudrais changer le titre de la fenêtre de "MATLAB Command Window" à quelque chose d'autre.Existe-t-il un moyen de modifier le titre de la fenêtre de commande MATLAB?

J'ai souvent 4 ou 5 d'entre eux ouverts, et parfois un devient orphelin si mon programme se bloque. Si je pouvais changer le titre, j'aurais une meilleure chance de savoir lequel était quoi.

Y a-t-il une commande MATLAB que je pourrais exécuter (via engEvalString) qui ferait cela?

Répondre

10

Pour Matlab 7:

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

* ou spécifiquement pour la fenêtre de commande:

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

Pour Matlab 6:

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

* ou pour la fenêtre de commande:

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


Autres caractéristiques connexes de bureau sans papier sont décrites ici:
http://UndocumentedMatlab.com/blog/tag/desktop/

+0

Darn. Cela fonctionne dans un MATLAB je me lance. (Les deux premières lignes, en utilisant getMainFrame). Cela ne fonctionne pas dans une fenêtre de commande MATLAB démarrée avec engOpen(). Je peux taper des commandes ici, voici l'erreur: »jDesktop = com.mathworks.mde.desk.MLDesktop.getInstance; »CmdWin = jDesktop.getClient ('Fenêtre de commande MATLAB'); »cmdWin.getTopLevelAncestor.setTitle ('mon nouveau titre'); ??? Essayez de référencer le champ du tableau de non-structure. –

+0

Eric - le problème est probablement dû au fait que le code récupère correctement le handle jDesktop mais renvoie un handle cmdWin vide. C'est probablement parce que vous n'avez pas une fenêtre ouverte nommée "MATLAB Command Window" lorsque vous essayez d'obtenir le handle de référence cmdWin. Essayez d'exécuter jDesktop.getClientTitles (ou des variantes similaires - voir les méthodes (jDesktop) pour obtenir une liste complète des méthodes prises en charge) pour obtenir le nom réel du client de la fenêtre de bureau. –

+0

Hmmm ..... Voici ce que je vois ..... getClientTitles renvoie 9 entrées, 'Command Window', 'Command History', etc etc etc Mais je ne vois qu'une seule fenêtre sur mon bureau Windows, et il est appelé 'Fenêtre de commande MATLAB'. Lorsque j'appelle jDesktop.getClient avec une chaîne ('MATLAB Command Window' ou 'Command Window'), il retourne simplement l'ensemble vide []. Je n'ai pas une instance régulière de MATLAB en cours d'exécution, c'est l'instance que j'ai de engOpen(). Merci d'essayer d'aider, j'apprécie vraiment! –

1

Essayez de codage directement contre les classes Java AWT. Cela peut être plus flexible et travailler dans le moteur Matlab fonctionnant sous C++. (Je n'ai pas testé dans ce contexte, puisque je ne l'utilise le moteur.)

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 

Vous utiliseriez comme ça.

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

Vous pouvez utiliser d'autres tests (classe de fenêtre, etc.) pour identifier les fenêtres d'intérêt.

+0

fonctionne dans l'interface graphique normale, ne fonctionne pas dans la fenêtre de commande du moteur –

Questions connexes