Показать сообщение отдельно

  #4  
Старый 27.01.2009, 19:43
A2GIL
Познающий
Регистрация: 31.08.2007
Сообщений: 94
С нами:
9839462

Репутация: 200
По умолчанию

WinExec и ShellExecute немного не то. С их помощью можно выполнять команды DOS (типа rundl32 xx.dl, бла бла ), вызывать процедуры запуска файлов с параметрами. Но для того, чтобы выполнить консольную команду можно создать поток, запускающий консольную программу. Подключаем только уже написанный для этого модуль.

Код:
//Подключаем модуль в Uses
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  StdCtrls, ExtCtrls, ComCtrls, CmdLine;

type
  TForm1 = class(TForm)
    btnRun: TButton;
    btnWrite: TButton;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure DoCommand(_lpcmd:string);
  end;

var
  Form1: TForm1;
  CmdCom   :TRedirectThread;

implementation
{$R *.dfm}


procedure TForm1.DoCommand(_lpcmd:string);
var
 _data:string;
begin
  if CmdCom<>nil then
   begin
     _data :=_lpcmd+#13#10;
     CharToOem(@_data[1],@_data[1]);
     CmdCom.WriteData(_data);
    end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
    CmdCom:= TRedirectThread.Create(true);
    CmdCom.RunProgram :='cmd';
    CmdCom.Params :='';
    CmdCom.FreeOnTerminate := true;
    CmdCom.Resume;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if CmdCom<>nil then
   CmdCom.Terminate();
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 DoCommand('mkdir c:\121'); // задаем командную строку
end;

end.

Модуль CmdLine
 
Ответить с цитированием