Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.07;
Скачать: CL | DM;

Вниз

Закрытие ДОС-окна   Найти похожие ветки 

 
Елена   (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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
3-19093
Bormanoid
2002-02-08 15:49
2002.03.07
Проблема с QReport.Preview


14-19314
bullet_
2002-01-22 01:00
2002.03.07
Работа с Excel


4-19381
Valeron
2002-01-10 05:43
2002.03.07
Перехват значений


1-19251
Елена
2002-02-18 07:45
2002.03.07
Зашифровать строку


14-19338
AZ
2002-01-23 06:36
2002.03.07
Отладка