AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Konsole in Memo anzeigen.

Offene Frage von "skyquaker"
Ein Thema von skyquaker · begonnen am 24. Apr 2007 · letzter Beitrag vom 24. Apr 2007
Antwort Antwort
skyquaker

Registriert seit: 14. Sep 2006
96 Beiträge
 
Delphi 7 Professional
 
#1

Konsole in Memo anzeigen.

  Alt 24. Apr 2007, 15:53
Ich weißt nicht ob meine Frage hier richtig ist. Ich stell sie jetzt einfach mal.

In eine Memobox in meinem Programm soll ein Konsolenprogramm (z.B. die CMD) ausgegeben werden.
Das funktioniert auch sehr gut, mit diesem Snippet:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject) ;

  procedure RunDosInMemo(DosApp:String;AMemo:TMemo) ;
  const
     ReadBuffer = 2400;
  var
   Security : TSecurityAttributes;
   ReadPipe,WritePipe : THandle;
   start : TStartUpInfo;
   ProcessInfo : TProcessInformation;
   Buffer : Pchar;
   BytesRead : DWord;
   Apprunning : DWord;
  begin
   With Security do begin
    nlength := SizeOf(TSecurityAttributes) ;
    binherithandle := true;
    lpsecuritydescriptor := nil;
   end;
   if Createpipe (ReadPipe, WritePipe,
                  @Security, 0) then begin
    Buffer := AllocMem(ReadBuffer + 1) ;
    FillChar(Start,Sizeof(Start),#0) ;
    start.cb := SizeOf(start) ;
    start.hStdOutput := WritePipe;
    start.hStdInput := ReadPipe;
    start.dwFlags := STARTF_USESTDHANDLES +
                         STARTF_USESHOWWINDOW;
    start.wShowWindow := SW_HIDE;

    if CreateProcess(nil,
           PChar(DosApp),
           @Security,
           @Security,
           true,
           NORMAL_PRIORITY_CLASS,
           nil,
           nil,
           start,
           ProcessInfo)
    then
    begin
     repeat
      Apprunning := WaitForSingleObject
                   (ProcessInfo.hProcess,100) ;
      Application.ProcessMessages;
     until (Apprunning <> WAIT_TIMEOUT) ;
      Repeat
        BytesRead := 0;
        ReadFile(ReadPipe,Buffer[0],
ReadBuffer,BytesRead,nil) ;
        Buffer[BytesRead]:= #0;
        OemToAnsi(Buffer,Buffer) ;
        AMemo.Text := AMemo.text + String(Buffer) ;
      until (BytesRead < ReadBuffer) ;
   end;
   FreeMem(Buffer) ;
   CloseHandle(ProcessInfo.hProcess) ;
   CloseHandle(ProcessInfo.hThread) ;
   CloseHandle(ReadPipe) ;
   CloseHandle(WritePipe) ;
   end;
  end;

  begin {button 1 code}
    RunDosInMemo('cmd.exe',Memo1) ;
  end;
Jetzt möchte ich aber, dass diese Konsole im Hintergrund geöffnet bleibt und Befehle annimmt (entweder durch eine Textbox oder, noch besser, direkt aus der Memo). Der Inhalt soll aber nachwievor in meiner Memo ausgegeben werden.

Ist das möglich? (Ich nehms mal stark an) Wenn ja, wie?

Ich bin für alle Hilfe dankbar.

EDIT: Es würde auch schon reichen zu wissen wie man die Konsole offen hält. Dann könnte ich die Befehle ja als Keystrokes übergeben.
  Mit Zitat antworten Zitat
netphoenix86
(Gast)

n/a Beiträge
 
#2

Re: Konsole in Memo anzeigen.

  Alt 24. Apr 2007, 16:55
Ich glaub das ging auch mit der Komponente "TDOSMemo": TDosMemo
Kannst dir ja mal angucken
  Mit Zitat antworten Zitat
skyquaker

Registriert seit: 14. Sep 2006
96 Beiträge
 
Delphi 7 Professional
 
#3

Re: Konsole in Memo anzeigen.

  Alt 24. Apr 2007, 20:15
Ich habs mir nur kurz angeschaut, ich meine aber, dass es im Grunde das Selbe ist, was ich oben auch habe und somit keine Lösung meines Problems.
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#4

Re: Konsole in Memo anzeigen.

  Alt 24. Apr 2007, 20:28
Wahrscheinlich eher DosCommand... läuft in nem extra Thread. Dadurch läuft es schonmal im Hintergrund, ob man dem auch noch ohne weitere Manipulation Eingaben zu späterer Zeit verpassen kann, weiss ich leider nicht. Aber weder Dein Beispiel in einen Thread auslagern noch dort etwas in die Input-Pipe zu schreiben dürfte allzu schwer zu ergänzen sein.
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:35 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