Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.017 c
3-19051           Cossys                2002-02-07 18:12  2002.03.07  
Ну что за глюк поганый!!!


6-19294           Maximka               2001-12-19 07:37  2002.03.07  
Как узнать какие компы есть в сети


3-19049           yaJohn                2002-02-07 17:05  2002.03.07  
DBGrid


1-19182           APTEMKA               2002-02-17 02:10  2002.03.07  
Кто нибудь знает что делает .... as ....


3-19110           Ser_Kham1             2002-02-11 14:20  2002.03.07  
Чтение из таблицы Oracle