![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Закрытие ДОС-окна [D5, Win95/98, WinME, NT4, Win2k, WinXP]
Елена © (2002-02-18 14:56:00)У меня такой вопрос.
Делаю WinExec("1.bat", SW_NORMAL), программа отрабатывает в ДОС-окне, но окно не закрывается ("Сеанс завершен").
Как мне программно закрыть это окно?
Феломена посоветовала:
var
info: TOSVersionInfo;
ClassName, Title: string;
info.dwOSVersionInfoSize:=SizeOf(info);
GetVersionEx(info);
if (info.dwPlatformId = VER_PLATFORM_WIN32_NT) then begin
ClassName:="ConsoleWindowClass";
Title:="Command Prompt";
end else begin
ClassName:="tty";
Title:="MS-DOS Prompt";
end;
SendMessage(FindWindow(PChar(ClassName), PChar(Title)), WM_CLOSE, 0, 0);
Этот код я вставила после WinExec("1.bat", SW_NORMAL), но видимо программа не дожидается, пока выполнится 1.bat.
Заранее благодарна.
Sasha9 (2002-02-21 12:18:00) [1]Можно добавить cls в конец .bat файла (очистка экрана) или
вместо winexec использовать shellexecute и в примере Феломены в sendmessage вместо findwindow использовать значение, возвращённое функцией shellexecute
Севостьянов Игорь (2002-02-19 15:28:00) [2]
call 1.bat
exit
Этого вполне достаточно
Просто в свойствах доса не выстален флаг - закрывать окно при окончании работы
Ujin_m (2002-02-19 12:43:00) [3]Poniatno chto zapuskat nado novui bat file:
WinExec("temp_123.bat", SW_NORMAL);
Ujin_m (2002-02-19 12:41:00) [4]Esche prosche dobavit
exitv poslednuu stroku bat file ili sozdat svoi bat file (temp_123.bat naprimer) so strokami:
call 1.bat
exit
Елена (2002-02-19 11:21:00) [5]Black King, Вы хотите сказать, что окно само закрывается?
Black King (2002-02-19 09:50:00) [6]Ja vsegda takim obrazom delaju :
WinExec("1.bat", 1)
i u menja rabotajet.
Елена (2002-02-19 07:17:00) [7]Спасибо!
reonid (2002-02-18 15:13:00) [8]Попробуй так
function ExecuteConsole(CmdLn: string): Boolean;
var
si: TStartupInfo;
pi: TProcessInformation;
// CmdLn: string;
begin
// CmdLn := "calc.exe";
FillChar(si, SizeOf(si), 0);
si.cb := SizeOf(si);
AllocConsole;
// Запускаем программу
if CreateProcess(nil,
PChar(CmdLn),
nil,
nil,
False,
CREATE_DEFAULT_ERROR_MODE or NORMAL_PRIORITY_CLASS,
nil,
nil,
si,
pi)
then
begin
CloseHandle(pi.hThread);
// Ждем окончания работы запущенной программы
// if WaitForSingleObject(pi.hProcess, {INFINITE}6000{ms})= WAIT_OBJECT_0
// then
// Result := True// Программа отработала - читаем файл
// else
// Result := False;// (WAIT_TIMEOUT) - Программа не завершилась за 60 сек.
// Или ей требуется больше времени, или она зависла
Result := True;
CloseHandle(pi.hProcess);
end
else
Result := False; // программа не запустилась
FreeConsole;
end;