Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];

Вниз

Как получить код завершения 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.01 c
3-4718
dtm
2003-01-15 14:29
2003.02.03
Не видно выбранного значения в lookup-поле при выборе


3-4748
oleon
2003-01-15 11:52
2003.02.03
Здраствуйте. У меня сегодня день рождения. Есть функция UDF.


4-5350
anod
2002-12-13 14:46
2003.02.03
Kak videlit stroku v Listbox


4-5321
pavel_ak
2002-12-18 18:18
2003.02.03
Короткое имя файла из длинного


8-5092
Andrey007
2002-04-16 17:36
2003.02.03
Как лучше рисовать карту?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский