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

3461
Gilles

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

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

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

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

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

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

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

11
Недостаток, упомянутый в вашей новой цитате, не распространяется на CMD, когда он запускается внутри Console2, во всяком случае, IIRC. paradroid 14 лет назад 0
@ jason404: Да, но если дважды щелкнуть, например, командный файл, он не откроется в Console2. В таких случаях вам может понадобиться заменить оболочку командной строки. Я думаю, что это отличный вопрос, +1. Sasha Chedygov 14 лет назад 0
Может быть, "Присоединить" консоли std к новой вкладке эмулятора консоли вам подойдет? Я имею в виду ручное прикрепление. Maximus 12 лет назад 0
@ Максимус Я не понимаю, к чему ты клонишь. Под консолью std вы подразумеваете CSRSS? Где эта вещь "прикрепить"? Gilles 12 лет назад 0
ConEmu может присоединить к своей вкладке любые существующие «настоящие консоли» (CSRSS, да) или простые приложения с графическим интерфейсом. Присоединение может быть выполнено вручную из интерфейса ConEmu или с помощью специальной команды в консоли (если применимо). Maximus 12 лет назад 0
@Maximus Я никогда раньше не слышал о ConEmu (наверное, вы имеете в виду [это] (http://sourceforge.net/projects/conemu/))? Спасибо, я попробую в следующий раз, когда буду на машине с Windows. Gilles 12 лет назад 0
@ Maximus Если ConEmu может решить мою проблему, тогда да, пожалуйста, оставьте ответ. Можно опубликовать ответ о вашем собственном продукте, если ваше сообщение действительно ответит на вопрос, и вы сообщите, что являетесь автором (см. [Faq # продвижение]). Gilles 12 лет назад 0

2 ответа на вопрос

9
Maximus

Я автор 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 attach external console dialog

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

Looks promising, but it doesn't work for me (I suppose it might work for others). When I try to attach `consoleapp.exe`, I get the message `ConEmuC.X, PID=5656 Injecting remote into PID=5432 FAILED, code=-111:0x00000057`. Since `consoleapp.exe` is a program I'm debugging, seeing “injecting remote” makes me suspect that the technique used by ConEmu will never work for me — I can't allow “foreign” programs to perturb the program I'm debugging. Gilles 12 лет назад 0
Попробуйте построить 120704. Может быть, альтернативный режим будет работать для вас. Maximus 12 лет назад 0
Сборка 120704 с альтернативным режимом работает, спасибо. Если я не могу заменить консольный эмулятор по умолчанию, лучше подключить его после запуска приложения, чем ничего. [Я не могу понять, как это сделать одним нажатием клавиши] (http://superuser.com/questions/445394/attach-a-running-console-application-to-a-new-conemu-instance), хотя , Gilles 12 лет назад 0
@ Максимус: Я не могу не похвалить вашу большую работу. Я редко пользуюсь Windows, но иногда вынужден, а когда мне нужно, мне нужна интеграция с Cygwin или Msys. Хотя у Console2 было самое приятное решение, которое я видел до сих пор, оно было несколько неуклюжим. ConEmu очень хорош, но я хочу для двух вещей: 1. он должен иметь лучшую поддержку профилей, т.е. у него должен быть менеджер для сохранения / удаления пользовательских профилей консоли (например, прямой вызов `sh`; 2. он должен позволять расщепление окно в нескольких вертикальных / горизонтальных вкладках и вызвать это пользовательское расположение вкладок при перезапуске. axel22 12 лет назад 0
@ axel22: вы можете публиковать пожелания в [Проблемы ConEmu] (http://code.google.com/p/conemu-maximus5/wiki/Issues?tm=3). 1. Уже есть профили. 2. В дорожной карте. Maximus 12 лет назад 0
1
grawity

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

Спасибо, теперь я знаю, что мне нужно, это замена CSRSS. Gilles 14 лет назад 0
@ Жиль: удачи в этом. (На самом деле, в Windows 7 большая часть его функциональности была перенесена в ядро, но он все еще остается «критическим процессом», будучи ядром подсистемы Win32 и все такое.) grawity 14 лет назад 0
@ Жиль: Тогда используйте другую оболочку, как я уже сказал. Консоль Win32 - это просто стандартный эмулятор терминала Windows. paradroid 14 лет назад 0
@ jason404: И, как сказал Жиль, он хочет заменить не _shell_ (cmd.exe), а _console_ (эмулятор терминала), поэтому любая программа, использующая консольные окна, будет использовать замену. grawity 14 лет назад 1
Реализация окна консоли Windows 7 была перемещена из `csrss` в` conhost.exe`. К сожалению, это все тот же старый пользовательский интерфейс, и, насколько я знаю, его API недокументированы. Больше на http://blogs.technet.com/b/askperf/archive/2009/10/05/windows-7-windows-server-2008-r2-console-host.aspx ak2 14 лет назад 2
@ ak2: Так вот почему они открываются целую вечность. grawity 14 лет назад 0

Похожие вопросы