| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Создание и закрытие процессов |
| Автор: MadCoder 12.12.2007, 19:12 | ||||||
| Здравствуйте! Очень нужно узнать, как правильно создавать и закрывать процессы. Способ, который я использую сейчас: Глобальные переменные:
Процедура запуска:
...и процедура завершения:
С запуском проблем нет, а вот с закрытием никак не разберусь. Нужно, чтобы сначала посылалось сообщение, что программу хотят закрыть (WM_CLOSE?), чтобы она успела сохранить настройки. Если программа не отвечает на WM_CLOSE и не убивается секунд 10, принудительно завершать процесс (Terminate). Причем должны завершаться все процессы, порожденные созданным процессом. В ряде случаев вылазает ошибка и завершение не происходит - в чем дело, разобраться не могу. Помогите! |
| Автор: anwe 12.12.2007, 23:03 |
| Если хочешь, чтобы сначала шло сохранение настроек тогда либо используй SendMessage, которая ждет возврата в отличие от PostMessage, либо в секции кода, где обрабатывается WM_CLOSE сначала пропиши сохранение настроек, а потом там же вызови остановку процесса (можно в вызове WM_DESTROY). Но только... Не используй TerminateProcess. Используй ExitProcess. |
| Автор: dumb 12.12.2007, 23:43 | ||
| чтобы использовать ExitProcess для другого приложения, нужно сначала в него внедриться... MadCoder, судя по тому, что ты после создания процесса встаешь на ожидание его хэндла(кстати, зачем там ожидание еще и WaitForInputIdle?), надо полагать CloseProcess выполняется из другого потока, нежели StartProcess? если да, то примерно так:
а это уже совсем другая песня - необходимо перечислить все процессы(поиск по CreateToolhelp32Snapshot), там выяснять кто кого породил, и соответственно грохать. |
| Автор: MadCoder 18.12.2007, 02:42 | ||
| dumb, спасибо, все работает! Интересует, а как опредилить имя (Filename) для PostMessage:
Очень хочется, чтобы не было привязки к заголовку окна, т.к. на разных языках он разный. |
| Автор: Rennigth 18.12.2007, 12:35 |
Ну сделай поиск окна по классу. FindWindowEx. |
| Автор: MadCoder 18.12.2007, 13:14 | ||
А если это приложение без окна, как ему сообщение о закрытии выслать? |