Текущий архив: 2002.12.12;
Скачать: CL | DM;
Вниз
*.bat. Чтобы прогр-ма ждала окончание работы Найти похожие ветки
← →
Stenkz © (2002-10-28 08:16) [0]У кого-нибудь была проблемма -
Запускаем досовский *.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);
Но думаю есть более красивые и надёжные средства...
← →
sask © (2002-10-28 08:24) [1]Можно использовать функцию FileExecuteWait (RXShell.Pas) из RX.
← →
Stenkz © (2002-10-28 11:27) [2]Вы имеете ввиду набор компонентов RX?
Не подскажете где можно взять хелп для них?
Как работает эта функция?
← →
Alx2 © (2002-10-28 14:45) [3]>Stenkz © (28.10.02 11:27)
Запускай командный интерпретатор с ключом /c и батником в параметрах. Получай хэндл интепретаторского процеса и жди его освобождения через WaitForSingleObject
← →
Stenkz © (2002-10-28 15:13) [4]А мона пример кода даже не совсем точно...
← →
Alx2 © (2002-10-28 15:49) [5]Код нерабочий (переделанная цитата из моей старой проги). Работает только идея.
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);
..........
← →
Sharik_212 (2002-10-28 16:57) [6]В конце батника создавай какой-нить файл, а в проге контролируй его появление. Дешево и сердито!
← →
SottNick © (2002-10-31 08:35) [7]рабочий код
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 файлу надо создать ярлык и поставить галку "закрывать окно",
а то он свое окошко закрывать по окончании работы не будет
в нашем случае окошко скрытое, значит приложение вообще зависнет
Страницы: 1 вся ветка
Текущий архив: 2002.12.12;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.018 c