как закрыть окно из другого процесса - PullRequest
5 голосов
/ 08 декабря 2010

У меня есть приложение на c #, которое я хочу дать команду красиво завершить работу из другого процесса. Я также хочу попросить его открыть главное окно. У меня есть ссылка на его дескриптор главного окна.

Я знаю, что могу сделать это, используя сложные схемы, такие как удаленное взаимодействие или WCF. вопрос в том, могу ли я сделать это, используя более простые механизмы, такие как оконные сообщения, или обработчики событий OnClose окна в приложении c #

Ответы [ 4 ]

6 голосов
/ 08 декабря 2010

Pinvoke SendMessage (), чтобы отправить сообщение WM_CLOSE в главное окно приложения.Попросить его открыть главное окно, вероятно, будет довольно сложно, вы не можете получить дескриптор окна, пока окно не будет создано.Обычный способ - Process.Start ().

Недорогой альтернативой WCF и превосходящей pinvoke является именованный канал или сокет для взаимодействия с приложением.Для этого требуется возможность изменять исходный код приложения.

2 голосов
/ 08 декабря 2010
2 голосов
/ 08 декабря 2010

Я думаю, что вы, вероятно, могли бы использовать FindWindow, чтобы найти правильное дочернее окно, а затем SendMessage или PostMessage, чтобы отправить WM_CLOSE.

Вот еще один StackOverflow вопрос , который касается этого в C #.

Редактировать: Хотя, как говорит другой ответ на этот вопрос, вы могли бы использовать вместо него Process.CloseMainWindow.

0 голосов
/ 08 декабря 2010

Сначала я хотел бы, чтобы мое целевое приложение "осознавало" тот факт, что какой-то другой процесс может захотеть вызвать его закрытие или открытие окна или выполнение каких-либо действий.Это должно быть реализовано аналогично вызову любого метода в другом процессе через api или открытые методы целевого приложения.... если вы не пытаетесь что-то сделать со сторонними приложениями, я думаю, что вам не следует пытаться напрямую отправлять им сообщения о закрытии или завершении работы.

...