AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi mit der console interaktiv komunizieren
Thema durchsuchen
Ansicht
Themen-Optionen

mit der console interaktiv komunizieren

Offene Frage von "DracoBlue"
Ein Thema von Harry M. · begonnen am 1. Apr 2005 · letzter Beitrag vom 14. Feb 2008
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#1

mit der console interaktiv komunizieren

  Alt 1. Apr 2005, 12:38
ich habe zwar schon mal dies bezüglich im DF gepostet ( http://www.delphi-forum.de/viewtopic...425&highlight= ) aber da ist bis jetzt nix vernüftiges bei rausgekommen also dachte ich ich versuche es mal hier. vielleicht habe ja die leser in der DP einen brauchbaren lösungsvorschlag weil es mir eben auf den nägeln brennt wie man so schön sagt.

also ich habe folgends problem:
mein programm soll ein doscommand an die console übergeben. soweit ist das ja auch kein problem. code dazu findet man ja genug. nur leider ist das was man findet, ein klein wenig an meinem problem vorbei, weil der command ausgeführt wird und das ergebnis in einem memo ausgegeben wird und die console wird dann wieder geschlossen. und genau da sitzt mein problem. die console soll sich nicht schliessen, sondern auf weitere anweisungen warten, eben interaktiv komunizieren, mit meinem programm. bei dem code welchen man findet ist zum beispiel ein cd oder cd.. nicht möglich genausowenig kann man laufende prozeße unterbrechen. wenn ich jetzt zb. in die richtig console eingebe ping -t www.target.de werden fortlaufend singnal zum host gesendet. dies kann ich im normalfall mit strg+c unterbrechen. bei dem code den man findet geht das aber nicht bestenfalls wird das command ausgefüht und man kann es nicht mehr unterbrechen, schlechtenfalls hängt sich das programm ganz auf. je nach dem welchen code man von dem was man findet verwendet.

ich hoffe mir kann jemand helfen.
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: mit der console interaktiv komunizieren

  Alt 1. Apr 2005, 12:52
Kommunizier mit der Konsole über Pipes.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: mit der console interaktiv komunizieren

  Alt 1. Apr 2005, 13:07
Zitat von Luckie:
Kommunizier mit der Konsole über Pipes.
Hmm ich denkenicht das Ihm dieses Schlagwort "pipes" jetzt wiklcih weiterhilft...

Also ich hatte so ein Problem noch nie, ich weiß aber, das man ein CMD starten kann und auf Pipes umleiten, schau dir mal das hier an, vielleicht hilft das irgendwie:

Zitat von cmd /?:
Startet eine neue Instanz des Windows 2000-Befehlsinterpreters.

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
[[/S] [/C | /K] Zeichenfolge]

/C Führt den Befehl in der Zeichenfolge aus und endet dann.
/K Führt den Befehl in der Zeichenfolge aus und endet dann nicht.
/S Bestimmt Behandlung von Zeichenfolgen nach /C oder /K (siehe unten).
/Q Schaltet die Befehlsanzeige aus.
/D Deaktiviert die Ausführung von AutoRun-Befehlen von der Registrierung.
/A Ausgabe interner Befehle in eine Pipe oder Datei im ANSI-Format.
/U Ausgabe interner Befehle in eine Pipe oder Datei im UNICODE-Format.
/T:fg Legt die Hinter-/Vordergrundfarben fest (siehe auch COLOR /?).
/E:ON Aktiviert Befehlserweiterungen (siehe unten).
/E:OFF Deaktiviert Befehlserweiterungen (siehe unten).
/F:ON Aktiviert die Ergänzung von Datei- und Verzeichnisnamen.
/F:OFF Deaktiviert die Ergänzung von Datei- und Verzeichnisnamen.
/V:ON Aktiviert verzögerte Erweiterung von Variablen, ! wird dabei als
Trennzeichen verwendet. Zum Beispiel wird mit /V:ON die Variable
!var! zur Ausführungszeit erweitert. Im Gegensatz dazu wird bei
Verwendung der Syntax var die Variable zum Zeitpunkt der Eingabe
aufgelöst (Diese Werte können z.B. in einer FOR-Schleife
unterschiedlich sein!).
/V:OFF Deaktiviert die verzögerte Erweiterung von Variablen.

Hinweis: Mehrere Befehle, die durch das Befehlstrennzeichen "&&" getrennt
sind, werden als Zeichenfolge akzeptiert, wenn diese von Anführungsstrichen
umgeben sind. Aus Kompatibilitätsgründen hat /X die gleiche Funktion wie
/E:ON, /Y hat die gleiche Funktion wie /E:OFF, und /R hat die gleiche Funktion
wie /C. Alle anderen Optionen werden ignoriert.

Wird /C oder /K angegeben, wird der Rest der Befehlszeile nach der Option als
Befehlszeile verarbeitet, wobei folgende Logik zur Verarbeitung des doppelten
Anführungszeichens (") gilt:

1. Sind alle folgenden Bedingungen erfüllt, wird ein doppeltes
Anführungszeichen auf der Befehlszeile beibehalten:

- keine Option "/S"
- genau zwei doppelte Anführungszeichen
- keines der folgenden Zeichen zwischen den doppelten
Anführungszeichen: &<>()@^|
- es ist mindestens ein Leerzeichen zwischen den doppelten
Anführungszeichen
- die Zeichenfolge zwischen den doppelten Anführungszeichen ist der
Name einer ausführbaren Datei

2. Ist dies nicht der Fall, wird bei einem doppelten Anführungszeichen
als erstem Zeichen sowohl dieses, als auch das letzte doppelte
Anführungszeichen entfernt (und der Rest der Befehlszeile bei-
behalten).

Falls /D in der Befehlszeile NICHT angegeben wurde, sucht CMD.EXE
nach den folgenden Registrierungsvariablen. Sollten
eine oder beide vorhanden sein, werden sie zuerst ausgeführt.

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun

und/oder

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

Befehlserweiterungen sind standardmäßig aktiviert. Erweiterungen können unter
Verwendung der Option "/E:OFF" für einen bestimmten Aufruf des
Befehlsprozessors deaktiviert werden. Erweiterungen können auch für alle
Aufrufe des Befehlsprozessors deaktivieren werden, indem einer oder beide der
folgenden Werte in der Registrierung auf 0x1 oder 0x0 gesetzt werden (unter
Verwendung von REGEDT32.EXE):

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions

und/oder

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions

Die benutzerspezifischen Einstellungen (HKEY_CURRENT_USER) haben gegenüber den
Einstellungen für den Computer (HKEY_LOCAL_MACHINE) Vorrang.
Befehlszeilenoptionen haben Vorrang gegenüber den Registrierungseinstellungen.

Folgende Befehle wurden durch die Befehlserweiterungen geändert bzw. erweitert:

DEL oder ERASE
COLOR
CD oder CHDIR
MD oder MKDIR
PROMPT
PUSHD
POPD
SET
SETLOCAL
ENDLOCAL
IF
FOR
CALL
SHIFT
GOTO
START (umfasst auch Änderungen an externen Befehlsaufrufen)
ASSOC
FTYPE

Sie erhalten weitere Informationen, indem Sie den Befehlsnamen gefolgt von
"/?" eingeben.

Die verzögerte Umgebungsvariablenerweiterung ist standardmäßig NICHT aktiviert.
Die verzögerte Umgebungsvariablenerweiterung kann unter Verwendung der Option
"/V:ON" oder "/V:OFF" für einen bestimmten Aufruf von CMD.EXE
aktiviert bzw. deaktiviert werden. Die verzögerte Umgebungsvariablenerweiterung
kann auch für alle Aufrufe des Befehlsprozessors deaktiviert werden, indem
einer oder beide der folgenden Werte in der Registrierung auf 0x1 oder 0x0
gesetzt werden (unter Verwendung von REGEDT32.EXE):

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion

und/oder

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion

Die benutzerspezifischen Einstellungen (HKEY_CURRENT_USER) haben gegenüber den
Einstellungen für den Computer (HKEY_LOCAL_MACHINE) Vorrang.
Befehlszeilenoptionen haben Vorrang gegenüber den Registrierungseinstellungen.

Bei aktivierter verzögerter Umgebungsvariablenerweiterung kann das
Ausrufezeichen dazu verwendet werden, den Wert einer Umgebungsvariable zur
Laufzeit zu ersetzen.

Die Namenergänzung für Dateien und Verzeichnisse ist standardmäßig NICHT
aktiviert. Sie kann unter Verwendung der Option "/F:ON" oder "/F:OFF" für einen
bestimmten Aufruf von CMD.EXE aktiviert bzw. deaktiviert werden. Die
Namenergänzung kann auch für alle Aufrufe von CMD.EXE aktiviert werden,
indem einer der folgenden Werte in der Registrierung auf den hexadezimalen Wert
eines Steuerzeichens (z.B. "0x4" für STRG+D und "0x6" für STRG+F) für eine der
beiden Funktionen gesetzt wird:

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar

und/oder

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar

Die benutzerspezifischen Einstellungen (HKEY_CURRENT_USER) haben gegenüber den
Einstellungen für den Computer (HKEY_LOCAL_MACHINE) Vorrang.
Befehlszeilenoptionen haben Vorrang gegenüber den Registrierungseinstellungen.

Wird die Namenergänzung mit der Option "/F:ON" aktiviert, werden die beiden
Steuerzeichen STRG+D für die Verzeichnisnamenergänzung und STRG+F für die
Dateinamenergänzung verwendet. Um eine der beiden Namenergänzungsfunktionen
in der Registrierung zu deaktivieren, verwenden Sie den Wert für ein
Leerzeichen (0x20), welches kein zulässiges Steuerzeichen darstellt.

Die Namenergänzung wird durch Eingabe eines der beiden Steuerzeichen
ausgeführt. Sie fügt an die Pfadangabe links des Cursors einen Platzhalter an,
wenn dieser nicht bereits vorhanden ist, und erzeugt eine Liste der Pfade, die
übereinstimmen. Anschließend wird der erste Pfad angezeigt. Wurde keine
Pfadübereinstimmung gefunden, ertönt lediglich ein Signalton. Durch wieder-
holte Eingabe des Steuerzeichens werden nacheinander die verschiedenen
Pfadeinträge der Liste angezeigt. Wird zusätzlich die Umschalttaste gedrückt,
werden diese in umgekehrter Reihenfolge angezeigt. Bearbeiten Sie die Zeile,
wird die Liste verworfen und eine neue erstellt. Dies geschieht auch, wenn Sie
zwischen den beiden Namenergänzungsfunktionen umschalten. Der einzige
Unterschied zwischen den beiden Funktionen ist, dass die Dateinamenergänzung
sowohl Dateien als auch Verzeichnisse, die Verzeichnisergänzung jedoch nur
Verzeichnisse auflistet. Wird die Namenergänzung zusammen mit einem der
Verzeichnisbefehle (CD, MD oder RD) verwendet, wird Verzeichnisergänzung
angenommen.

Die Namenergänzung funktioniert auch mit Namen, die Leerzeichen oder
Sonderzeichen enthalten, wenn der Name in doppelte Anführungszeichen
eingeschlossen wird. Wenn Sie den Cursor in einer Zeile nach links bewegen
und die Namenergänzung an dieser Stelle ausführen, wird der Teil der Zeile,
der sich rechts des Cursors befindet, ignoriert.

Die folgenden Sonderzeichen erfordern Anführungszeichen:
<Leerzeichen>
&()[]{}^=;!'+,`~
Wenn du es hinbekommen hast würd ich gern erfahren, wie du das gemacht hast!

Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#4

Re: mit der console interaktiv komunizieren

  Alt 1. Apr 2005, 13:10
das es an den "Pipes" liegen könnte, konnte ich mir schon denken nur leider versteh ich nicht viel davon. hast du da nicht ein code beispiel für mich (unfähigen api programmierer)?

das was Kedariodakon geschrieben hat hilft mir nicht wirklich weiter, denke ich weil ich ja nicht die "echte" console benutze sondern alles über meine programm laufen lass in und output
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: mit der console interaktiv komunizieren

  Alt 1. Apr 2005, 13:18
Zitat von Harry M.:
das was Kedariodakon geschrieben hat hilft mir nicht wirklich weiter, denke ich weil ich ja nicht die "echte" console benutze sondern alles über meine programm laufen lass in und output
Hmm meiner Meinung nach, mußt du eine neue CMD-Instanz öffnen und diese natürlich an deine regestrierten Pipes binden, wie solls sonst gehen?

Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#6

Re: mit der console interaktiv komunizieren

  Alt 1. Apr 2005, 13:21
Zitat von Kedariodakon:
wie solls sonst gehen?
ich habe keine ahnung aber du hast mich auf die idee gebacht mal den parameter /k zu übergeben ich bin grad am testen...

doch mit paramter /k gehts !!! den code stelle ich gleich noch vor wo bei ich dazusagen muß, das die eigendliche funktion aus dem delphi-treff ist...
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#7

Re: mit der console interaktiv komunizieren

  Alt 1. Apr 2005, 13:26
Hallo

Hm, was ist eine regestrierten Pipe und wie greifst Du daruf zu (Codebeispiel). Wie kann man eigentlich auf eine Eingabaufforderung reagieren. Oder wie bekommt man überhaupt mit, das ein Dos Programm auf eine Eingabe wartet?

// Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#8

Re: mit der console interaktiv komunizieren

  Alt 1. Apr 2005, 13:28
ich doch noch mal was berichtigen.... es wird nur 1x ein verzeichniswechsel aus geführt wenn ich zweimal cd.. cd.. mache gehts nicht. da ich aber insgesamt 4 code beispiele habe werde ich jetzt mal alle durchtesten...

Zitat von mschaefer:
Hallo

Hm, was ist eine regestrierten Pipe und wie greifst Du daruf zu (Codebeispiel). Wie kann man eigentlich auf eine Eingabaufforderung reagieren. Oder wie bekommt man überhaupt mit, das ein Dos Programm auf eine Eingabe wartet?

// Martin
folge mal dem link im ersten posting! da findest du zwei weitere
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: mit der console interaktiv komunizieren

  Alt 1. Apr 2005, 13:31
Naja die Konsole hat ja nen Output als pipe, der ja nur ausgegeben wird, war irgendwie sowas wie STDOut und ERROut, da muß es auch ein *In* geben
Nur brauch man die Pipe von der CMD die man gestartet hat ^^

Einzelne befehle kann man sich ja auch auf pips, bzw. datein ausgeben lassen:

dir c:\gibtsnet.haumichtod 1>>STDOut.txt 2>>ErrOut.txt

Normale Ausgabe in STDOut.txt und ERRor Ausgabe in ErrOut.txt...

Bye


Edit zur not die gedrückten Tasten dem CMD zusenden ^^
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#10

Re: mit der console interaktiv komunizieren

  Alt 1. Apr 2005, 13:39
also wenn ich eingebe "cd.." und lasse mir dann mit "dir" den verzeichnisinhalt anzeigen zeigt er zwar an da er das verzeichnis gewechselt hat aber dir liefert immer noch den alte verzeichnis inhalt
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz