2010-12-08 4 views
5

다른 프로세스에서 종료하도록 멋지게 지시하고 싶은 C# 응용 프로그램이 있습니다. 기본 창을 열어달라고 요청할 수도 있습니다. 주 창 핸들에 대한 참조가 있습니다.다른 프로세스에서 창을 닫는 방법

나는 리모팅이나 WCF와 같은 정교한 스키마를 사용하여 그것을 할 수 있음을 알고있다. 질문은 내가 그 다음 SendMessage을 같은 창 메시지 또는

답변

6

는 PInvoke를 sendMessage 첨부() 응용 프로그램의 메인 윈도우에 WM_CLOSE 메시지를 보낼 수 있습니다. 그것의 메인 윈도우를 여는 것이 꽤 어려울 것입니다, 당신은 윈도우가 생성 될 때까지 윈도우 핸들을 얻을 수 없습니다. Process.Start()는 정상적인 방법입니다.

WCF 대신 저렴한 비용으로 제공되는 pinvoke는 앱과 인터페이스 할 수있는 명명 된 파이프 또는 소켓입니다. 이를 위해서는 앱의 소스 코드를 수정할 수 있어야합니다.

+1

결국 나는 다른 질문에서 두 가지 유용한 답변과 결합 된이 접근 방식을 사용했습니다. 1. [wpf에서 창 메시지를 처리하는 방법] (http://stackoverflow.com/questions/624367/how -windproc-messages-in-wpf) 2. [닫히고 보이지 않는 것을 포함하여 모든 창에 메시지를 브로드 캐스트하는 방법] (http://stackoverflow.com/questions/1777668/send- 메시지 - 투 - 윈도우 - 프로세스 - 메인 - 윈도우가 아닌) –

2

난 당신이 아마 올바른 자식 창을 찾을 수 FindWindow를 사용할 수 있다고 생각하는 C# 응용 프로그램의 창으로 onClose 이벤트 핸들러와 같은 단순한 메커니즘을 사용하여 수행 할 수 있습니다 또는 PostMessageWM_CLOSE을 전송합니다.

또 다른 StackOverflow question이 C#에서이 작업을 처리합니다.

편집 : 그 대답에서 다른 답변이 표시 되더라도 대신 Process.CloseMainWindow을 사용할 수 있습니다.

0

먼저 대상 응용 프로그램이 다른 프로세스가 창을 닫거나 열거 나 다른 작업을 수행하려고한다는 사실을 "인식"하게 만듭니다. 이는 대상 응용 프로그램의 api 또는 public 메소드를 통해 다른 프로세스의 메소드를 호출하는 것과 비슷하게 구현해야합니다. .. 당신이 제 3 자 응용 프로그램으로 뭔가를하려고하지 않는다면, 나는 그들에게 메시지를 보내서 직접 종료하거나 종료하지 말아야한다고 생각합니다.