AGB  ·  Datenschutz  ·  Impressum  







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

cmd fenster

Ein Thema von technik05 · begonnen am 18. Mär 2008 · letzter Beitrag vom 18. Mär 2008
Antwort Antwort
Seite 5 von 5   « Erste     345   
technik05

Registriert seit: 16. Mär 2008
51 Beiträge
 
#41

Re: cmd fenster

  Alt 18. Mär 2008, 15:54
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Memo1Change(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}


    function GetConsoleOutput(const Command: String; var Output, Errors: TStringList): Boolean;
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
  SecurityAttr: TSecurityAttributes;
  PipeOutputRead: THandle;
  PipeOutputWrite: THandle;
  PipeErrorsRead: THandle;
  PipeErrorsWrite: THandle;
  Succeed: Boolean;
  Buffer: array [0..255] of Char;
  NumberOfBytesRead: DWORD;
  Stream: TMemoryStream;
begin
  //Initialisierung ProcessInfo
  FillChar(ProcessInfo, SizeOf(TProcessInformation), 0);

  //Initialisierung SecurityAttr
  FillChar(SecurityAttr, SizeOf(TSecurityAttributes), 0);
  SecurityAttr.nLength := SizeOf(SecurityAttr);
  SecurityAttr.bInheritHandle := true;
  SecurityAttr.lpSecurityDescriptor := nil;

  //Pipes erzeugen
  CreatePipe(PipeOutputRead, PipeOutputWrite, @SecurityAttr, 0);
  CreatePipe(PipeErrorsRead, PipeErrorsWrite, @SecurityAttr, 0);

  //Initialisierung StartupInfo
  FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
  StartupInfo.cb:=SizeOf(StartupInfo);
  StartupInfo.hStdInput := 0;
  StartupInfo.hStdOutput := PipeOutputWrite;
  StartupInfo.hStdError := PipeErrorsWrite;
  StartupInfo.wShowWindow := sw_Hide;
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;

  if CreateProcess(nil, PChar(command), nil, nil, true,
  CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil,
  StartupInfo, ProcessInfo) then begin
    result:=true;
    //Write-Pipes schließen
    CloseHandle(PipeOutputWrite);
    CloseHandle(PipeErrorsWrite);

    //Ausgabe Read-Pipe auslesen
    Stream := TMemoryStream.Create;
    try
      while true do begin
        succeed := ReadFile(PipeOutputRead, Buffer, 255, NumberOfBytesRead, nil);
        if not succeed then break;
        Stream.Write(Buffer, NumberOfBytesRead);
      end;
      Stream.Position := 0;
      Output.LoadFromStream(Stream);
    finally
      Stream.Free;
    end;
    CloseHandle(PipeOutputRead);

    //Fehler Read-Pipe auslesen
    Stream := TMemoryStream.Create;
    try
      while true do begin
        succeed := ReadFile(PipeErrorsRead, Buffer, 255, NumberOfBytesRead, nil);
        if not succeed then break;
        Stream.Write(Buffer, NumberOfBytesRead);
      end;
      Stream.Position := 0;
      Errors.LoadFromStream(Stream);
    finally
      Stream.Free;
    end;
    CloseHandle(PipeErrorsRead);

    WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    CloseHandle(ProcessInfo.hProcess);
  end
  else begin
    result:=false;
    CloseHandle(PipeOutputRead);
    CloseHandle(PipeOutputWrite);
    CloseHandle(PipeErrorsRead);
    CloseHandle(PipeErrorsWrite);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
var Output,
      Errors : TStringList;
      CmdInterpreter,
      Command : String;

  function IsWindowsNT:Boolean;
  begin
    Result:=(Win32Platform=Ver_Platform_Win32_NT);
  end;

  function ConsoleStr2AnsiStr(ConsoleStr:String):String;
  var Buffer : pChar;
  begin
    Result:=ConsoleStr;
    GetMem(Buffer,length(ConsoleStr)+1);
    try
      OEMToCharBuff(pChar(ConsoleStr),Buffer,length(ConsoleStr));
      SetString (Result,Buffer,length(ConsoleStr));
    finally
      FreeMem(Buffer,length(ConsoleStr)+1);
end;

procedure TForm1.Memo1Change(Sender: TObject);
begin
Memo1.Clear;

  Command:='dir c:\'; // <<< hier DEINEN BatchAufruf placieren!!!!!!

  if IsWindowsNT then CmdInterpreter:='cmd'
                 else CmdInterpreter:='command';

  Output:=TStringList.Create;

  try
    Errors:=TStringList.Create;
    if GetConsoleOutput(CmdInterpreter+' /c '+Command,Output,Errors) then begin
      Memo1.Lines.AddStrings(Output);
      Memo1.Text:=ConsoleStr2AnsiStr(Memo1.Text);
      end

  finally
    Output.Free;
    Errors.Free;
end;

end.
test
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#42

Re: cmd fenster

  Alt 18. Mär 2008, 15:54
Zitat von technik05:
test
Genau so
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#43

Re: cmd fenster

  Alt 18. Mär 2008, 15:54
Und was funktioniert jetzt nicht?
Ralph
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#44

Re: cmd fenster

  Alt 18. Mär 2008, 15:57
Na, is klar! Das

procedure TForm1.Memo1Change(Sender: TObject); innerhalb von Button1Click muss weckkkkkk! Davor fehlt ein END - Was hast du denn da bloß gemacht?

// da fehlen mehrererere END'S ????!!!!!
Ralph
  Mit Zitat antworten Zitat
technik05

Registriert seit: 16. Mär 2008
51 Beiträge
 
#45

Re: cmd fenster

  Alt 18. Mär 2008, 15:57
diese fehlermeldung kommt immer

Fehler] Unit1.pas(117): Anweisung erwartet, aber 'VAR' gefunden
[Fehler] Unit1.pas(139): Anweisung erwartet, aber 'PROCEDURE' gefunden
[Fehler] Unit1.pas(162): ';' erwartet, aber '.' gefunden
[Fehler] Unit1.pas(164): Deklaration erwartet, aber Dateiende gefunden
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#46

Re: cmd fenster

  Alt 18. Mär 2008, 15:59
Übernehme bitte meinen Code KOMPLETT - heute ist offenbar nicht dein Tag! Schon beim Copy&Paste bringst du einiges durcheinander

// edit: schau dir das mal an:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
var Output,
      Errors : TStringList;
Ralph
  Mit Zitat antworten Zitat
1234588

Registriert seit: 14. Jan 2007
Ort: Stuttgart
164 Beiträge
 
#47

Re: cmd fenster

  Alt 18. Mär 2008, 16:02
vll. solltest du die fehlermeldungen mal lesen.

Zitat:
Fehler] Unit1.pas(117): Anweisung erwartet, aber 'VAR' gefunden
du darfst variablen nur vor dem beginn festlegen. gilt auch fuer konstanten, typen und funktionen.


Zitat:
[Fehler] Unit1.pas(162): ';' erwartet, aber '.' gefunden
ganz am ende hast du einen try finally block den du mit einem end; abschliessen muss

ect.


befass dich erstmal mit den grundlagen delphi's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 5   « Erste     345   


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