Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2012, 16:02   #1
Freeman-c
Новичок
Джуниор
 
Регистрация: 29.07.2012
Сообщений: 4
По умолчанию Запуск цепочки приложений в С++ Builder

В общем купил ноут, а дисков с дровами не прилагалось. Зашел на сайт - там больше 20 разных мелких драйверов, и все нужны. Появилась мысль создать в C++ Builder 6 приложение, которое будет запускать приложения (ну как обычный сетапник на диске с дровами).
Полазив по форуму нашел функцию ShellExecute, и вроде бы разобрал ее принцип работы.
Но вопрос состоит в том, что бы ShellExecute запускала не все приложения сразу, а последовательно - точнее, при закрытии одного приложения - открывается другое, и так далее.
Пример:
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShellExecute (Handle, "open", "C:\\1.txt", NULL,NULL, SW_RESTORE);
ShellExecute (Handle, "open", "C:\\2.txt", NULL,NULL, SW_RESTORE);
ShellExecute (Handle, "open", "C:\\3.txt", NULL,NULL, SW_RESTORE);
}
- запускает все файлы сразу один на одном, но мне нужна цепочка, последовательный запуск.

Помогите пожалуйста разобраться в проблеме, так как я еще новичок в этом деле, но очень хочу освоить материал.

Последний раз редактировалось Stilet; 29.07.2012 в 16:05.
Freeman-c вне форума Ответить с цитированием
Старый 29.07.2012, 16:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а последовательно
Она не подходит для этого.
Используй ShellExecuteEx . которая позволит получить хендл запущеного процесса, и с помошью функций WaitForSingleObject ожидать завершения.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.07.2012, 16:12   #3
Freeman-c
Новичок
Джуниор
 
Регистрация: 29.07.2012
Сообщений: 4
По умолчанию

Stilet - Большое спасибо за ответ. Сейчас почитаю про данную функцию. Но не закрывайте пожалуйста пока что эту тему, возможно возникнут вопросы по поводу приведенных вами функций

вобщем почитал - ничего не понимаю, слишком заумно все написано. Может кто-нибудь объяснить "на пальцах" как мне вот этот пример:
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShellExecute (Handle, "open", "C:\\1.txt", NULL,NULL, SW_RESTORE);
ShellExecute (Handle, "open", "C:\\2.txt", NULL,NULL, SW_RESTORE);
ShellExecute (Handle, "open", "C:\\3.txt", NULL,NULL, SW_RESTORE);
}
- переделать с использованием ShellExecuteEx и WaitForSingleObject

Последний раз редактировалось Stilet; 29.07.2012 в 16:40.
Freeman-c вне форума Ответить с цитированием
Старый 29.07.2012, 16:56   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вотъ
Код:
void Exec(char* s){
 _SHELLEXECUTEINFOA sa;

 sa.hwnd=GetForegroundWindow() ;
 sa.lpVerb="open";
 sa.lpFile=s;//;
 sa.nShow=1;
 sa.fMask=SEE_MASK_NOCLOSEPROCESS;
 sa.cbSize=sizeof(sa);

 if(!ShellExecuteExA(&sa)) RaiseLastOSError() ;
 WaitForSingleObject(sa.hProcess,INFINITE);
}

int _tmain(int argc, _TCHAR* argv[])
{
 Exec("c:\\WINDOWS\\system32\\notepad.exe");
 Exec("c:\\WINDOWS\\system32\\calc.exe");
 std::cout<<"ok";

 std::cin.get();
	return 0;
}
Все просто - функция запускает процесс, и ждет. После запускает другой.
Недостаток один - главный поток замерзает, пока процесс запущен.
Посему возможно для твоей задачи стоит изучить создание потоков.

P.S. Сей пример в консоли, так что не сидай в лужу, а бери из него только саму функцию, и ее вызов.
I'm learning to live...

Последний раз редактировалось Stilet; 29.07.2012 в 16:58.
Stilet вне форума Ответить с цитированием
Старый 29.07.2012, 17:04   #5
Freeman-c
Новичок
Джуниор
 
Регистрация: 29.07.2012
Сообщений: 4
По умолчанию

Огромное спасибо!) Теперь буду дерзать.
Хотел попросить Вас дать мне какой нибудь источник или название книги, где все это объяснялось бы(с нуля). Потому что у Архангельского инфы нету, а в интернете почти ничего нету по этой теме. Желательно от А до Я. Зарание Вас благодарю и еще раз спасибо за помощь
Freeman-c вне форума Ответить с цитированием
Старый 29.07.2012, 17:29   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

От А до Я только в MSDN.
И то без личного опыта на собственных граблях не обойтись.

P.S. на RSDN тоже посмотри.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск приложений Афанасий[vedma] Работа с сетью в Delphi 3 26.07.2012 20:33
Запуск нескольких приложений последовательно. nikrzd Помощь студентам 11 09.07.2012 14:45
Запуск приложений в C++ HWork Общие вопросы C/C++ 1 27.07.2009 13:59
Запуск внешних приложений Alex_09 Общие вопросы Delphi 4 10.04.2009 18:24
запуск dos приложений shurik_7866 Общие вопросы Delphi 3 25.01.2008 23:23