Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить код завершения DOS-программы ? [D5, Win95/98]


ser_ker ©   (2003-01-23 14:39:00) 

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

У меня наверное очень простой вопрос : каким образом получить код завершения 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:00) [1]

СМ хелп
GetExitCodeProcess ;-)


Наверх

Титульная страница Поиск, карта сайта Написать письмо