Estoy trabajando en algo que requerirá el monitoreo de muchas formas. Desde fuera del formulario, y sin poner ningún código dentro del formulario, necesito capturar de alguna manera los eventos de estos formularios, muy probablemente en forma de mensajes de Windows. Pero, ¿cómo capturaría los mensajes de Windows desde fuera de la clase con la que está relacionado?¿Cómo capturo ciertos eventos de un formulario desde fuera del formulario?
Mi proyecto tiene un objeto que envuelve cada formulario que está supervisando, y supongo que este manejo irá en este objeto. Esencialmente, cuando creo un formulario que quiero monitorear, creo un objeto correspondiente que a su vez se agrega a una lista de todos los formularios creados. Lo que es más importante, cuando ese formulario está cerrado, tengo que saberlo para poder eliminar el objeto envoltorio de este formulario de la lista.
Estos eventos incluyen:
- Minimizar Maximizar
- Restaurar
- Cerrar
- foco de entrada/salida
Lo que no quiero:
- Cualquier código dentro de cualquier forma o unidades de la forma de este manejo
- La herencia de las formas de cualquier forma base personalizado
- Usando eventos del formulario como
OnClose
porque van a ser utilizados para otros fines
Lo yo QUIERO:
- Manejo de mensajes de ventanas para estos eventos
- Algún consejo sobre cómo ge Mensajes t ventanas desde fuera de la clase
- Qué mensajes ventanas que necesito para escuchar
Pregunta re-escrito con misma información pero enfoque diferente
No estoy tan seguro pero creo que también puede considerar la inyección de código como lo fue hecho por algún marco AOP. – menjaraz
Sabe que puede reemplazar los eventos de formulario con su propio controlador pero mantener el valor anterior y luego invocar el controlador anterior desde su controlador de reemplazo, ¿verdad? Eso es más simple que la verdadera "inyección de código" o verdadero "enganche". Esto es muy parecido a cómo funcionan los "manejadores de interrupción" en la mayoría de los sistemas operativos. Lo llamamos "reemplazo de vectores". –
@WarrenP Lo sé, y probablemente lo haría si David no hubiera mencionado un método más limpio. Pero esta estrategia (al menos en mi opinión) es probablemente 90-95% efectiva (puedo prever algunos problemas que podrían estropear esta situación). La solución de David es 100% efectiva. –