Ich bin oft frustriert über die Konsolenhostanwendung von Windows, insbesondere darüber, wie ungeschickt die Zwischenablage funktioniert, Probleme mit der automatischen Breite usw. Ich würde gerne wissen, ob es eine Möglichkeit gibt, den Standardkonsolenhost conhost.exe
durch einen benutzerdefinierten zu ersetzen, und wo dies möglich ist Ich finde weitere Informationen zu den Schnittstellen, die ich implementieren müsste, wenn ich meine eigenen schreiben würde.
Ich suche nicht nur eine alternative Konsole, ich benutze sie bereits xterm
von CygWin. Ich suche nach Informationen zum Ersetzen des Windows-Standardkonsolenfensterhosts.
Antworten:
Im Folgenden finden Sie einige nützliche Produkte zum Ersetzen von Konsolen, die benutzerfreundlicher als cmd sind.
Wie unten kommentiert, sind alle diese Shells seit Windows 7 nur eine Schnittstelle zu conhost.exe, sogar zu Powershell. Einzelheiten lesen Was conhost.exe ist und warum ist es Laufen .
Daher ersetzen die folgenden Konsolen nur die standardmäßige visuelle Schnittstelle zu conhost, die von cmd angezeigt wird, und sind nur nützlich, wenn sie direkt als Programme aufgerufen werden. Sie können nicht indirekt aufgerufen werden, wie wenn eine konsolenausführbare Datei wie diskpart ausgeführt wird, da dies conhost aufruft und conhost über eine eigene E / A-Schnittstelle und API verfügt.
Folgendes sagt Microsoft in Windows 7 / Windows Server 2008 R2: Konsolenhost :
Die Schlussfolgerung ist, dass dies nicht möglich ist, wenn Sie die Konsole tiefer ersetzen möchten als die cmd-Schnittstelle. Microsoft hat dieses Design als Sicherheitsmaßnahme ausgewählt und wird nicht zurückkehren.
Die einzige Möglichkeit, das Verhalten von conhost zu ändern, besteht darin, einen globalen System-Hook für die conhost-API festzulegen. Ich weiß überhaupt nicht, ob dies möglich ist und niemand hat es bis jetzt getan (oder ob sie es getan haben, sagen sie es nicht). Ich glaube auch nicht, dass Microsoft Sie eine so wichtige Systemdatei wie conhost.exe durch eine gehackte Version ersetzen lässt.
Wenn das Ersetzen von cmd erforderlich ist, das sich in system32 \ cmd.exe befindet, muss man das Eigentum an der Datei übernehmen und sie dann umbenennen (cmd1.exe?), Die Exe für den Konsolenersatz in cmd.exe umbenennen und zusammen mit system32 kopieren Alle Dateien, die es benötigt, damit es funktioniert. Dies kann zu Problemen führen, wenn die Ersatzkonsole nicht alle Parameter von cmd unterstützt.
Ein anderer Ansatz, der für .bat-Dateien funktioniert, besteht darin, die neue Konsole mit ihnen zu verknüpfen. Dazu muss man den Registrierungsschlüssel bearbeiten
HKEY_CLASSES_ROOT\batfile\shell\open\command
. In diesem Artikel finden Sie einige Details.Hier ist die Liste der Konsolen:
Colorconsole
FireCMD
PowerCmd
gs.exe
PyCmd
quelle
conhost.exe
, so dass Programme in ihnen NICHT standardmäßig gestartet werden.cmd.exe
.cmd
ist nur eine Shell, ein Befehlszeilenprozessor. Das visuelle Konsolenfenster wird von einem ganz anderen Subsystem gesteuert, dh von Prozessencsrss.exe
vor Vista und von Windows 7 / Windows 2008csrss.exe
conhost.exe
Es gibt Programme wie Console , die sich um cmd.exe drehen und Ihnen wahrscheinlich das geben können, wonach Sie suchen, aber ich habe noch nichts gesehen, das das Konsolensystem ersetzt. AFAIK, die meisten dieser Projekte leiten stdin / stdout / stderr einfach um und wickeln dann eine häufigere GUI um cmd.exe, wobei das eigentliche Konsolenfenster im Hintergrund ausgeblendet wird.
quelle
Microsoft hat den Quellcode conhost.exe veröffentlicht ( https://github.com/microsoft/terminal ).
Jetzt haben Sie die Möglichkeit, die Standard-Datei conhost.exe durch Ihren eigenen Konsolenhost in Windows 10 zu ersetzen. Tatsächlich habe ich bereits einen solchen Versuch unternommen und Erfolg erzielt ( https://github.com/microsoft/terminal/issues/). 1817 ).
Es ist auch möglich, OpenConsole-Quellcode auf Windows 7 zu portieren. Da Sie über den Quellcode verfügen, können Sie auch beliebige Funktionen hinzufügen.
Darüber hinaus hat Microsoft in Windows 10 die Windows Pseudo Console-API eingeführt, mit der Entwickler Terminalanwendungen von Drittanbietern eleganter entwickeln können (Ja, sie wird über conhost.exe implementiert und sollte in den von Microsoft veröffentlichten Code aufgenommen werden).
https://devblogs.microsoft.com/commandline/windows-command-line-introducing-the-windows-pseudo-console-conpty/
Hier sind die Dinge, für die conhost.exe tatsächlich verantwortlich ist:
(Von https://devblogs.microsoft.com/commandline/windows-command-line-inside-the-windows-console/ )
Die Kernkomponenten der Konsole bestehen aus folgenden Elementen (von unten nach oben):
ConDrv.sys - Kernel-Modus-Treiber
ConHost.exe - Win32 GUI App:
ConHost Core - die Einbauten und Leitungen der Konsole
Console UX App Services - die Konsolen-UX- und UI-Ebene
quelle
Wie andere gesagt haben, scheint es, dass man den Konsolenhost nicht einfach als solchen ersetzen kann. Es gibt ein anderes Projekt, das Tricks verwendet, um die Conhost-Benutzeroberfläche auszublenden und eine eigene zu zeigen, die noch nicht erwähnt wurde: ConEmu .
Da Conhost nicht vollständig ersetzt wird, müssen Sie das Zielprogramm über ConEmu ausführen, damit dies wirksam wird. Wenn Sie einfach ein Konsolenprogramm über das Fenster "Ausführen" ausführen, wird weiterhin die Conhost-Benutzeroberfläche angezeigt.
quelle
Ich würde empfehlen, entweder PowerShell zu installieren , eine Microsoft-Version eines Unix-Terminals, das für Skripte, Piping usw. vorgesehen ist, oder Microsoft Services für Unix (einst als SFU bekannt), ein vollständiges Posix-Subsystem für Windows, das direkt darauf ausgeführt wird Der Kernel (dh neben WIN32 und der Windows-API, nicht darüber. Wiederum, dh er ist nicht emuliert, es ist im Grunde Unix) und ermöglicht es Ihnen, alle (naja, die meisten) * nix-Technologien und -Shells zu verwenden. Es ist eine echte Schande, dass Services für Unix nicht mehr an Zugkraft gewonnen hat.
quelle
xterm
/bash
das mitgeliefert wurde ist großartig, ich benutze es die ganze Zeit. Ich habe immer noch Konsolenanwendungen, die für Win32 geschrieben sind und auf dem Standard-Konsolenhost ausgeführt werden, wenn ich sie nicht ausführebash
. Ich würde gerne wissen, ob es möglich ist, diese windws-Komponente zu ersetzen.