substituindo o emulador de console padrão no Windows XP


11

Como posso substituir o programa padrão que fornece janelas de console no Windows XP?

Conheço programas alternativos e tenho um atalho para iniciar cmd.exeno Console2 . Mas agora eu quero que os aplicativos de console iniciem no Console2 em vez do programa de console padrão, mesmo quando não tenho controle sobre o programa que inicia o aplicativo de console. (Ou seja, um programa que não seja do console é iniciado consoleapp.exee não é possível alterá-lo para iniciar o Console2, mas ainda quero que o aplicativo seja iniciado dentro de uma nova instância do Console2.)

(Observe que eu quero substituir o próprio console , ou seja, a janela na qual os aplicativos do console (ou seja, modo de texto) são executados. E eu devo poder executar aplicativos de console arbitrários e não modificados: um substituto para um programa de console específico como o Cmd não me fará nenhum bem.)

EDIT : Então, o que eu estou procurando é uma substituição do CSRSS , o que leva a

OT: Quero saber quando a Microsoft fará uma substituição decente do CSRSS. Não poder ajustar a largura de um "terminal" redimensionando a janela é uma piada completa.

Vá baixar o ISE já. (Está incluído no Win7 / 2008R2.)

Mas, tanto quanto eu entendo, este ISE é um ambiente para o Powershell , não um emulador de console geral.


A deficiência mencionada em sua nova cotação não se aplica ao CMD quando executado no Console2, de qualquer maneira, no IIRC.
Paradroid

@ jason404: Sim, mas se você clicar duas vezes em um arquivo em lotes, por exemplo, ele não será aberto no Console2. Instâncias como essa são onde você pode realmente precisar substituir o shell da linha de comando. Eu acho que é uma ótima pergunta, +1.
Sasha Chedygov 30/09/10

Pode ser "Attach" do console std em uma nova guia do emulador de console que combina com você? Anexo manual, quero dizer.
Maximus

@ Maximus Não entendo o que você está se referindo. Por "console padrão", você quer dizer CSRSS? Onde está essa coisa de "anexar"?
Gilles 'SO- stop be evil'

O ConEmu pode anexar qualquer "console real" existente (CSRSS, sim) ou aplicativos GUI simples em sua guia. Anexar pode ser feito manualmente a partir da interface do ConEmu ou executando um comando especial no console (se aplicável).
Maximus

Respostas:


9

Sou autor do ConEmu - emulador de console do Windows. Um de seus recursos é capturar em sua guia os consoles existentes ou aplicativos GUI simples. Portanto, após iniciar o programa do console no console padrão (CSRSS / ConHost), você pode:

  • No menu do sistema ConEmu, escolha o item "Anexar ..." ( Win+ Gpor padrão) e escolha a janela anexada. Se o ConEmu não foi iniciado, você pode, opcionalmente, iniciá-lo sem criar console / guia na inicialização:

    C:\Tools\ConEmu.exe /detached
    
  • Ou, se aplicável, execute no console iniciado o seguinte comando (ConEmu \ Attach.cmd) que inicia a conexão do lado do console. Observe que, nesse caso, o ConEmu.exe (GUI) será iniciado automaticamente, se ainda não existir.

    ConEmuC.exe /ATTACH /NOCMD
    
  • Há mais uma maneira. Eu acho que não corresponde aos seus requisitos, no entanto, divulgarei. Há uma chave no registro, cujo conteúdo cmd / tcc é executado após a inicialização do console. Enquanto você está começando consoleapp.exe, não cmd.exe, esta senhorita. Há um Cmd_Autorun.cmdarquivo no ConEmu distrib para instalar / desinstalar este comando.

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

Há uma tag aqui, no Superuser.com

UPD . Build 120704. Modo de conexão não invasivo alternativo para janelas do console.

ConEmu anexar caixa de diálogo console externo

UPD2 . Compilação 121128. É possível interceptar a "criação da janela do console" de aplicativos especificados (por usuário), por exemplo explorer.exe,vcexpress.exe. Leia mais sobre esse recurso experimental intrusivo .


Parece promissor, mas não funciona para mim (acho que pode funcionar para outros). Quando tento anexar consoleapp.exe, recebo a mensagem ConEmuC.X, PID=5656 Injecting remote into PID=5432 FAILED, code=-111:0x00000057. Como consoleapp.exeé um programa que estou depurando, ver "injetar controle remoto" me faz suspeitar que a técnica usada pelo ConEmu nunca funcionará para mim - não posso permitir que programas "estrangeiros" perturbem o programa que estou depurando.
Gilles 'SO- stop be evil'

Tente construir 120704. Pode ser que o modo alternativo funcione para você.
Maximus

Build 120704 com o modo alternativo funciona, obrigado. Se eu não conseguir substituir o emulador de console padrão, conectar-se a um melhor depois que o aplicativo for iniciado é melhor que nada. Porém, não consigo descobrir como fazê-lo com o pressionar de uma tecla .
Gilles 'SO- stop be evil'

@ Maximus: Não posso deixar de elogiar o seu excelente trabalho. Eu raramente uso o Windows, mas às vezes sou forçado a usar e, quando sou, preciso da integração do Cygwin ou do Msys. Embora o Console2 tivesse a melhor solução que eu vi até agora, era um pouco desajeitado. O ConEmu é muito bom, mas desejo duas coisas: 1. ele deve ter um melhor suporte para perfis, ou seja, deve ter um gerente para salvar / excluir perfis de console personalizados (por exemplo, ligar shdiretamente; 2. deve permitir dividir a janela em múltiplas abas verticais / horizontais e recordar este arranjo guia personalizada no reinício.
axel22

@ axel22: Você pode postar seus desejos no ConEmu Issues . 1. Já existem perfis. 2. No roteiro.
Maximus

1

Você não pode. Os consoles Win32 sempre usam as janelas internas do console fornecidas pelo CSRSS.


Obrigado, agora eu sei o que estou procurando é uma substituição do CSRSS.
Gilles 'SO- stop be evil'

@ Gilles: Boa sorte com isso. (Na verdade, no Windows 7 muito de sua funcionalidade foi movida para o kernel, mas ainda permanece um "processo crítico", sendo núcleo do subsistema Win32 e tudo isso.)
user1686

@ Gilles: Em seguida, use uma concha diferente, como eu disse. O console do Win32 é apenas o emulador de terminal padrão do Windows.
Paradroid

1
@ jason404: E, como Gilles disse, não é o shell (cmd.exe), mas o console (emulador de terminal) que ele deseja substituir, para que qualquer programa que use janelas do console use a substituição.
user1686

2
Implementação janela de console do Windows 7 foi movido para fora da csrsspara conhost.exe. Infelizmente, ainda é a mesma interface antiga e, tanto quanto eu sei, suas APIs não são documentadas. Mais em blogs.technet.com/b/askperf/archive/2009/10/05/…
ak2
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.