2010-12-08 14 views
5

Tengo una aplicación C# que quiero indicar que se cierre correctamente, a partir de un proceso diferente. También quiero poder solicitar que abra su ventana principal. Tengo una referencia a su manejador de ventana principal.cómo cerrar una ventana desde un proceso diferente

Sé que puedo hacerlo usando esquemas elaborados como remoting o WCF. la pregunta es ¿puedo hacerlo utilizando mecanismos simples tales como mensajes de ventana, o los controladores de eventos onClose de la ventana de la aplicación de C#

Respuesta

6

Pinvoke SendMessage() para enviar el mensaje WM_CLOSE a la ventana principal de la aplicación. Pedir que abra su ventana principal probablemente sea bastante difícil, no puede obtener el identificador de ventana hasta que se cree la ventana. Process.Start() sería la forma normal.

Una alternativa de bajo costo a WCF y superior a pinvoke es una tubería con nombre o un zócalo para interactuar con la aplicación. Esto requiere poder modificar el código fuente de la aplicación.

+1

al final, fui con esto, enfoque, combinado con dos respuestas útiles en otras preguntas: 1. [cómo manejar los mensajes de la ventana en wpf] (http://stackoverflow.com/questions/624367/how -to-handle-wndproc-messages-in-wpf) 2. [cómo transmitir un mensaje a todas las ventanas, incluidas las que están cerradas/invisibles] (http://stackoverflow.com/questions/1777668/send- message-to-a-windows-process-not-its-main-window) –

2

creo que probablemente podría utilizar FindWindow para encontrar la ventana secundaria correcta y luego SendMessage o PostMessage para enviar un WM_CLOSE.

Aquí hay otro StackOverflow question que trata de hacer esto en C#.

Editar: Aunque como dice la otra respuesta en esa pregunta, es posible que pueda usar Process.CloseMainWindow en su lugar.

0

Primero haría que mi aplicación de destino fuera consciente del hecho de que a otros procesos les gustaría activar su cierre o apertura de una ventana o realizar alguna acción. Esto debería implementarse de forma similar a llamar a cualquier método en otro proceso a través de la aplicación de destino o los métodos públicos. ..a menos que intente hacer algo con aplicaciones de terceros, creo que no debe intentar enviarles mensajes directamente para cerrar o cerrar.

Cuestiones relacionadas