2017-07-30 7 views
1

Windows 8.1, ConEmu 170316 [32] {Prévisualisation}Plusieurs fenêtres conemu - comment différencier?

J'ai plusieurs instances Conemu en cours d'exécution, où chaque instance est égale à un "espace de travail".

Je voudrais pouvoir passer à cet espace de travail avec autohotkey ou pywinauto. Cependant, ils nécessitent un critère pour sélectionner la fenêtre de droite, et généralement j'utilise une combinaison de titre de fenêtre et/ou de type de classe de fenêtre.

Y a-t-il des paramètres dans conemu qui peuvent m'aider à atteindre ce critère d'identification pour la sélection de la fenêtre? Si ce n'est pas le cas, je devrai écrire le PID quelque part quand je démarre les fenêtres de conem, puis le lire pour faire apparaître la fenêtre de droite au moment de l'activation de la fenêtre.

+0

Je pense que cette question convient mieux à SuperUser puisque vous posez des questions sur les réglages du programme, pas sur la programmation. – BrenBarn

+1

@BrenBarn pas nécessairement. Je suis ouvert à d'autres suggestions qui n'impliquent pas nécessairement des paramètres modifiés uniquement.Si je dois coder quelque chose en python pour contourner cette limitation (je suggère l'une des façons les plus originales de le faire), je suis heureux de le faire. Ouvert aux suggestions. – MrR

+0

Comment exécutez-vous les instances ConEmu? Je ne comprends pas pourquoi voulez-vous utiliser des gestionnaires de raccourcis externes pour activer la fenêtre ConEmu ... – Maximus

Répondre

1

As per faq (ty Maximus) - voir option 1:

1) Utilisez l'interrupteur à -title « Nom de la fenêtre » à titre de la fenêtre définie explicitement nouvelle instance ConEmu. L'exemple ci-dessous démarre une nouvelle fenêtre ConEmu avec le titre Mon serveur et ssh sur votre.serveur.com à l'intérieur. Peu importe si vous exécutez un autre onglet, ou plusieurs onglets de la tâche, le titre de la fenêtre ConEmu reste Mon serveur. Donc, vous pouvez compter sur le titre pour sélectionner la fenêtre avec le nom de classe VirtualConsoleClass.

L'option 2 est également valide. Je devais (1) créer une config, et (2) coder en dur l'identifiant hashed dans ahk/pywinauto. Juste en utilisant le nom du titre de la fenêtre semble la bonne chose à faire dans mon cas, la configuration de l'id app semble trop

2) Windows 7 introduit AppUserModelID. ConEmu utilise le nom de chemin d'accès exécutable et certains commutateurs (comme -config, -loadcfgfile, -quake) pour créer un hachage pour former AppID, que vous pouvez voir dans About/SysInfo. La version actuelle montre 1d5372066082f23b41ba6aa278e56e9d :: 163. Le fichier final :: 163 décrit la version du protocole interne de ConEmu qui peut (et très probablement) être modifiée à l'avenir. Le hachage lui-même devrait être inchangé. Vous pouvez demander à l'ID d'exécuter le processus ConEmu à l'aide de la fonction API Windows GetApplicationUserModelId.

Merci Maximus!

+0

Vous auriez AppID différent si vous utilisez différents commutateurs '-config'. – Maximus

+0

Bien sûr! J'ai mis à jour la réponse. – MrR

1

Je ne peux parler que de pywinauto. Lorsque vous appelez app = Application().start('ConEmu64.exe') pywinauto se souvient déjà du processus PID et chaque nouvel objet WindowSpecification assume ce PID. Bien sûr, ce n'est vrai que si vous contrôlez le démarrage de ConEmu (ou de toute autre application). Plus de détails peuvent être trouvés dans le Getting Started Guide.

La méthode app.connect(title="some unique tab name") se souviendra également de l'objet PID dans app. Mais s'il y a peu d'instances avec le même titre, vous devez le désambiguïser en utilisant le critère found_index=0, par exemple. Ou faites un clic droit sur l'onglet et choisissez l'onglet de menu contextuel "Renommer l'onglet ..." qui change le titre de la fenêtre.

J'ai jeté un coup d'œil à ConEmu. Les barres d'outils et les onglets sont visibles même pour Spy ++. Ainsi, la plupart des actions peuvent être automatisées. Je ne suis pas sûr de la console à l'intérieur d'un onglet. Si vous voulez taper certaines commandes, il vaut mieux utiliser le module Python standard subprocess parce que l'automation GUI pour les programmes de la console est très étrange. ;)

+0

Merci pour votre réponse perspicace. "c'est vrai seulement si vous contrôlez le démarrage de ConEmu (ou toute autre application)" -> Oui, et je ne dois pas nécessairement le garder en mémoire, je peux rester dans un endroit bien connu pour le programme d'activation (qui pourrait être différent). "Ou faites un clic droit sur l'onglet et choisissez" Renommer l'onglet ... "élément de menu contextuel qui change le titre de la fenêtre." -> Les onglets sont nommés par programme. Je ne veux pas devoir cliquer sur quoi que ce soit. À tout moment, n'importe quel onglet peut avoir été sélectionné, donc je dois vérifier la table de fenêtre pour une correspondance avec tous les onglets que je connais pour cette session. – MrR

+0

"J'ai jeté un coup d'œil à ConEmu.Les barres d'outils et les onglets sont visibles même pour Spy ++, donc la plupart des actions peuvent être automatisées.Pas juste sur la console dans un onglet.Si vous voulez taper quelques commandes, il vaut mieux utiliser sous-processus de module Python standard car l'automatisation de l'interface graphique pour les programmes de console est très étrange.;) "Merci, c'est intéressant à savoir. J'avais juste besoin d'activer la bonne fenêtre maintenant (mon "espace de travail"), puis je peux naviguer dans les onglets en utilisant les mécanismes natifs de conemu. – MrR

+0

Vous pouvez également créer dynamiquement des lignes de commande/fichiers de commandes de python (par exemple, je construis un ensemble de consoles git pour chaque repo git dans un dossier que je spécifie). Assez facile et puissant. – MrR