Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 19.12.2010
Сообщений: 38
1

Запуск ехе-файлла

23.01.2011, 12:10. Показов 1630. Ответов 13
Метки нет (Все метки)

Здравствуйте! Можно ли при нажатии кнопки на форме найти нужный ехе-файл и запустить его? Заранее большое спасибо.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.01.2011, 12:10
Ответы с готовыми решениями:

Запуск .ехе файлов
Изучаю C++ полгода.Программирую на Visual Studio 2010. Windows XP,7.Недавно познакомился с...

Запуск .ехе-шного файла
Как запустить имеющийся .ехе-шный файл средствами С++?

Работа с файлами и запуск ехе из другой дерриктории.
Доброго время суток, господа. У меня возникла небольшая проблемка: Есть файл PHP, который...

Запуск (*ехе)
Всем доброе время суток. Интересует следующая вещь: предположим, имеется программа с расширением...

13
7 / 7 / 12
Регистрация: 13.02.2007
Сообщений: 1,255
23.01.2011, 12:33 2
можно
0
0 / 0 / 0
Регистрация: 12.07.2010
Сообщений: 128
23.01.2011, 15:28 3
Запусать можно так:

PROCESS_INFORMATION pi;
STARTUPINFO si;
DWORD ExitCode;

memset(&si, 0, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;

CreateProcess('Путь к проге', 'Командная строка для проги', NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
// return GetLastError();
0
John Paramol
23.01.2011, 21:33 4
а можно так
Код
WinExec('командная строка',SW_SHOWDEFAULT);
0 / 0 / 0
Регистрация: 12.07.2010
Сообщений: 128
23.01.2011, 21:59 5
Конечно. Можно и ShellExecute.
Но CreateProcess дает больший контроль над запускаемым процессом,
т.к. сразу нам доступен его дескриптор.
Так, мы можем менять приоритет, приостанавливать и снова запускать,
ожидать завершения с приостановкой нашей программы и без, запускать
в 'спящем режиме' и т.д.
0
0 / 0 / 0
Регистрация: 19.12.2010
Сообщений: 38
25.01.2011, 11:04  [ТС] 6
Спасиюо большое.Ваши рекомендации мен очень омоогли. Но есть ещё небоольшй вопросик:

Приложение имеет также три РадиоКнопки: RadioButton1, RadioButton2 и RadioButton3 соответственно. Поле Edit1 содержит полный путь и исполняемый файл приложения (C:Мои документыC++Project1.exe). Кнопка Button1 запускает второй экземпляр моего приложения в зависимости от того, какая РадиоКнопка нажата (RadioButton1 – развернутое во весь экран, RadioButton2 –в виде пиктограммы). Мне нужно, чтобы при запуске второго экземпляра данного приложения его заголовок «Project1» менялся на заголовок «второй экземпляр». Ниже представлен код кнопки Button1:
int WINDOWVIEW; // Вид окна второго экземпляра приложения
if (RadioButton1->Checked)
WINDOWVIEW = SW_SHOWMAXIMIZED; // Во весь экран
else
WINDOWVIEW = SW_SHOWMINIMIZED; // в виде пиктограммы
WinExec(Edit1->Text.c_str(), WINDOWVIEW);
Application->Title= «Второй экземпляр»

Когда я выполняю щелчок мыши по кнопке Button1, сначала происходит смена заголовка на первом приложении, а затем открывается второе приложение, имеющее прежний заголовок «Project1». Если вам не сложно перешлите код на мой E-mail. Его адрес: staspisarevsky@rambler.ru. Заранее благодарю.
0
7 / 7 / 12
Регистрация: 13.02.2007
Сообщений: 1,255
25.01.2011, 20:44 7
В этом месте Maga должен тебя убить )))
Читай его коментарии по поводу достоинств и недостатков методов.

Удачи, Владимир
0
0 / 0 / 0
Регистрация: 12.07.2010
Сообщений: 128
26.01.2011, 19:41 8
В том моем коде, перед CreateProcess надо поставить строку
si.lpTitle = 'Новый заголовок';

а в si.wShowWindow записывать нужную константу. Например:
si.wShowWindow = SW_SHOWMAXIMIZED;

Удачи!
0
0 / 0 / 0
Регистрация: 19.12.2010
Сообщений: 38
30.01.2011, 12:52  [ТС] 9
Еще раз огромное спасибо за помощь. И если вас не затруднит, еще один небольшой вопросик. Я неоднократно задавал его на форуме, но должного ответа так и не получил. А вопросик собственно такой: мое MDI-приложение имееет две формы (главная и доченрняя). Главная форма имеет пункт меню 'Окно' и команду 'Новое'. Моя цель - реализовать в моем приложении следующую возможность: при выборе меню 'Окно|Новое' должен запускаться второй экземпляр моего приложения и он же должен открывать его дочернюю форму (аналогично Microsoft Word или Excel). Заранее благодарю.
0
0 / 0 / 0
Регистрация: 19.12.2010
Сообщений: 38
30.01.2011, 12:52  [ТС] 10
Еще раз огромное спасибо за помощь. И если вас не затруднит, еще один небольшой вопросик. Я неоднократно задавал его на форуме, но должного ответа так и не получил. А вопросик собственно такой: мое MDI-приложение имееет две формы (главная и доченрняя). Главная форма имеет пункт меню 'Окно' и команду 'Новое'. Моя цель - реализовать в моем приложении следующую возможность: при выборе меню 'Окно|Новое' должен запускаться второй экземпляр моего приложения и он же должен открывать его дочернюю форму (аналогично Microsoft Word или Excel). Заранее благодарю.
0
0 / 0 / 0
Регистрация: 19.12.2010
Сообщений: 38
01.02.2011, 13:12  [ТС] 11
Maga: Я следовал вашему совету. Вот мой фрагмент кода:PROCESS_INFORMATION pi;
STARTUPINFO si;
DWORD ExitCode;

memset(&si, 0, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.lpTitle = 'Новый заголовок;
si.wShowWindow = SW_SHOWMAXIMIZED;
CreateProcess(NULL, Edit1->Text.c_str(), NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
// return GetLastError();
0
0 / 0 / 0
Регистрация: 19.12.2010
Сообщений: 38
01.02.2011, 13:16  [ТС] 12
Второй экземпляр приложения запускается, но его заголовок не меняется. Может я что-то упустил?
0
4 / 4 / 2
Регистрация: 09.12.2010
Сообщений: 278
01.02.2011, 16:06 13
Здраствуйте !

Насчет твоего вопроса про 'второй экземпляр', есть 2 способа
1. 'ламерский' сории, но так, допустим ты запустил свою программу как определить не был ли запущен еще один экземпляр до этого ?
и тут же напрашиваеться ответ...ага у проги есть заголовок ну значит можно использовать FindWindow !
ну заполняют все параметры и вперед !
В приницпе работает...слов нету...но так поступают тока 'жокеи' (программеры решаюшие задачи сходу влоб).

2. нормальный (стандартный) Создют семафор через CreateMutex
и так далее.....смотри в МСДН.

3. через внешний источник - файл, запись в регистре.... скажем при запуске программа создает файл в системной директории, а при закрытии удаляет его, точно также с ключом в реестре...значение при работе например в 1, а при закрытии 0. Но это тоже не надежно, влруг принудительно зщакрыть программу ?


и так....самый рабочий это способ.

удачи.
0
4 / 4 / 2
Регистрация: 09.12.2010
Сообщений: 278
01.02.2011, 16:31 14
сории клаву заело.... сладкий кофе )))

2 способ самый надежный в нем сипользуються
CreateMutex

я так понял ты пишешь на Билдере ?
вот тебе исходник

извини писал с колена....

проверил работает...
bool Check(void)
{
HANDLE hm;
hm=OpenMutexA(MUTEX_ALL_ACCESS,false,'mutex');
if(hm!=0)
{
return true;
}
hm=CreateMutexA(NULL,false,'mutex');
return false;
}

void __fastcall TForm1::FormCreate(TObject *Sender)
{
if(Check()==true) Form1->Caption=Form1->Caption+' второй экземпляр';
}

вот тока вопрос как быть если запушен 3, 4 или N экземпляр ?

удачи
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2011, 16:31

запуск ехе файлов
Доброго всем вечера. Кто знает, чем отличается запуск ехе файла через ярлык на рабочем столе от...

Запуск ехе файла
Добрый день подскажите есть проект который должен запускать посторонний ехе файл, по идее должно...

Запуск ехе-файл
Здравствуйте. Вот пишу такой код на C# process1.Start("C:\Program Files...

Запуск ехе-файла
Добрые господа, подскажите пожалуйста каким образом можно (если можно) нажатием на кнопку...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru