Festlegen von cmd mit Standardbefehl und benutzerdefinierter Meldung

1716
gpuguy

Klicken Sie in einer Winform-Anwendung auf die Schaltfläche "cmd.exe" (using system ("cmd.exe");).

 Microsoft Windows XP [Version 6.1.7601] (C) Copyright 1985-2001 Microsoft Corp.  C: A\Documents\Visual Studio 2010\Projects\WinformTest\WinformTest>  

Was ich möchte ist, wenn ein Benutzer auf die Schaltfläche klickt, die cmd.exe mit einem Standardbefehl und einer Meldung wie der folgenden geöffnet wird:

 Please change command options and press enter to get started experimenting  C: A\Documents\Visual Studio 2010\Projects\WinformTest\WinformTest> reduction -x 33554432 -i  

Beachten Sie einen neuen Befehl und eine Nachricht ist bereits vorhanden.

Kann mir jemand sagen, wie ich das erreichen soll?

AKTUALISIEREN

 cmd /k echo Please change command options and press enter to get started  experimenting & echo reduction -x 33554432 -i 

Dies zeigt die engste Lösung, aber hier muss ich die Befehle jedes Mal einstellen, wenn ich die cmd öffne. Ist es möglich, den Befehl einmal festzulegen und die Einstellung zu speichern, so dass beim nächsten Öffnen des CMD die Meldung angezeigt wird? Oder ist es möglich, diese Befehlsoptionen / Schalter zu übergeben, wenn ich sie in meiner Anwendung mit system ("cmd.exe") öffne, so dass zur Laufzeit diese Einstellung für die Meldung erfolgt?

Gelöst

 system("cmd.exe /k echo Please change command options and press enter to get started  experimenting & echo reduction -x 33554432 -i" ); 

Dies spiegelt jedoch Maeesage wider, aber der Befehl kommt nicht an der Eingabeaufforderung.

1

2 Antworten auf die Frage

3
Julian Knight

Eine Möglichkeit, dies zu tun, besteht darin, die wenig bekannte Autorun-Funktion des Befehlsprozessors zu nutzen. Ich erinnerte mich daran, dass dies möglich war, also gab es bei einer Google-Suche nur einen Link zu meinem eigenen Blog! Ich hatte das Schreiben vergessen:

http://it.knightnet.org.uk/2009/05/how-to-show-a-message-of-the-day-motd-at-the-windows-command-prompt.html

Sie können je nach Bedarf einen Autorun-Befehl über die Registrierung an einem dieser Orte festlegen:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor  HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor 

Ich verwende folgende Einstellung:

%USERPROFILE%\.profile.cmd 

Die cmd-Datei wird jedes Mal ausgeführt, wenn ich eine Befehlszeile starte. Im Autorun-Befehl können Sie einfach die Ausgabe einer Textdatei anzeigen. Sichern Sie in Ihrer App etwas Text in die Textdatei und starten Sie die Befehlszeile. Sie sollten die Textdatei dann leeren (nicht löschen), damit die Aufforderung nicht angezeigt wird.

Sie können bei Bedarf weitere Informationen hinzufügen, sodass die Textdatei nur für Ihre App angezeigt wird.

Natürlich können Sie die Registrierung auch direkt von Ihrer App aus ändern.

2
martineau

cmd.exeakzeptiert einen optionalen /kParameter, mit dem Sie einen Befehl ausführen können, wenn er gestartet wird. Um dies zu verwenden, um etwas an das heran zu bringen, was Sie möchten, scheint Folgendes in der Nähe:

cmd /k echo Please change command options and press enter to get started experimenting & echo reduction -x 33554432 -i 

was dazu führt, dass sich ein Fenster öffnet und anzeigt:

enter image description here

Wie Sie sehen, können Sie mehrere Befehle ausführen, indem Sie jeweils ein "&" einfügen.

Wenn Sie etwas komplexer machen möchten, können Sie ein separates .cmd / .bat-Skript ausführen lassen, um etwas zu erreichen, über das Julian Knight in seiner Antwort spricht, ohne jedoch Änderungen in der Registrierung vornehmen zu müssen.

Aber hier muss ich die Befehle jedes Mal einstellen, wenn ich die cmd öffne. Ist es möglich, den Befehl einmal festzulegen und die Einstellung zu speichern, so dass beim nächsten Öffnen des CMD die Meldung angezeigt wird? Oder ist es möglich, diese Befehlsschalter zu übergeben, wenn ich sie in meiner Anwendung mithilfe von system ("cmd.exe") öffne, sodass zur Laufzeit die Einstellung für die Meldung erfolgt? gpuguy vor 11 Jahren 0
Das hat funktioniert: system ("cmd.exe / k echo Bitte ändern Sie die Befehlsoptionen und drücken Sie die Eingabetaste, um mit dem Experimentieren und der Echo-Reduzierung zu beginnen -x 33554432 -i"); gpuguy vor 11 Jahren 0
@gpuguy: Dein Kommentar, dass es funktioniert hat, war das, was ich in meiner Antwort vorgeschlagen habe - sorry, denn das war anscheinend nicht klar genug. martineau vor 11 Jahren 0
Entschuldigung für jede Verwirrung gpuguy vor 11 Jahren 0
@qpuguy: Möglicherweise können Sie [SendKeys ()] (http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx) verwenden, um den Tastaturpuffer von cmd vorab zu laden. martineau vor 11 Jahren 0