Win32 API для элегантного завершения другого процесса? - PullRequest
1 голос
/ 03 февраля 2009

Я ищу способ закрыть приложение Windows от другого. Есть ли способ сделать это?

В идеале я хотел бы что-то, что в основном имитирует ALT-F4, или нажатие "X" в верхнем правом углу или что-то подобное.

В качестве альтернативы, есть ли приложение, которое уже делает это? Тскилл слишком резок для того, что я имею в виду.

Ответы [ 4 ]

6 голосов
/ 03 февраля 2009

РЕДАКТИРОВАТЬ: Я немного покопался и нашел статью MSDN с рекомендуемым Microsoft подходом.

Поскольку это приложение для Windows, вы можете отправить сообщение WM_CLOSE в главное окно, однако имейте в виду, что если приложение переопределяет обработку сообщения WM_CLOSE, вы можете получить неожиданные результаты. Также имейте в виду, что использование функций win32, таких как TerminateProcess и ExitProcess , также может иметь неприятные побочные эффекты (см. Разделы замечаний по msdn), включая глобальные данные в скомпрометированных dll, а также тупиков.

Если вы несете ответственность за кодирование целевого приложения, я бы порекомендовал добавить некоторую форму встроенного механизма завершения, который может запускаться извне (например, волшебный пакет на адресе обратной связи или каналах), чтобы вы могли быть уверены, что ваше приложение очистило за собой соответственно.

5 голосов
/ 03 февраля 2009

По вашему описанию это звучит как оконное приложение. В этом случае вы можете отправить ему сообщение WM_CLOSE , чтобы имитировать поведение при нажатии кнопки «X».

Другой альтернативой является использование TerminateProcess , но, вероятно, это то же самое, что и tskill.

1 голос
/ 03 февраля 2009

Более мощная команда для закрытия приложения:

    PostMessage (myhnd,WM_ENDSESSION,TRUE,ENDSESSION_LOGOFF);
1 голос
/ 03 февраля 2009

Сначала я отошлю вас к моему ответу на другой вопрос ; хотя речь шла о Delphi и сервисах, ответ не связан ни с Delphi, ни с сервисом. Короче говоря, нет никакого общего способа изящно остановить программу. Принятый ответ на этот вопрос демонстрирует отправку сообщения wm_Close в окно программы.

...