замена консольного эмулятора по умолчанию в Windows XP

11

Как я могу заменить программу по умолчанию, обеспечивающую консольные окна под Windows XP?

Я знаю об альтернативных программах , и у меня есть ярлык для запуска cmd.exeв Console2 . Но теперь я хочу, чтобы консольные приложения запускались в Console2, а не в консольной программе по умолчанию, даже когда я не контролирую программу, запускающую консольное приложение. (Т.е. запускается не консольная программа consoleapp.exe, и я не могу изменить ее для запуска Console2, но я все же хочу, чтобы приложение запускалось в новом экземпляре Console2.)

(Обратите внимание, что я хочу заменить саму консоль , то есть окно, в котором запускаются консольные (т. Е. Текстовые) приложения. И я должен иметь возможность запускать произвольные неизмененные консольные приложения: замена определенной консольной программы, такой как Cmd не принесет мне никакой пользы.)

РЕДАКТИРОВАТЬ : Итак, что я после того, как замена CSRSS , что приводит к

ОТ: Я хочу знать, когда Microsoft собирается сделать достойную замену CSRSS. Неспособность отрегулировать ширину «терминала» путем изменения размера окна - полная шутка.

Иди скачай ISE уже. (Включено в Win7 / 2008R2.)

Но, насколько я понимаю, этот ISE является средой для Powershell , а не общим консольным эмулятором.

Жиль "ТАК - перестань быть злым"
источник
Недостаток, упомянутый в вашей новой цитате, не распространяется на CMD, когда он запускается внутри Console2, во всяком случае, IIRC.
paradroid
@ jason404: Да, но если дважды щелкнуть, например, командный файл, он не откроется в Console2. В таких случаях вам может понадобиться заменить оболочку командной строки. Я думаю, что это отличный вопрос, +1.
Саша Чедыгов
Может быть, "Присоединить" консоли std к новой вкладке эмулятора консоли вам подойдет? Я имею в виду ручное прикрепление.
Максимус
@ Максимус Я не понимаю, к чему ты клонишь. Под «консолью std» вы подразумеваете CSRSS? Где эта вещь «прикрепить»?
Жиль "ТАК - перестань быть злым"
ConEmu может присоединить к своей вкладке любые существующие «настоящие консоли» (CSRSS, да) или простые приложения с графическим интерфейсом. Присоединение может быть сделано вручную из интерфейса ConEmu или с помощью специальной команды в консоли (если применимо).
Максимус

Ответы:

9

Я автор ConEmu - эмулятора консоли Windows. Одной из его функций является захват на своей вкладке существующих консолей или простых приложений с графическим интерфейсом. Итак, после запуска консольной программы в стандартной консоли (CSRSS / ConHost) вы можете:

  • В системном меню ConEmu выберите пункт «Присоединить ...» ( Win+ Gпо умолчанию) и выберите окно подключения. Если ConEmu не был запущен, вы можете запустить его без создания консоли / вкладки при запуске:

    C:\Tools\ConEmu.exe /detached
    
  • Или, если применимо, запустите в запущенной консоли следующую команду (ConEmu \ Attach.cmd), которая инициирует подключение со стороны консоли. Обратите внимание, что в этом случае ConEmu.exe (GUI) будет запущен автоматически, если он еще не существует.

    ConEmuC.exe /ATTACH /NOCMD
    
  • Есть еще один способ. Я думаю, что это не соответствует вашим требованиям, однако я раскрою это. В реестре есть ключ, содержимое которого cmd / tcc выполняется после запуска консоли. Пока вы начинаете consoleapp.exe, нет cmd.exe, это мисс. В Cmd_Autorun.cmdдистрибутиве ConEmu есть файл для установки / удаления этой команды.

    [HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
    "AutoRun"="\"<Command to be executed>\"" 
    

Здесь есть тег , на Superuser.com

UPD . Build 120704. Альтернативный ненавязчивый режим присоединения для консольных окон.

ConEmu прикрепить диалог внешней консоли

UPD2 . Build 121128. Можно, например, перехватить «создание окна консоли» из указанных (пользователем) приложений explorer.exe,vcexpress.exe. Узнайте больше об этой навязчивой экспериментальной функции .

Maximus
источник
Выглядит многообещающе, но это не работает для меня (я полагаю, это может работать для других). Когда я пытаюсь присоединиться consoleapp.exe, я получаю сообщение ConEmuC.X, PID=5656 Injecting remote into PID=5432 FAILED, code=-111:0x00000057. Так consoleapp.exeкак это программа, которую я отлаживаю, то из-за «удаленного впрыска» у меня возникает подозрение, что метод, используемый ConEmu, никогда не сработает для меня - я не могу позволить «чужим» программам мешать программе, которую я отлаживаю.
Жиль "ТАК - перестань быть злым"
Попробуйте построить 120704. Может быть, альтернативный режим будет работать для вас.
Максимус
Сборка 120704 с альтернативным режимом работает, спасибо. Если я не могу заменить консольный эмулятор по умолчанию, лучше подключить его после запуска приложения, чем ничего. Я не могу понять, как это сделать одним нажатием клавиши , хотя.
Жиль "ТАК - перестань быть злым"
@Maximus: Я не могу не похвалить вашу большую работу. Я редко пользуюсь Windows, но иногда вынужден, и когда мне это нужно, мне нужна интеграция с Cygwin или Msys. Хотя у Console2 было самое приятное решение, которое я видел до сих пор, оно было несколько неуклюжим. ConEmu очень хорош, но я хочу для 2 вещей: 1. он должен иметь лучшую поддержку профилей, то есть он должен иметь менеджер для сохранения / удаления пользовательских профилей консоли (например, для shнепосредственного вызова ; 2. он должен позволять разбивать окно в несколько вертикальных / горизонтальных вкладок и вспомните это пользовательское расположение вкладок при перезапуске
axel22
@ axel22: Вы можете публиковать пожелания по вопросам ConEmu . 1. Уже есть профили. 2. В дорожной карте.
Максимус
1

Ты не можешь Консоли Win32 всегда используют встроенные консольные окна, предоставляемые CSRSS.

user1686
источник
Спасибо, теперь я знаю, что мне нужно, это замена CSRSS.
Жиль "ТАК - перестань быть злым"
@ Жиль: удачи в этом. (На самом деле, в Windows 7 большая часть его функциональности была перенесена в ядро, но он все еще остается «критическим процессом», будучи ядром подсистемы Win32 и все такое.)
user1686
@ Жиль: Тогда используйте другую оболочку, как я уже сказал. Консоль Win32 - это просто стандартный эмулятор терминала Windows.
парадоид
1
@ jason404: И, как сказал Жиль, он хочет заменить не оболочку (cmd.exe), а консоль (эмулятор терминала), поэтому любая программа , использующая окна консоли, будет использовать замену.
user1686
2
Реализация окна консоли Windows 7 была перенесена csrssв conhost.exe. К сожалению, это все тот же старый пользовательский интерфейс, и, насколько я знаю, его API недокументированы. Больше на blog.technet.com/b/askperf/archive/2009/10/05/…
ak2