Форум: "Основная";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];
ВнизЗакрытие ДОС-окна Найти похожие ветки
← →
Елена (2002-02-18 14:56) [0]У меня такой вопрос.
Делаю 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.
Заранее благодарна.
← →
reonid (2002-02-18 15:13) [1]Попробуй так
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;
← →
Елена (2002-02-19 07:17) [2]Спасибо!
← →
Black King (2002-02-19 09:50) [3]Ja vsegda takim obrazom delaju :
WinExec("1.bat", 1)
i u menja rabotajet.
← →
Елена (2002-02-19 11:21) [4]Black King, Вы хотите сказать, что окно само закрывается?
← →
Ujin_m (2002-02-19 12:41) [5]Esche prosche dobavit
exit
v poslednuu stroku bat file ili sozdat svoi bat file (temp_123.bat naprimer) so strokami:
call 1.bat
exit
← →
Ujin_m (2002-02-19 12:43) [6]Poniatno chto zapuskat nado novui bat file:
WinExec("temp_123.bat", SW_NORMAL);
← →
Севостьянов Игорь (2002-02-19 15:28) [7]
call 1.bat
exit
Этого вполне достаточно
Просто в свойствах доса не выстален флаг - закрывать окно при окончании работы
← →
Sasha9 (2002-02-21 12:18) [8]Можно добавить cls в конец .bat файла (очистка экрана) или
вместо winexec использовать shellexecute и в примере Феломены в sendmessage вместо findwindow использовать значение, возвращённое функцией shellexecute
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c