Несколько окон conemu — как отличить?

Windows 8.1, ConEmu 170316 [32] {предварительная версия}

У меня запущено несколько экземпляров Conemu, где каждый экземпляр равен одному «рабочему пространству».

Я хотел бы иметь возможность переключаться на эти рабочие области с помощью autohotkey или pywinauto. Однако они требуют критерия для выбора правильного окна, и обычно я использую комбинацию заголовка окна и/или типа класса окна.

Есть ли какие-либо настройки в conemu, которые могут помочь мне добиться идентификации этого критерия для выбора окна? Если его нет, мне придется где-нибудь записать PID при запуске conem windows, а затем прочитать его, чтобы открыть нужное окно во время активации окна.


person MrR    schedule 30.07.2017    source источник
comment
Я думаю, что этот вопрос больше подходит для SuperUser, поскольку вы спрашиваете о настройках программы, а не о программировании.   -  person BrenBarn    schedule 30.07.2017
comment
@BrenBarn не обязательно. Я открыт для других предложений, которые не обязательно связаны только с изменением настроек. Если мне нужно что-то написать на python, чтобы обойти это ограничение (я предлагаю один из нестандартных способов сделать это), я с радостью это сделаю. Открыт для предложений.   -  person MrR    schedule 30.07.2017
comment
Как вы запускаете экземпляры ConEmu? Я не понимаю, почему вы хотите использовать внешние менеджеры горячих клавиш для активации окна ConEmu...   -  person Maximus    schedule 31.07.2017
comment
Есть FAQ: conemu.github.io/en/FAQ -11.html#q-11-1   -  person Maximus    schedule 31.07.2017
comment
ОМГ оно есть! TY @Maximus - я пытался погуглить заголовок окна conemu и проверил довольно много результатов - я пришел к выводу, что это невозможно в Conemu. Я также довольно много использовал документацию, я должен был более тщательно изучить FAQ .   -  person MrR    schedule 01.08.2017
comment
RE: Как вы запускаете экземпляры ConEmu? Я не понимаю, почему вы хотите использовать внешние менеджеры горячих клавиш для активации окна ConEmu... По двум причинам. (1) Я хочу управлять всеми своими ярлыками программно, а не через настройки графического интерфейса. И у меня уже есть доля в ahk / pywinauto, поэтому он довольно легко вписывается в мою текущую настройку. (2) метод горячих клавиш Windows в ваших документах будет создавать новый экземпляр conemu каждый раз, когда вызывается ярлык, а не активировать существующее окно. Или я что-то не так понимаю?   -  person MrR    schedule 01.08.2017
comment
@Maximus спасибо за УДИВИТЕЛЬНУЮ Conemu.   -  person MrR    schedule 01.08.2017


Ответы (2)


Могу сказать только о pywinauto. Когда вы вызываете app = Application().start('ConEmu64.exe'), pywinauto уже запоминает PID процесса, и каждый новый объект WindowSpecification принимает этот PID. Конечно, это верно только в том случае, если вы управляете запуском ConEmu (или любого другого приложения). Дополнительные сведения можно найти в Руководстве по началу работы.

Метод app.connect(title="some unique tab name") также запомнит PID в объекте app. Но если есть несколько экземпляров с одинаковым заголовком, вам нужно устранить неоднозначность, например, с помощью критерия found_index=0. Или щелкните правой кнопкой мыши вкладку и выберите пункт контекстного меню "Переименовать вкладку...", который изменяет заголовок окна.

Я взглянул на ConEmu. Панели инструментов и вкладки видны даже Spy++. Так что большинство действий можно автоматизировать. Просто не уверен насчет консоли внутри вкладки. Если вы хотите ввести какие-то команды, лучше использовать стандартный модуль Python subprocess, потому что автоматизация GUI для консольных программ выглядит очень-очень странно. ;)

person Vasily Ryabov    schedule 30.07.2017
comment
Спасибо за ваш проницательный ответ. это правда, только если вы управляете запуском ConEmu (или любого другого приложения) -> Да, и мне не обязательно хранить его в памяти, я могу хранить в известном месте для активирующей программы (которая может быть разные). Или щелкните правой кнопкой мыши вкладку и выберите пункт контекстного меню «Переименовать вкладку», который изменяет заголовок окна. -› Вкладки именуются программно. Я не хочу ничего нажимать. В любой момент времени могла быть выбрана любая вкладка, поэтому мне нужно проверить таблицу окон на соответствие всем известным мне вкладкам для этого сеанса. - person MrR; 31.07.2017
comment
Я взглянул на ConEmu. Панели инструментов и вкладки видны даже Spy++. Так что большинство действий можно автоматизировать. Просто не уверен насчет консоли внутри вкладки. Если вы хотите вводить какие-то команды, гораздо лучше использовать стандартный подпроцесс модуля Python, потому что автоматизация GUI для консольных программ выглядит очень-очень странно. ;) Спасибо, это интересно знать. У меня просто было требование активировать правильное окно сейчас (моя рабочая область), тогда я могу перемещаться по вкладкам, используя собственные механизмы conemu. - person MrR; 31.07.2017
comment
Вы также можете динамически создавать командные строки / командные файлы conemu из python (например, я создаю набор консолей git для каждого репозитория git в указанной папке). Довольно легкий и мощный. - person MrR; 31.07.2017

Согласно часто задаваемым вопросам (ty Maximus) - см. вариант 1:

1) Используйте переключатель -title «Имя окна», чтобы явно установить заголовок окна нового экземпляра ConEmu. В приведенном ниже примере запускается новое окно ConEmu с заголовком Мой сервер и ssh к your.server.com внутри. Не имеет значения, запускаете ли вы другую вкладку или несколько вкладок из задачи, заголовок окна ConEmu остается Мой сервер. Таким образом, вы можете полагаться на заголовок для выбора окна с именем класса VirtualConsoleClass.

Вариант 2 тоже актуален. Мне пришлось бы (1) создать конфигурацию и (2) жестко закодировать хешированный идентификатор в ahk/pywinauto. Просто использовать имя заголовка окна кажется правильным в моем случае, настройка идентификатора приложения кажется излишним

2) Windows 7 представила AppUserModelID. ConEmu использует имя пути к исполняемому файлу и некоторые ключи (такие как -config, -loadcfgfile, -quake) для создания хэша для формирования AppID, который вы можете увидеть в About/SysInfo. Текущая версия показывает 1d5372066082f23b41ba6aa278e56e9d::163. Завершающий ::163 показывает версию внутреннего протокола ConEmu, которая может (и, скорее всего, будет) изменена в будущем. Ожидается, что сам хэш останется неизменным. Вы можете запросить идентификатор из запущенного процесса ConEmu, используя функцию Windows API GetApplicationUserModelId.

Спасибо, Максимус!

person MrR    schedule 01.08.2017
comment
У вас будет другой AppID, если вы используете разные переключатели -config. - person Maximus; 01.08.2017