Ersetzen des Standard-Konsolenemulators unter Windows XP

11

Wie kann ich das Standardprogramm ersetzen, das Konsolenfenster unter Windows XP bereitstellt?

Ich kenne alternative Programme und habe eine Verknüpfung, um cmd.exein Console2 zu starten . Jetzt möchte ich jedoch, dass Konsolenanwendungen in Console2 und nicht im Standardkonsolenprogramm gestartet werden, auch wenn ich keine Kontrolle über das Programm habe, mit dem die Konsolenanwendung gestartet wird. (Das heißt, ein Nicht-Konsolenprogramm wird gestartet consoleapp.exe, und ich kann es nicht ändern, um stattdessen Console2 zu starten. Ich möchte jedoch, dass die Anwendung in einer neuen Instanz von Console2 gestartet wird.)

(Beachten Sie, dass ich die Konsole selbst ersetzen möchte, dh das Fenster, in dem Konsolenanwendungen (dh der Textmodus) ausgeführt werden. Außerdem muss ich in der Lage sein, beliebige, unveränderte Konsolenanwendungen auszuführen: ein Ersatz für ein bestimmtes Konsolenprogramm wie Cmd tut mir nicht gut.)

EDIT : Also, was ich will , ist ein CSRSS-Ersatz , der dazu führt

OT: Ich möchte wissen, wann Microsoft einen anständigen CSRSS-Ersatz vornehmen wird. Die Breite eines "Terminals" nicht durch Ändern der Fenstergröße anpassen zu können, ist ein Witz.

Laden Sie die ISE bereits herunter. (Es ist in Win7 / 2008R2 enthalten.)

Soweit ich weiß, ist diese ISE eine Umgebung für Powershell , kein allgemeiner Konsolenemulator.

Gilles 'SO - hör auf böse zu sein'
quelle
Der in Ihrem neuen Angebot erwähnte Mangel gilt ohnehin nicht für CMD, wenn es in Console2, IIRC, ausgeführt wird.
Paradroid
@ jason404: Ja, aber wenn Sie beispielsweise auf eine Batchdatei doppelklicken, wird diese in Console2 nicht geöffnet. In solchen Fällen müssen Sie möglicherweise die Befehlszeilen-Shell ersetzen. Ich denke, es ist eine großartige Frage, +1.
Sasha Chedygov
Kann "Stecken" der Standardkonsole in neue Registerkarte des Konsolenemulators für Sie passen? Manuelles Anhängen, meine ich.
Maximus
@ Maximus Ich verstehe nicht, worauf Sie sich beziehen. Mit "Standardkonsole" meinen Sie CSRSS? Wo ist das "Anhängen"?
Gilles 'SO - hör auf böse zu sein'
ConEmu kann jede vorhandene "echte Konsole" (CSRSS, ja) oder einfache GUI-Anwendungen an seine Registerkarte anhängen. Das Anhängen kann manuell über die ConEmu-Schnittstelle oder durch Ausführen eines speziellen Befehls in der Konsole (falls zutreffend) erfolgen.
Maximus

Antworten:

9

Ich bin Autor von ConEmu - Windows Console Emulator. Eine seiner Funktionen ist das Erfassen vorhandener Konsolen oder einfacher GUI-Anwendungen auf der Registerkarte. Nachdem Sie das Konsolenprogramm in der Standardkonsole (CSRSS / ConHost) gestartet haben, können Sie:

  • Wählen Sie im ConEmu-Systemmenü den Eintrag "Anhängen ..." ( standardmäßig Win+ G) und wählen Sie das Fenster "Anhängen". Wenn ConEmu nicht gestartet wurde, können Sie es optional starten, ohne beim Start eine Konsole / einen Tab zu erstellen:

    C:\Tools\ConEmu.exe /detached
    
  • Oder führen Sie gegebenenfalls in der gestarteten Konsole den folgenden Befehl (ConEmu \ Attach.cmd) aus, der das Anhängen von der Konsolenseite aus initiiert. Beachten Sie, dass in diesem Fall ConEmu.exe (GUI) automatisch gestartet wird, sofern es noch nicht vorhanden ist.

    ConEmuC.exe /ATTACH /NOCMD
    
  • Es gibt noch einen Weg. Ich denke, es entspricht nicht Ihren Anforderungen, aber ich werde es offenlegen. In der Registrierung befindet sich ein Schlüssel, dessen Inhalt cmd / tcc nach dem Start der Konsole ausgeführt wird. Während Sie anfangen consoleapp.exe, nicht cmd.exedieses Miss. Cmd_Autorun.cmdIn ConEmu Distribution befindet sich eine Datei zum Installieren / Deinstallieren dieses Befehls.

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

Hier auf Superuser.com gibt es ein Tag

UPD . Build 120704. Alternativer nichtintrusiver Verbindungsmodus für Konsolenfenster.

ConEmu Dialogfeld für externe Konsole anhängen

UPD2 . Build 121128. Es ist beispielsweise möglich, die "Erstellung eines Konsolenfensters" aus bestimmten (vom Benutzer) Anwendungen abzufangen explorer.exe,vcexpress.exe. Lesen Sie mehr über diese aufdringliche experimentelle Funktion .

Maximus
quelle
Sieht vielversprechend aus, funktioniert aber bei mir nicht (ich nehme an, es könnte bei anderen funktionieren). Wenn ich versuche anzuhängen consoleapp.exe, erhalte ich die Nachricht ConEmuC.X, PID=5656 Injecting remote into PID=5432 FAILED, code=-111:0x00000057. Da consoleapp.exees sich um ein Programm handelt, das ich debugge, lässt mich der Verdacht auf "Injecting Remote" vermuten, dass die von ConEmu verwendete Technik für mich niemals funktioniert. Ich kann nicht zulassen, dass "fremde" Programme das Programm, das ich debugge, stören.
Gilles 'SO - hör auf böse zu sein'
Versuchen Sie es mit Build 120704. Möglicherweise funktioniert der alternative Modus für Sie.
Maximus
Build 120704 mit alternativem Modus funktioniert, danke. Wenn ich den Standard-Konsolenemulator nicht ersetzen kann, ist das Anhängen an einen besseren nach dem Start der Anwendung besser als nichts. Ich kann jedoch nicht herausfinden, wie es mit einem Tastendruck geht.
Gilles 'SO - hör auf böse zu sein'
@ Maximus: Ich kann nicht anders, als deine großartige Arbeit nicht zu loben. Ich benutze selten Windows, bin aber manchmal dazu gezwungen, und wenn ich es bin, brauche ich die Integration von Cygwin oder Msys. Während Console2 die schönste Lösung hatte, die ich bisher gesehen habe, war sie etwas klobig. ConEmu ist sehr nett, aber ich wünsche mir zwei Dinge: 1. Es sollte eine bessere Unterstützung für Profile haben, dh es sollte einen Manager zum Speichern / Löschen von benutzerdefinierten Konsolenprofilen haben (z. B. shdirektes Aufrufen ; 2. Es sollte das Aufteilen des Fensters ermöglichen mehrere vertikale / horizontale Registerkarten und rufen Sie diese benutzerdefinierte Registerkartenanordnung beim Neustart auf.
axel22
@ axel22: Sie können Wünsche an ConEmu Issues senden . 1. Es gibt bereits Profile. 2. In der Roadmap.
Maximus
1

Das kannst du nicht. Win32-Konsolen verwenden immer die von CSRSS bereitgestellten integrierten Konsolenfenster.

user1686
quelle
Danke, jetzt weiß ich, wonach ich einen CSRSS-Ersatz suche.
Gilles 'SO - hör auf böse zu sein'
@ Gilles: Viel Glück damit. (Tatsächlich wurde unter Windows 7 ein Großteil seiner Funktionalität in den Kernel verschoben, aber es bleibt immer noch ein "kritischer Prozess", da es der Kern des Win32-Subsystems und all das ist.)
user1686
@ Gilles: Dann benutze eine andere Shell, wie gesagt. Die Win32-Konsole ist nur der Standard-Windows-Terminalemulator.
Paradroid
1
@ jason404: Und wie Gilles sagte, ist es nicht die Shell (cmd.exe), sondern die Konsole (Terminalemulator), die er ersetzen möchte , sodass jedes Programm , das Konsolenfenster verwendet, den Ersatz verwenden würde.
user1686
2
Windows 7-Implementierung Konsolenfenster wurde von ausgezogen csrssin conhost.exe. Leider ist es immer noch dieselbe alte Benutzeroberfläche, und soweit ich weiß, sind die APIs nicht dokumentiert. Mehr unter blogs.technet.com/b/askperf/archive/2009/10/05/…
ak2