Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
21 / 22 / 5
Регистрация: 14.02.2013
Сообщений: 243
1

Запустить программу и подождать

20.05.2013, 20:50. Просмотров 2610. Ответов 25
Метки нет (Все метки)

Как запустить программу и дождаться ее завершения?
Запускаю таким кодом:
C++
1
WinExec(FileName.c_str(),SW_HIDE);
.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2013, 20:50
Ответы с готовыми решениями:

Как заставить программу подождать?
Здравствуйте! Подскажите пожалуйста, есть ли способ, с помощью которого можно заставить программу...

Запустить одну программу и по завершении её работы запустить другую программу
Ребят подскажите как можно организовать такое задание в cmd... запустить любую программу, и по...

Запустить программу, при ее успешном завершении запустить следующую
- запустить программу PRIM.exe, при успешном завершении запустить PRIM_1.exe, иначе ...

Запустить программу в среде turbo delphi - воссоздать программу
Есть код программы. Нужно её запустить в среде turbo delphi - воссоздать программу. У кого...

25
Native x86
Эксперт Hardware
3952 / 2377 / 700
Регистрация: 13.02.2013
Сообщений: 7,830
20.05.2013, 20:54 2
Через WinExec() -- никак, используйте CreateProcess() для запуска и WaitForSingleObject() для ожидания.
1
LK
Заблокирован
20.05.2013, 20:58 3
SW_HIDE или SW_SHOW ?
Подождать - это TTimer или более жестоко -
C++
1
sleep(/* колько ждать, в мсек, 1 сек = 1000 мсек */);
Гламурнее -
C++
1
ShellExecute()
0
Native x86
Эксперт Hardware
3952 / 2377 / 700
Регистрация: 13.02.2013
Сообщений: 7,830
20.05.2013, 21:00 4
Цитата Сообщение от LK Посмотреть сообщение
SW_HIDE или SW_SHOW ?
Подождать - это TTimer или более жестоко -
C++
1
sleep(/* колько ждать, в мсек, 1 сек = 1000 мсек */);
А для верности (вдруг программа не успеет завершиться), интервал установить в пару суток
0
LK
Заблокирован
20.05.2013, 21:09 5
ты это... не умничай... лучшей кодом помоги
0
Эксперт С++
8341 / 6090 / 607
Регистрация: 10.12.2010
Сообщений: 28,326
Записей в блоге: 29
20.05.2013, 21:25 6
Уже правильно, ответили чего мусолить ?
Цитата Сообщение от quwy Посмотреть сообщение
используйте CreateProcess() для запуска и WaitForSingleObject() для ожидания.
Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от LK Посмотреть сообщение
sleep
При чем тут sleep() вообще не понятно..

0
1404 / 567 / 127
Регистрация: 31.10.2011
Сообщений: 1,955
20.05.2013, 21:41 7
Лучший ответ Сообщение было отмечено как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 STARTUPINFO cif;
 ZeroMemory(&cif,sizeof(STARTUPINFO));
 PROCESS_INFORMATION pi;
 
 if (CreateProcess(TEXT("c:\\windows\\notepad.exe"),NULL,
        NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi)==true)
  {
   WaitForSingleObject(pi.hProcess, INFINITE);
 
   ShowMessage("Дождались!!!!");
 
   CloseHandle(pi.hProcess);
   CloseHandle(pi.hThread);
  }
Добавлено через 4 минуты
и не надо пару суток ждать
6
Native x86
Эксперт Hardware
3952 / 2377 / 700
Регистрация: 13.02.2013
Сообщений: 7,830
20.05.2013, 21:43 8
_Dimon_,
C
1
cif.cb = sizeof(cif);
1
1404 / 567 / 127
Регистрация: 31.10.2011
Сообщений: 1,955
20.05.2013, 21:50 9
Цитата Сообщение от quwy Посмотреть сообщение
cif.cb = sizeof(cif);
Хотя нет, AV получается
0
Native x86
Эксперт Hardware
3952 / 2377 / 700
Регистрация: 13.02.2013
Сообщений: 7,830
20.05.2013, 21:53 10
_Dimon_, ???
Это же статическая структура, откуда AV при присвоении поля статической структуры может взяться?
0
LK
Заблокирован
20.05.2013, 21:55 11
а здесь https://www.cyberforum.ru/post2217329.html работало
0
1404 / 567 / 127
Регистрация: 31.10.2011
Сообщений: 1,955
20.05.2013, 21:57 12
AV не при присвоении, а когда скормить указатель на эту структуру CreateProcess
0
LK
Заблокирован
20.05.2013, 22:02 13
а макрос TEXT зачем? и я не помню, он
C++
1
#include <tchar.h>
не хочет ?
0
1404 / 567 / 127
Регистрация: 31.10.2011
Сообщений: 1,955
20.05.2013, 22:08 14
Цитата Сообщение от LK Посмотреть сообщение
а макрос TEXT зачем?
Чтоб не писать
C++
1
UnicodeString("c:\\windows\\notepad.exe").w_str()
0
LK
Заблокирован
20.05.2013, 22:10 15
это для какого билдера? 2009? 2010?
0
1404 / 567 / 127
Регистрация: 31.10.2011
Сообщений: 1,955
20.05.2013, 22:13 16
ему #include <tchar.h> не надо, и так работает

Добавлено через 23 секунды
У меня XE3

Добавлено через 2 минуты
пользовался 2009, XE - XE3, но всегда писал UnicodeString("c:\\windows\\notepad.exe").w_str(), а потом где-то здесь на форуме нашел TEXT
0
LK
Заблокирован
20.05.2013, 22:21 17
RAD ХЕ
Запустить программу и подождать
Запустить программу и подождать
0
1404 / 567 / 127
Регистрация: 31.10.2011
Сообщений: 1,955
20.05.2013, 22:38 18
а у меня
[bcc32 Error] Unit1.cpp(48): E2034 Cannot convert 'char const[23]' to 'const wchar_t *'
[bcc32 Error] Unit1.cpp(48): E2342 Type mismatch in parameter 'lpApplicationName' (wanted 'const wchar_t *', got 'const char *')
но так
C++
1
L"c:\\windows\\notepad.exe"
нормально

Добавлено через 1 минуту
или так
C++
1
_T("c:\\windows\\notepad.exe")
Добавлено через 6 минут
все-таки в tchar.h
C++
1
2
3
4
#define __T(__x)          __x
#define _TEXT(__x)        __T(__x)
#define _T(__x)           __T(__x)
#define _TEOF           EOF
Добавлено через 1 минуту
но явно я его не подключаю, видно сам )))
0
LK
Заблокирован
20.05.2013, 22:57 19
_TCHAR Mapping
1
21 / 22 / 5
Регистрация: 14.02.2013
Сообщений: 243
21.05.2013, 17:19  [ТС] 20
Цитата Сообщение от _Dimon_ Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 STARTUPINFO cif;
 ZeroMemory(&cif,sizeof(STARTUPINFO));
 PROCESS_INFORMATION pi;
 
 if (CreateProcess(TEXT("c:\\windows\\notepad.exe"),NULL,
        NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi)==true)
  {
   WaitForSingleObject(pi.hProcess, INFINITE);
 
   ShowMessage("Дождались!!!!");
 
   CloseHandle(pi.hProcess);
   CloseHandle(pi.hThread);
  }
Добавлено через 4 минуты
и не надо пару суток ждать
Мне нужно запускать с параметрами.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2013, 17:19

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как заставить программу запустить другую программу
Как заставить программу запуститься в спрятанном режиме, чтобы её можно было найти только в...

Как подождать ShellExecute?
Запускаю WinRar таким образом: //делит на указанные части procedure divisionFile(FileNameIn,...

Стоит ли подождать Skylake
В скором времени планируется сборка нового компьютера (время терпит). Так вот как думают более...

Подождать завершения потока
В общем то я начинающий программист c++. Уже третий день сижу над решение задачи: Разработать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.