DOS Befehle ausführen/rückantworten
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... :roll: vielen dank KoRn117 |
Re: DOS Befehle ausführen/rückantworten
vielleicht hilft es:
mit z.b.
Code:
kannst du das was normal in der dosbox stehen würde in eine datei ausgeben lassen
dir >> datei.txt
|
Re: DOS Befehle ausführen/rückantworten
Probier's mal so:
{
Delphi-Quellcode:
Falls das noch nicht in der Code-Library ist, und es geht, kann ich's dann reingeben.
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; |
Re: DOS Befehle ausführen/rückantworten
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 |
Re: DOS Befehle ausführen/rückantworten
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:
|
Re: DOS Befehle ausführen/rückantworten
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
|
Re: DOS Befehle ausführen/rückantworten
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. |
Re: DOS Befehle ausführen/rückantworten
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... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:01 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