заміна емулятора консолі за замовчуванням у 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.
парадироїд

@ jason404: Так, але якщо двічі клацнути пакетний файл, наприклад, він не відкриється в Console2. Такі екземпляри - це те, де вам може знадобитися замінити оболонку командного рядка. Я думаю, що це чудове питання, +1.
Саша Чедигов

Може бути "Вкласти" консоль std в нову вкладку емулятора консолі вам підходить? Я маю на увазі ручне вкладення.
Максим

@Maximus Я не розумію, про що ти хочеш. Під консоллю std ви маєте на увазі CSRSS? Де ця річ "прикріпити"?
Жил "ТАК - перестань бути злим"

ConEmu може приєднати до своєї вкладки будь-яку існуючу "реальну консоль" (CSRSS, так) або прості програми GUI. Вкладення може бути виконано вручну через ConEmu інтерфейс, або за допомогою спеціальної команди в консолі (якщо є).
Максим

Відповіді:


9

Я автор ConEmu - емулятора консолі Windows. Однією з його особливостей є захоплення на вкладку існуючих консолей або простих програм GUI. Отже, після запуску консольної програми у стандартній консолі (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 . Збірка 120704. Альтернативний неінструзивний режим кріплення для консольних вікон.

ConEmu додайте діалогове вікно зовнішньої консолі

UPD2 . Збірка 121128. Можна "перехопити" створення консольного вікна "із вказаних (користувачем) програм, наприклад explorer.exe,vcexpress.exe. Детальніше про цю нав'язливу експериментальну особливість .


Це виглядає перспективно, але це не працює для мене (я думаю, це може працювати і для інших). Коли я намагаюся вкласти 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 дуже приємний, але я бажаю двох речей: 1. він повинен мати кращу підтримку профілів, тобто він повинен мати менеджера для збереження / видалення користувацьких профілів консолі (наприклад, дзвінки shбезпосередньо; 2. він повинен дозволяти розділяти вікно в кілька вертикальних / горизонтальних вкладок і пригадайте цю власну компоновку вкладок при перезапуску.
axel22

@ axel22: Ви можете опублікувати побажання до питань ConEmu . 1. Є вже профілі. 2. У дорожній карті.
Максим

1

Ви не можете. У консолях Win32 завжди використовуються вбудовані вікна консолей, надані CSRSS.


Дякую, тепер я знаю, що мені потрібно - це заміна CSRSS.
Жил "ТАК - перестань бути злим"

@Gilles: Удачі в цьому. (Насправді в Windows 7 значна частина його функціональності була переміщена в ядро, але вона все ще залишається "критичним процесом", будучи ядром підсистеми Win32 і все таке.)
user1686

@Gilles: Потім використовуйте іншу оболонку, як я вже сказав. Консоль Win32 - це лише стандартний емулятор терміналу Windows.
парадироїд

1
@ jason404: І, як сказав Гілль, замінити його не оболонка (cmd.exe), а консоль (термінальний емулятор), так що будь-яка програма, яка використовує вікна консолі, використовувала б її заміну.
користувач1686

2
Реалізація вікна консолі Windows 7 була переміщена з csrssв conhost.exe. На жаль, це все той же старий інтерфейс користувача, і, наскільки я знаю, його API не зареєстровані. Більше на blogs.technet.com/b/askperf/archive/2009/10/05/…
ak2
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.