Здравствуйте, okman, Вы писали:
O>Здравствуйте, egvos4, Вы писали:
E>>Как пишет Джефри Рихтер, не желательно принудительно уничтожать процесс из другого процесса путем вызова TerminateProcess. Желательно, чтобы сам первоначальный процесс вызвал у себя ExitProcess и корректно завершился. Соответственно вопрос в том как правильно передать команду процессу, в моем случае одному из четырех запущенных браузеров для их корректного закрытия. Например как-то передать WM_CLOSE? Есть идеи?
O>WM_CLOSE эквивалентен нажатию на кнопку "закрыть" в правом углу окна.
O>Что еще вовсе не означает завершение всей программы. Например, браузер запустился и
O>показывает пользователю диалог: "данная программа не является браузером по умолчанию",
O>предлагая сделать ее таковой. WM_CLOSE закроет это окно, а основное окно останется висеть.
O>TerminateProcess нежелателен тем, что после него данные, которыми оперировала программа,
O>могут остаться в несогласованном состоянии. Точно также, как и в случае аварийного завершения.
O>Но с другой стороны, TerminateProcess дает наиболее сильную гарантию завершения процесса и
O>если альтернатив не видно, я бы использовал эту функцию, не особо стесняясь.
WM_CLOSE
WM_SYSCOMMAND + wParam==SC_CLOSE
WM_DESTROY
Хотя как писал ниже okman, это не гарантия закрытия процесса. Процесс может иначе обработать эти сообщения и не завершаться. Хотя в 99 из 100 как правило скорее всего завершиться. Но это не из логики вытекает, а из традиций. Что вряд ли процесс останется работать после таких "просьб". Но опять же — это традиции и только, ничто не мешает абстрактному процессу игнорировать эти сообщения в том или ином случае.
PS: Примеров прямо
противоположных именно
традиций сотни. "Традиций" в том смысле что в абстрактном софте Икс сделано незавершение по нажатию на крестик (WM_CLOSE | WM_SYSCOMMAND+SC_CLOSE) не из абстрактной "вредности", а по смыслу. Ну, например, настройки типа "сворачивать в трей" при нажатии на крест, много где такие настройки используются. Соответственно, процесс как работал так и будет работать.