![]() |
|
|
![]()
|
|
| Inga |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 18.11.2005 Репутация: нет Всего: нет |
Запускаю функцией свою программу 1.exe:
ShellExecute((void *)Handle,"open","1",NULL,NULL,SW_RESTORE); Как ее теперь закрыть? Код ниже не правильный:
FindWindow возвращает дискриптор окна, а как найти дискриптор процесса, чтобы передать его в TerminateProcess? Спасибо. P.S. и так не работает: HINSTANCE ProcessID = ShellExecute((void *)Handle,"open","1",NULL,NULL,SW_RESTORE); затем TerminateProcess(ProcessID,0); Это сообщение отредактировал(а) Inga - 20.2.2006, 19:23 |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
а не проще ли использовать CreateProcess() -- сразу получим хендл и id процесса?
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: нет Всего: 73 |
Насколько понимаю, приложение win32?
Ф-ция ShellExecute сохранилась преимущественно для совместимости с 16битными приложениями. Для данной задачи выгоднее использовать BOOL ShellExecuteEx( LPSHELLEXECUTEINFO lpExecInfo ); lpExecInfo - структура, один из членов которой и будет иметь дескриптор процесса. Добавлено @ 19:28 Это не настоящий HINSTANCE Добавлено @ 19:30
-------------------- Теперь при чем :P |
|||
|
||||
| Inga |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 18.11.2005 Репутация: нет Всего: нет |
Спасибо!
Благодаря подсказке нашла пример. Вроде работает:
|
|||
|
||||
| Inga |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 18.11.2005 Репутация: нет Всего: нет |
Есть дополнительный вопрос:
вот из своей программы запускаю еще одну свою программу 1.exe. Это маленькое окно без заголовка с режимом fsStayOnTop. На этой форме таймеры выводят разную информацию (делают метки видимыми на этой маленькой форме). Все это происходит порядка 15 секунд. Так вот, когда начинается выполняться код этой маленькой формы, то на главной форме пропадает меню (см.рисунок). Все что делает главная форма, это запускает на выполнение 1.ехе и его же закрывает. Когда 1.exe закрывается, то главная программа приходит в норму и меню снова появляется. Как заставить меню главной формы не пропадать пока 1.exe выполняется? Может это как-то связано с потерей фокуса у главной формы, когда 1.exe начинает выполняться? Присоединённый файл ( Кол-во скачиваний: 15 )
1.gif 6,26 Kb |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
запускай вторую форму в отдельном потоке
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Inga |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 18.11.2005 Репутация: нет Всего: нет |
>запускай вторую форму в отдельном потоке
Через Syncronize или CreateThead? |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
через CreateThread ( можно и TThread использовать )
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: нет Всего: 73 |
Его и использовать, хотя для VCL, наверное лучше воспользоваться Классом TThread; Сделать класс наследник, в нем перегрузить метод Execute() - внести в него код, запускающий ShellExecute, а далее просто создать метод класса. -------------------- Теперь при чем :P |
|||
|
||||
| Inga |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 18.11.2005 Репутация: нет Всего: нет |
Нет, запуск в отдельном потоке не помог.
Если приложение выполняется из IDE все прекрасно, но если запустить отдельно, снова пропадает ToolBar. Если щелкнуть в стороне от 1.exe мышкой, то дополнительно в заголовке приложения из которого было запущено 1.exe появляется надпись Not responding. Выглядит это не привлекательно. Когда 1.exe закрывается все приходит в норму. Наверное, нет решения этой проблемы. Мой код:
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
а откуда этот "//далее другой код, который выполняется в главном приложении пока сверху 1.exe" узнает что "сверху 1.exe"?
и что там за код? ( обращения к ресурсам 1.exe есть? ) он ( код этот ), кстати, тоже в потоке должен быть -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Inga |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 18.11.2005 Репутация: нет Всего: нет |
Другой код, это код который не связан с запущенным 1.ехе. Главное приложение занимается своими делами, перед этим запустив 1.exe поверх себя. Код в 1.ехе тоже не связан с приложением, из которого его запустили (просто выводит метки у себя). Щелчок мыши думаю запретить пока 1.exe запущен, чтобы не появлялась надпись Not Responding в заголовке приложения, из которого запущено 1.ехе, а то, что временно пропадает ToolBar и заголовок окна становиться, синим (слетает скин), что ж, так тому и быть. По окончании работы 1.exe все приходит в норму. Странно, что если это происходит при запущенном IDE все выглядит как надо. |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |