Domanda

voglio fare una domanda di intercettare tutti gli eventi dell'interfaccia utente in tutte le forme della mia applicazione e per scriverli in un registro. Questo può essere usato dati rispetto per vedere quali controlli sono i più utilizzati, in quale ordine, ecc Il problema è che io voglio che questo accada automaticamente, senza modificare le classi esistenti.

Ho fatto un prototipo che si attacca un metodo per un evento click per tutti i controlli in un modulo, ma come può questo essere fatto per tutte le forme? Riflessione deve un oggetto target quando manipolando gli eventi, ma solo la forma di avvio può essere facilmente accessibili.

C'è un modo per collegare il costruttore di un oggetto? Poi ho potuto "iniettare" il mio metodo a tutti gli eventi del nuovo modulo. O forse c'è un altro modo per farlo.

Grazie in anticipo!

Altri suggerimenti

In Windows API questo viene fatto utilizzando hook locali (è possibile impostare hook locale mouse utilizzando SetWindowsHookEx funzione). Questo è il modo corretto di fare il vostro compito. In C # è necessario utilizzare P / Invoke al fine di ottenere l'accesso a SetWindowsHookEx.

Un altro compito sarebbe adatta al HWND (handle finestre) a corrispondenti controllo WinForms. Leggi questo articolo per sapere come fare questo (tramite un messaggio WM_GETCONTROLNAME).

Si veda anche questa domanda che è un duplicate del tuo.

Si dovrà lavorare con i messaggi API del Win32, immagino.

Ecco un piccolo esempio sotto forma di esercitazione .

Si dovrebbe essere in grado di ottenere quello che vuoi con - senza P diretta / Invoke per Win32 API richieste

, vedere la guida sulla IMessageFilter interfaccia per maggiori informazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top