AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein DOS Befehle ausführen/rückantworten
Thema durchsuchen
Ansicht
Themen-Optionen

DOS Befehle ausführen/rückantworten

Ein Thema von KoRn117 · begonnen am 15. Dez 2004 · letzter Beitrag vom 20. Dez 2004
Antwort Antwort
KoRn117

Registriert seit: 24. Sep 2003
Ort: Hessen
50 Beiträge
 
Delphi 7 Enterprise
 
#1

DOS Befehle ausführen/rückantworten

  Alt 15. Dez 2004, 22:19
Hi leute!!!

ich habe ein minimini-prog geschrieben, welches einen dos-befehl ausführt.

alles kein prob, doch nun möchte ich von dieser dos-box eine rückmeldung bekommen, dass der befehl ausgeführt wurde blabalbal - ich meine keinen errorcode,oder so...

oder kann man irgendwie den gesamten text aus einer dosbox bekommen?!?


hab gar keinen richtigen ansatz...

vielen dank

KoRn117
  Mit Zitat antworten Zitat
StefanDP

Registriert seit: 11. Apr 2004
294 Beiträge
 
#2

Re: DOS Befehle ausführen/rückantworten

  Alt 15. Dez 2004, 22:28
vielleicht hilft es:
mit z.b.
Code:
dir >> datei.txt
kannst du das was normal in der dosbox stehen würde in eine datei ausgeben lassen
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: DOS Befehle ausführen/rückantworten

  Alt 15. Dez 2004, 22:28
Probier's mal so:

{
Delphi-Quellcode:
procedure TForm1.CaptureDosCmd(command:String; OutputMemo:TMemo);
const
  CaptureBufferSize = 2500;
var
  SecAttrib : TSecurityAttributes;
  ReadPipe,writePipe: THandle;
  Startup : TStartUpInfo;
  ProcessInfo : TProcessInformation;
  CaptureBuffer : Pchar;
  BytesRead : DWord;
  WaitHandle : DWord;

begin
  OutPutMemo.Lines.clear;
  //OutputMemo.lines.add('executing "' + command + '"');
  With SecAttrib do
  begin
    nlength := SizeOf(TSecurityAttributes);
    binherithandle := true;
    lpsecuritydescriptor := nil;
  end;

  if Createpipe (ReadPipe, writePipe, @SecAttrib, 0) then
  begin
    CaptureBuffer := AllocMem(CaptureBufferSize + 1);
    FillChar(Startup,Sizeof(Startup),#0);
    Startup.cb := SizeOf(Startup);
    Startup.hStdOutput := writePipe;
    Startup.hStdInput := ReadPipe;
    Startup.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
    Startup.wShowWindow := SW_HIDE;
    if CreateProcess(nil, PChar(command), @SecAttrib, @SecAttrib, true, NORMAL_PRIORITY_CLASS, nil, nil, Startup, ProcessInfo) then
    begin
      repeat
        WaitHandle := WaitForSingleObject( ProcessInfo.hProcess,100);
        Application.ProcessMessages;
      until (WaitHandle <> WAIT_TIMEOUT) or application.terminated;

      if not application.terminated then
      Repeat
        BytesRead := 0;
        ReadFile(ReadPipe,CaptureBuffer[0],CaptureBufferSize,BytesRead,nil);
        CaptureBuffer[BytesRead]:= #0;
        OemToAnsi(CaptureBuffer,CaptureBuffer);
        OutputMemo.Text := OutputMemo.Text+String(CaptureBuffer);
        Application.ProcessMessages;
      until (BytesRead < CaptureBufferSize);
    end
    else OutPutMemo.lines.add('Operation wurde abgebrochen!');

    FreeMem(CaptureBuffer);
    CloseHandle(ProcessInfo.hProcess);
    CloseHandle(ProcessInfo.hThread);
    CloseHandle(ReadPipe);
    CloseHandle(writePipe);
  end
  else OutPutMemo.lines.add('Konnte Kommando nicht starten, Fehler: #'+ inttostr(getlasterror));
end;
Falls das noch nicht in der Code-Library ist, und es geht, kann ich's dann reingeben.
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#4

Re: DOS Befehle ausführen/rückantworten

  Alt 15. Dez 2004, 22:39
Vorab, Matzes Hinweis geht IMHO in die richtige Richtung.
Allerdings gibt's im praktischen Einsatz unter verschiedenen Windows-Versionen diverse Probleme. Bei einem Test-Programm (Konsole-Screenshot im RTF-Format) durfte ich feststellen, dass man nicht mehr als 4K gleichzeitig aus dem Screenbuffer lesen sollte. Ganz davon abgesehen, dass die Ausdehnung des Screenbuffers extreme Ausmaße annehmen können... die Funktion kann also ziemlich komplex werden und die Tests unter den unterstützten Windows-Versionen können reichlich frustrierend werden...

Gruss Nico
  Mit Zitat antworten Zitat
KoRn117

Registriert seit: 24. Sep 2003
Ort: Hessen
50 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: DOS Befehle ausführen/rückantworten

  Alt 15. Dez 2004, 22:53
der code sieht nicht schlecht aus, nur er funktioniert noch nciht perfekt, aber erstmal danke dafür!!!!!!!!!!!!!!!!!

das hilft mir schon sehr viel weiter

er gibt in das memo allerdings dieses aus:

Zitat:
Unable to get console input mode - 0x80070006
Das Handle ist ungültig.
wie kommt es dazu, dass er das handle nicht bekommt?
  Mit Zitat antworten Zitat
KoRn117

Registriert seit: 24. Sep 2003
Ort: Hessen
50 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: DOS Befehle ausführen/rückantworten

  Alt 15. Dez 2004, 22:56
das mit den win-versionen ist ja ein mist - bin aber sowieso schon eher negativ an die sache herangegangen, weil ic gerade xp sp2 drauf habe
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#7

Re: DOS Befehle ausführen/rückantworten

  Alt 16. Dez 2004, 08:11
Du kannst ja mal TDosCommand ausprobieren.

Irgendwie scheint es auch Unterschiede bei der Bildschirmausgabe zu geben. Bei manchen Programmen kann man die Ausgabe ganz einfach abfangen, bei anderen kommt nichts außer leeren Strings.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
KoRn117

Registriert seit: 24. Sep 2003
Ort: Hessen
50 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: DOS Befehle ausführen/rückantworten

  Alt 20. Dez 2004, 08:57
das mit der dos komponente...hat da jemand eine gescheite anleitung zu / was welche befehe machen?

ich hatte die mir schon mal runtergeladen, aber da fehlten einfach einige informationen, wie man die benutzt...
  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 05:05 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