Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как затавить несколько програм запкскаться в одной консоли ?  (Прочитано 6296 раз)
0 Пользователей и 1 Гость смотрят эту тему.
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« : 19-02-2004 09:20 » 

Суть проблемы : програма исполняет некий скрипт в котором переодически встречаются команды на запуск  консольных приложений.
Есть большое желание чтобы избежать перманентного хлопания окнами  запускать все приложения в одной консоли ....
Те  выдать окно и по мере надобности запускать внем утилиты...

1) как это сделать? (пактный файл не подходит так как между запусками сонсольных утилит должны выполняться другие дествия, например зпаросы к базе или прочие )
2) как в этом случае отследить завершение очередной утилиты(по шенделу не получается так как он присваивается консоли а не проге  Жаль  )
Записан

Да да нет нет все остальное от лукавого.
Dobro
Гость
« Ответ #1 : 24-02-2004 21:38 » 

Если у тебя GUI-приложение, то сначала создай консоль при помощи AllocConsole.
Затем вызывай консольные приложения так, чтобы они использовали твою консоль, т.е. при вызове CreateProcess в параметре dwCreationFlag должен быть сброшен флаг CREATE_NEW_CONSOLE.
Дождаться завершения каждого приложения можно по хэндлу процесса, возвращаемого функцией CreateProcess. Это хэндл именно процесса, а не консоли.
Если GUI-приложение, то после отработки всех приложений освободи консоль при помощи FreeConsole.
Записан
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 25-02-2004 05:45 » 

Я сейчас проверю ... но в случае если консоль создается автоматически
то WaitSingleObject будет ждать INFINITI до тех пор пока не будет закрыт процесс а процесс будет закрыт только тогда когда будет закрыта консоль.
Записан

Да да нет нет все остальное от лукавого.
Dobro
Гость
« Ответ #3 : 27-02-2004 03:13 » new

Вот код, который делает то, что тебе нужно:
Код:
	LPCTSTR astrAppNames[] = {
"1.bat",
"2.bat",
"3.bat"
};
if (AllocConsole())
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
DWORD dwExitCode;
for (int i=0; i<sizeof(astrAppNames)/sizeof(LPCTSTR); i++)
{
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

if (CreateProcess( astrAppNames[i], NULL, NULL, NULL, FALSE,
0, NULL, NULL, &si, &pi ))
{
    WaitForSingleObject( pi.hProcess, INFINITE );
GetExitCodeProcess( pi.hProcess, &dwExitCode );

CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
}
FreeConsole();
}
« Последнее редактирование: 24-11-2007 13:34 от Алексей1153++ » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines