Domanda

Sto scrivendo un'app molto specializzata in C # che galleggia come una finestra per lo più trasparente sull'intero desktop. Voglio essere in grado di creare e trasmettere eventi del mouse ad applicazioni dietro la mia, e farle sembrare funzionare "normalmente", rispondendo a quegli eventi. Sarebbe anche preferibile che il gestore delle finestre potesse rispondere.

Non sono un guru di Windows e non sono sicuro di come farlo al meglio.

Da questa pagina: http://bytes.com/forum/thread270002.html

sembrerebbe che mouse_event sarebbe buono, tranne che dal momento che la mia app sta fluttuando su tutto il resto, immagino che i miei eventi generati non arriverebbero mai alle altre app sottostanti.

Sembra che l'alternativa sia SendMessage, ma ciò richiede una buona dose di manipolazione manuale delle finestre e gli eventi del mouse generati non sono " autentici. "

Qualche idea sul modo migliore per affrontarlo?

È stato utile?

Soluzione 2

Dopo aver esaminato gli hook di sistema e altre soluzioni di basso livello ho trovato un metodo molto più semplice.

Per prima cosa, imposta TransparencyKey e BackColor del modulo in modo che siano uguali. Questo non ha fatto alcuna differenza visiva per me poiché il mio modulo era già visivamente trasparente, ma questo aiuterà a far passare gli eventi del mouse.

In secondo luogo, il codice seguente consentirà agli eventi del mouse di "cadere". tramite il tuo modulo.

protected override CreateParams CreateParams
{
    get
    {
        CreateParams createParams = base.CreateParams;
        createParams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT

        return createParams;
    }
}

Infine, imposta TopMost su true.

Il modulo ora fluttuerà visivamente su tutto, ma si concentrerà su tutte le altre app.

Altri suggerimenti

Sembra che tu voglia fare qualcosa come filtrare l'input dell'utente.

Forse hai solo bisogno di un gancio per tastiera / mouse.

Forse potresti dare un'occhiata alla chiamata API Windows SetWindowsHookEx.

Dovrebbero esserci anche abbastanza esempi su come farlo in C #, la prima cosa che ho trovato è stata questo link (forse non è il miglior articolo ma dovrebbe darti l'idea).

Se si disabilita il controllo e si ritorna, è possibile passare l'evento MouseDown al genitore.

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