![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
*.bat. Чтобы прогр-ма ждала окончание работы
Stenkz © (2002-10-28 08:16:00)У кого-нибудь была проблемма -
Запускаем досовский *.bat...
и программа понеслась дальше, даже если "батник" не отработал.
Как это дело сделать так, чтобы прога ждала пока батник отработает?
Я написал примерно так:
rez:=0;
rez:=WinExec("c:\rko\move.bat", SW_HIDE);
If rez>31 then
begin
Memo1.Lines.Add(" файлы перенесены в архив... ");
end
else MessageDlg("Дожитесь переноса файлов в архив",mtInformation,[mbOK],0);
Но думаю есть более красивые и надёжные средства...
SottNick (2002-10-31 08:35:00) [1]рабочий код
var
si : Tstartupinfo;
p : Tprocessinformation;
nn : string;
begin
nn:="BIOS\compil.bat";
FillChar(si,Sizeof(si),#0);
si.cb:=Sizeof(si);
si.dwFlags:=STARTF_USESHOWWINDOW;
si.wShowWindow:=SW_HIDE;
CreateProcess(nil,PChar(nn),nil,nil,false,0,nil,nil,si,p);
WaitForSingleObject(p.hProcess,infinite);
...
только bat файлу надо создать ярлык и поставить галку "закрывать окно",
а то он свое окошко закрывать по окончании работы не будет
в нашем случае окошко скрытое, значит приложение вообще зависнет
Sharik_212 (2002-10-28 16:57:00) [2]В конце батника создавай какой-нить файл, а в проге контролируй его появление. Дешево и сердито!
Alx2 (2002-10-28 15:49:00) [3]Код нерабочий (переделанная цитата из моей старой проги). Работает только идея.
var
PInf: TProcessInformation;
StInfo: TStartupInfo;
begin
while not StopCheckBox.Checked do
begin
fillchar(StInfo, sizeof(StInfo), 0);
StInfo.dwFlags := STARTF_USESHOWWINDOW;
if not CreateProcess("command.com", PChar("/c myfile.bat"), nil, nil,
False, 0, nil, nil, stInfo, PInf) then exit; // Для NT - cmd.exe в каталоге GetSystemDirectory
WaitForSingleObject(PInf.hProcess, INFINITE);
..........
Stenkz (2002-10-28 15:13:00) [4]А мона пример кода даже не совсем точно...
Alx2 (2002-10-28 14:45:00) [5]>Stenkz © (28.10.02 11:27)
Запускай командный интерпретатор с ключом /c и батником в параметрах. Получай хэндл интепретаторского процеса и жди его освобождения через WaitForSingleObject
Stenkz (2002-10-28 11:27:00) [6]Вы имеете ввиду набор компонентов RX?
Не подскажете где можно взять хелп для них?
Как работает эта функция?
sask (2002-10-28 08:24:00) [7]Можно использовать функцию FileExecuteWait (RXShell.Pas) из RX.