![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| MadCoder |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 478 Регистрация: 24.8.2007 Где: Москва Репутация: 1 Всего: 2 |
Здравствуйте!
Очень нужно узнать, как правильно создавать и закрывать процессы. Способ, который я использую сейчас: Глобальные переменные:
Процедура запуска:
...и процедура завершения:
С запуском проблем нет, а вот с закрытием никак не разберусь. Нужно, чтобы сначала посылалось сообщение, что программу хотят закрыть (WM_CLOSE?), чтобы она успела сохранить настройки. Если программа не отвечает на WM_CLOSE и не убивается секунд 10, принудительно завершать процесс (Terminate). Причем должны завершаться все процессы, порожденные созданным процессом. В ряде случаев вылазает ошибка и завершение не происходит - в чем дело, разобраться не могу. Помогите! |
||||||
|
|||||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 4 Всего: 23 |
Если хочешь, чтобы сначала шло сохранение настроек тогда либо используй SendMessage, которая ждет возврата в отличие от PostMessage, либо в секции кода, где обрабатывается WM_CLOSE сначала пропиши сохранение настроек, а потом там же вызови остановку процесса (можно в вызове WM_DESTROY). Но только... Не используй TerminateProcess. Используй ExitProcess.
|
|||
|
||||
| dumb |
|
||||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
чтобы использовать ExitProcess для другого приложения, нужно сначала в него внедриться...
MadCoder, судя по тому, что ты после создания процесса встаешь на ожидание его хэндла(кстати, зачем там ожидание еще и WaitForInputIdle?), надо полагать CloseProcess выполняется из другого потока, нежели StartProcess? если да, то примерно так:
|
||||
|
|||||
| MadCoder |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 478 Регистрация: 24.8.2007 Где: Москва Репутация: 1 Всего: 2 |
dumb, спасибо, все работает!
Интересует, а как опредилить имя (Filename) для PostMessage:
Очень хочется, чтобы не было привязки к заголовку окна, т.к. на разных языках он разный. |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 8 Всего: 76 |
Ну сделай поиск окна по классу. FindWindowEx. -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| MadCoder |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 478 Регистрация: 24.8.2007 Где: Москва Репутация: 1 Всего: 2 |
А если это приложение без окна, как ему сообщение о закрытии выслать? |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 8 Всего: 76 |
Никак. Сообщения посылаются только октам. + Потокам PostThreadMessage, но обработает поток твою сообщение или нет - неизвестно. -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |