Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DOS text speichern ? (https://www.delphipraxis.net/78872-dos-text-speichern.html)

Blackheart 12. Okt 2006 12:50


DOS text speichern ?
 
Hallo Leute !
Hat jemand von Euch eine Ahnung wie man an den Text der Dos Box
herrankommt die man mit Shellexecute aufgerufen hatt um Ihn als Textdatei zu speichern oder im eigenen Programm anzuzeigen.
Also Ich öffne eine Datei mit einem Dos Prog diese wird mit dem Program bearbeitet und das Program gibt dann eventuelle Fehler als Text aus, diesn hätte Ich gern als Textdatei.
Ich hoffe Ich hab mich einigermaßen verständlich ausgedrückt.
Blackheart

Klaus01 12. Okt 2006 13:11

Re: DOS text speichern ?
 
Hallo,

vielleicht hilft Dir ja das hier weiter- > http://groups.google.de/group/borlan...825689c189adaf

Habe es selber nicht getestet.

Ein anderer Weg wäre noch, die Ausgabe in eine Datei zu schreiben
und diese dann von Deiner Aplikation wieder einzulesen.

Grüße
Klaus

Blackheart 12. Okt 2006 13:58

Re: DOS text speichern ?
 
@ Klaus01 danke für den Link aber mit der function klappt es leider nicht.
Naja vieleicht find Ich ja noch was.
Blackheart

TurboMartin 12. Okt 2006 13:59

Re: DOS text speichern ?
 
Delphi-Quellcode:
function CreateConsoleScreenBuffer; external kernel32 name 'CreateConsoleScreenBuffer';
function FillConsoleOutputAttribute; external kernel32 name 'FillConsoleOutputAttribute';
function FillConsoleOutputCharacter; external kernel32 name 'FillConsoleOutputCharacterA';
function FillConsoleOutputCharacterA; external kernel32 name 'FillConsoleOutputCharacterA';
function FillConsoleOutputCharacterW; external kernel32 name 'FillConsoleOutputCharacterW';
function GenerateConsoleCtrlEvent; external kernel32 name 'GenerateConsoleCtrlEvent';
function GetConsoleCP; external kernel32 name 'GetConsoleCP';
function GetConsoleCursorInfo; external kernel32 name 'GetConsoleCursorInfo';
function GetConsoleMode; external kernel32 name 'GetConsoleMode';
function GetConsoleOutputCP; external kernel32 name 'GetConsoleOutputCP';
function GetConsoleScreenBufferInfo; external kernel32 name 'GetConsoleScreenBufferInfo';
function GetConsoleTitle; external kernel32 name 'GetConsoleTitleA';
function GetConsoleTitleA; external kernel32 name 'GetConsoleTitleA';
function GetConsoleTitleW; external kernel32 name 'GetConsoleTitleW';
function PeekConsoleInput; external kernel32 name 'PeekConsoleInputA';
function PeekConsoleInputA; external kernel32 name 'PeekConsoleInputA';
function PeekConsoleInputW; external kernel32 name 'PeekConsoleInputW';
function ReadConsole; external kernel32 name 'ReadConsoleA';
function ReadConsoleA; external kernel32 name 'ReadConsoleA';
function ReadConsoleW; external kernel32 name 'ReadConsoleW';
function ReadConsoleInput; external kernel32 name 'ReadConsoleInputA';
function ReadConsoleInputA; external kernel32 name 'ReadConsoleInputA';
function ReadConsoleInputW; external kernel32 name 'ReadConsoleInputW';
function ReadConsoleOutput; external kernel32 name 'ReadConsoleOutputA';
function ReadConsoleOutputA; external kernel32 name 'ReadConsoleOutputA';
function ReadConsoleOutputW; external kernel32 name 'ReadConsoleOutputW';
function ReadConsoleOutputAttribute; external kernel32 name 'ReadConsoleOutputAttribute';
function ReadConsoleOutputCharacter; external kernel32 name 'ReadConsoleOutputCharacterA';
function ReadConsoleOutputCharacterA; external kernel32 name 'ReadConsoleOutputCharacterA';
function ReadConsoleOutputCharacterW; external kernel32 name 'ReadConsoleOutputCharacterW';
function ScrollConsoleScreenBuffer; external kernel32 name 'ScrollConsoleScreenBufferA';
function ScrollConsoleScreenBufferA; external kernel32 name 'ScrollConsoleScreenBufferA';
function ScrollConsoleScreenBufferW; external kernel32 name 'ScrollConsoleScreenBufferW';
function SetConsoleActiveScreenBuffer; external kernel32 name 'SetConsoleActiveScreenBuffer';
function SetConsoleCP; external kernel32 name 'SetConsoleCP';
function SetConsoleCtrlHandler; external kernel32 name 'SetConsoleCtrlHandler';
function SetConsoleCursorInfo; external kernel32 name 'SetConsoleCursorInfo';
function SetConsoleCursorPosition; external kernel32 name 'SetConsoleCursorPosition';
function SetConsoleMode; external kernel32 name 'SetConsoleMode';
function SetConsoleOutputCP; external kernel32 name 'SetConsoleOutputCP';
function SetConsoleScreenBufferSize; external kernel32 name 'SetConsoleScreenBufferSize';
function SetConsoleTextAttribute; external kernel32 name 'SetConsoleTextAttribute';
function SetConsoleTitle; external kernel32 name 'SetConsoleTitleA';
function SetConsoleTitleA; external kernel32 name 'SetConsoleTitleA';
function SetConsoleTitleW; external kernel32 name 'SetConsoleTitleW';
function SetConsoleWindowInfo; external kernel32 name 'SetConsoleWindowInfo';
function WriteConsole; external kernel32 name 'WriteConsoleA';
function WriteConsoleA; external kernel32 name 'WriteConsoleA';
function WriteConsoleW; external kernel32 name 'WriteConsoleW';
function WriteConsoleInput; external kernel32 name 'WriteConsoleInputA';
function WriteConsoleInputA; external kernel32 name 'WriteConsoleInputA';
function WriteConsoleInputW; external kernel32 name 'WriteConsoleInputW';
function WriteConsoleOutput; external kernel32 name 'WriteConsoleOutputA';
function WriteConsoleOutputA; external kernel32 name 'WriteConsoleOutputA';
function WriteConsoleOutputW; external kernel32 name 'WriteConsoleOutputW';
function WriteConsoleOutputAttribute; external kernel32 name 'WriteConsoleOutputAttribute';
function WriteConsoleOutputCharacter; external kernel32 name 'WriteConsoleOutputCharacterA';
function WriteConsoleOutputCharacterA; external kernel32 name 'WriteConsoleOutputCharacterA';
function WriteConsoleOutputCharacterW; external kernel32 name 'WriteConsoleOutputCharacterW';

function QueryDosDevice; external kernel32 name 'QueryDosDeviceA';
function QueryDosDeviceA; external kernel32 name 'QueryDosDeviceA';
function QueryDosDeviceW; external kernel32 name 'QueryDosDeviceW';
function DefineDosDevice; external kernel32 name 'DefineDosDeviceA';
function DefineDosDeviceA; external kernel32 name 'DefineDosDeviceA';
function DefineDosDeviceW; external kernel32 name 'DefineDosDeviceW';
Irgendwas davon müsste dabeisein, was du brauchst.
Ist aus der Windows.pas. :mrgreen:

r2c2 12. Okt 2006 14:04

Re: DOS text speichern ?
 
versuch mal das: http://www.dsdt.info/tipps/?id=637

oder schon erwähnt aber wohl die einfachste Mehode:
Delphi-Quellcode:
  ShellExecute(Application.Handle, 'open', 'cmd', '/C Prog /param > C:\Temp\Test', SW_HIDE);
  Memo1.Lines.LoadFromFile('C:\Temp\Test');
mfg

Christian

Klaus01 12. Okt 2006 14:06

Re: DOS text speichern ?
 
Zitat:

Zitat von Blackheart
@ Klaus01 danke für den Link aber mit der function klappt es leider nicht.
Naja vieleicht find Ich ja noch was.
Blackheart

bei mir tut es aber:


Delphi-Quellcode:
function ExecAndGetConsoleOutput (const CommandLine,Parameter : string;
  var Output : TStringList) : boolean;
var
  Sa           : TSecurityAttributes;
  StartInfo    : TStartupInfo;
  ProcInfo     : TProcessInformation;
  StdOutFile,
  AppProc,
  AppThread    : LongWord;
  RootDir,
  WorkDir,
  StdOutFn     : string;
begin
  Result := FileExists(ExtractFilePath (CommandLine) +
    ExtractFileName (CommandLine));
  if Result then
  begin
    StdOutFile := INVALID_HANDLE_VALUE;
    AppProc := INVALID_HANDLE_VALUE;
    AppThread := INVALID_HANDLE_VALUE;


    try
      RootDir := ExtractFilePath (ParamStr(0));
      WorkDir := ExtractFilePath (CommandLine);


      if not (FileSearch (ExtractFileName (CommandLine), WorkDir) <> '') then
        WorkDir := RootDir;


      FillChar (Sa, SizeOf(Sa), #0);
      Sa.nLength := SizeOf (Sa);
      Sa.lpSecurityDescriptor := nil;
      Sa.bInheritHandle := TRUE;


      StdOutFn := RootDir + '_tmpoutp.tmp';
      StdOutFile := CreateFile (PChar(StdOutFn), GENERIC_READ or GENERIC_WRITE,
        FILE_SHARE_READ or FILE_SHARE_WRITE, @Sa, CREATE_ALWAYS,
        FILE_ATTRIBUTE_TEMPORARY or FILE_FLAG_WRITE_THROUGH, 0);


      if StdOutFile <> INVALID_HANDLE_VALUE then
      begin
        FillChar (StartInfo, SizeOf(StartInfo), #0);
        with StartInfo do
        begin
          cb := SizeOf (StartInfo);
          dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
          wShowWindow := SW_HIDE;
          hStdInput := GetStdHandle (STD_INPUT_HANDLE);
          hStdError := StdOutFile;
          hStdOutput := stdOutFile;
        end;


        if CreateProcess (nil, PChar(CommandLine+' '+Parameter), nil, nil, TRUE, 0, nil,
          PChar(WorkDir), StartInfo, ProcInfo) then
        begin
          WaitForSingleObject (ProcInfo.hProcess, INFINITE);
          AppProc := ProcInfo.hProcess;
          AppThread := ProcInfo.hThread;


          CloseHandle (StdOutFile);
          StdOutFile := INVALID_HANDLE_VALUE;


          Output.Clear;
          Output.LoadFromFile (StdOutFn);
        end;
      end;
    finally
      if StdOutFile <> INVALID_HANDLE_VALUE then
        CloseHandle (StdOutFile);
      if AppProc <> INVALID_HANDLE_VALUE then
        CloseHandle (AppProc);
      if AppThread <> INVALID_HANDLE_VALUE then
        CloseHandle (AppThread);


      if FileExists (StdOutFn) then
        SysUtils.DeleteFile (StdOutFn);
    end;
  end;
end;




procedure TForm1.Button1Click(Sender: TObject);
var
  sl:TStringList;
begin
  sl:=TStringList.create;
  ExecAndGetConsoleOutput('c:\winnt\system32\cmd.exe','/C dir c:',sl);
  Memo1.Lines:=sl;
  sl.Free;
end;
Grüße
Klaus

TurboMartin 12. Okt 2006 14:12

Re: DOS text speichern ?
 
Hab grad nochwas gefunden:
MSDN-Library

Blackheart 12. Okt 2006 15:07

Re: DOS text speichern ?
 
Hallo Leute
Danke für die vielen Antworten jetzt haut es soweit hin.
In der Datei steht zwar nicht genau das was im Prog steht aber naja.
Hab jetzt die function eingesetzt, hatte beim probieren den falschen Pfad angegeben deswegen hatte Ich immer Fehler beim Lesen.

Das ging leider nicht

ShellExecute(Application.Handle, 'open', 'c:\Programme\Borland\Delphi7\Bin\Brcc32.exe', '/C Prog /param > C:\Temp\Test', SW_HIDE);
Memo1.Lines.LoadFromFile('C:\Temp\Test');

Inkomplatibel AnsiChar und Integer

Dank an Alle Blackheart.

r2c2 12. Okt 2006 15:43

Re: DOS text speichern ?
 
Zitat:

Zitat von Blackheart
ShellExecute(Application.Handle, 'open', 'c:\Programme\Borland\Delphi7\Bin\Brcc32.exe', '/C Prog /param > C:\Temp\Test', SW_HIDE);
Memo1.Lines.LoadFromFile('C:\Temp\Test');

Inkomplatibel AnsiChar und Integer

Jo. Es fehlt n Parameter. Ich hab auch nicht behauptet, dass das Copy'n'Paste fähig is...

mfg

Christian

Blackheart 12. Okt 2006 16:10

Re: DOS text speichern ?
 
Hab Ich auch nicht gesagt, aber er schreibt auch nicht die Datei
Blackheart
Delphi-Quellcode:
ShellExecute(Application.Handle, 'open', 'C:\Programme\Borland\Delphi7\Bin\Brcc32.exe', '/C Prog /param > C:\Test.txt',nil, SW_HIDE);


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz