Quiero registrar todos los clics en un control MainMenu que estoy usando en una aplicación C # WinForms. El sistema de menú existente es muy extenso y parte de él se genera sobre la marcha. Estoy buscando una forma de agregar algo directamente a MainMenu que me proporcione el objeto MenuItem cuando se haga clic en él.

He usado Application.AddMessageFilter para capturar todos los clics en el resto de la aplicación, pero parece que el control MainMenu de alguna manera evita el seguimiento de esta manera.

0
JustinDoesWork 21 mar. 2012 a las 21:48
Suena muy simple para mí. En los eventos de clic de MenuItem, pase los clics de e.Buttons a su almacén de datos de clics del mouse.
 – 
Jeremy Thompson
22 mar. 2012 a las 07:10
El menú se genera dinámicamente en varios lugares diferentes, estoy buscando algo que pueda agregar una vez.
 – 
JustinDoesWork
22 mar. 2012 a las 17:08

1 respuesta

La mejor respuesta

Si necesita algo que sea global, eche un vistazo a http://globalmousekeyhook.codeplex.com/

Esta biblioteca le permite tocar el teclado y el mouse y detectar y registrar su actividad incluso cuando una aplicación está inactiva y se ejecuta en segundo plano.

No estoy seguro de si haría esto en mis aplicaciones, ciertamente no pasarían las pruebas de software 'limpias' por parte de los auditores, pero tal vez su aplicación sea interna de la empresa y capturar esta aplicación 'particular / única' pulsaciones de teclas y movimientos del mouse satisfaría la seguridad requisitos.

1
Jeremy Thompson 23 mar. 2012 a las 01:09
Lo siento, pero tengo órdenes estrictas de solo capturar lo que está sucediendo en este control de MainMenu, nada más.
 – 
JustinDoesWork
23 mar. 2012 a las 01:13
¿Por qué escribiste "He usado Application.AddMessageFilter para capturar todos los clics en el resto de la aplicación"?
 – 
Jeremy Thompson
23 mar. 2012 a las 01:15
Esa funcionalidad está hecha y funciona correctamente en todas las demás situaciones menos en esta. Mi tarea ahora es solucionar este problema.
 – 
JustinDoesWork
23 mar. 2012 a las 01:18
Bien, si agrega dinámicamente menús, obviamente, debe asignar un EventHandler para el evento de clic. Así que tenga un Menu_ClickEvent principal y capture los clics allí, luego pase los clics de e.Buttons a su almacén de datos de clics del mouse.
 – 
Jeremy Thompson
23 mar. 2012 a las 01:24