La interceptación de evento de clic para todos los controles en una aplicación en C # (WinForms)

StackOverflow https://stackoverflow.com/questions/4279732

Pregunta

Quiero hacer una solicitud para interceptar todos los eventos de interfaz de usuario en todas las formas de mi solicitud y para escribirlos en un registro. Esta lata de datos que puede utilizar para ver qué controles son los más utilizados, en qué orden, etc. El problema es que quiero que esto suceda de forma automática, sin necesidad de modificar las clases existentes.

Me hizo un prototipo que se fija un método para un evento de clic para todos los controles en un formulario, pero ¿cómo se puede hacer esto para todas las formas? Reflexión necesita un objeto de destino en la manipulación de eventos, pero sólo el formulario de inicio se puede acceder fácilmente.

¿Hay una manera de conectar el constructor de un objeto? Entonces pude "inyectar" mi método en todos los eventos de la nueva forma. O tal vez hay otra manera de hacerlo.

Gracias de antemano!

Otros consejos

En la API de Windows esto se realiza mediante ganchos locales (Se puede fijar el gancho del ratón local usando SetWindowsHookEx función). Esta es la forma correcta de hacer su tarea. En C # es necesario utilizar P / Invoke con el fin de obtener acceso a SetWindowsHookEx.

Uno más tarea sería para que coincida con el HWND (mango ventanas) a que corresponde el control de Windows Forms. Leer este artículo de cómo hacer esto (a través de mensajes WM_GETCONTROLNAME).

También ver esta pregunta que es una duplicado de la suya.

tendrá que trabajar con mensajes de API de Win32, supongo.

Aquí está un pequeño ejemplo bajo la forma de tutorial .

debe ser capaz de lograr lo que quiere con los filtros de mensajes ! - P no directa / Invoke para Win32 API requerida

Consulte la ayuda en la IMessageFilter interfaz para más información.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top