Главная страница
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.011 c
3-4764
AALLEEXX
2003-01-15 07:27
2003.02.03
ПОМОГИТЕ !!!!!!! (Надо 12 П.10,158-1*2 --> 12П1015812)


14-5246
sancho
2003-01-15 20:50
2003.02.03
Такое вот письмо на мыло пришло.


3-4791
jackhigh
2003-01-17 10:58
2003.02.03
Торможу с DBGrid...


9-4704
Pauchok
2002-08-07 02:53
2003.02.03
Вопрос


3-4783
Oxy
2003-01-15 19:40
2003.02.03
Как упаковать таблицу в делфе?