Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.03;
Скачать: CL | DM;

Вниз

Как получить код завершения DOS-программы ?   Найти похожие ветки 

 
ser_ker   (2003-01-23 14:39) [0]

Здравствуйте Мастера !

У меня наверное очень простой вопрос : каким образом получить код завершения DOS-программы, например архиватора rar ?

Архиватор запускается в другом процессе.

Текст модуля для создания процесса :

unit ExecCmdThread;

interface

uses
Classes, ksk_run;

type
TExecCmdThread = class(TThread)
CmdLine : String;
WindowState : Word;
private
{ Private declarations }
protected
procedure DoWork;
procedure Execute; override;
end;

function ExecCmdLineAndWait(const CmdLine: string; WindowState: Word): Boolean;

implementation

{ Important: Methods and properties of objects in VCL can only be used in a
method called using Synchronize, for example,

Synchronize(UpdateCaption);

and UpdateCaption could look like,

procedure TExecCmdThread.UpdateCaption;
begin
Form1.Caption := "Updated in a thread";
end; }

{ TExecCmdThread }

procedure TExecCmdThread.Execute;
begin
{Если Вы хотите, чтобы процедура DoWork выполнялась лишь один раз - удалите цикл while}
// while not Terminated do
Synchronize(DoWork);
end;

procedure TExecCmdThread.DoWork;
begin
{ Здесь можно уже выполнять те задачи,
которые должны быть исполнены процессом }
ExecCmdLineAndWait(CmdLine, WindowState);
end;

{ Execute a complete shell command line and waits until terminated. }

function ExecCmdLineAndWait(const CmdLine: string; WindowState: Word): Boolean;
var
SUInfo: TStartupInfo;
ProcInfo: TProcessInformation;
begin
{ Enclose filename in quotes to take care of
long filenames with spaces. }
FillChar(SUInfo, SizeOf(SUInfo), #0);
with SUInfo do
begin
cb := SizeOf(SUInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := WindowState;
end;
Result := CreateProcess(nil, PChar(CmdLine), nil, nil, False,
CREATE_NEW_CONSOLE or
NORMAL_PRIORITY_CLASS, nil,
nil {PChar(ExtractFilePath(Filename))},
SUInfo, ProcInfo);
{ Wait for it to finish. }
if Result then
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
end;

end.



в основной программе :

var
SPar : String;
T : TExecCmdThread;
begin
// Запускаем программу
// ExecCmdLineAndWait(SPar, SW_NORMAL);
T := TExecCmdThread.Create(True);
T.CmdLine := SPar;
T.WindowState := SW_NORMAL;
T.Resume;
end;


 
ZmeiGorin ©   (2003-01-23 19:17) [1]

СМ хелп
GetExitCodeProcess ;-)



Страницы: 1 вся ветка

Текущий архив: 2003.02.03;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
14-5209
глупый
2003-01-14 14:17
2003.02.03
Выложил


1-4905
Konstantin
2003-01-25 18:42
2003.02.03
Как связать две подпрограммы (запрос-ответ)


6-5106
brestmarket
2002-11-07 02:37
2003.02.03
Отправка emails через SMTP-сервер авторизации?


8-5087
AL2002
2002-07-02 21:11
2003.02.03
Звук


1-4860
euru
2003-01-22 20:15
2003.02.03
Использование object