Simula spostamento / clic / tasto del mouse in un'applicazione non attiva
Domanda
So simulare gli eventi del mouse e della tastiera, ma si comportano come se li facessero l'utente, quindi influenzeranno la finestra attiva. Ciò di cui ho bisogno è simulare uno di quegli input, ma in una finestra non attiva.
Non sto dicendo che sia minimizzato, immagina per esempio che tu abbia msPaint e un blocco note. Il blocco note è davanti alla vernice. E vuoi simulare i clic del mouse in determinate coordinate della finestra di disegno, ma senza impostarlo come attivo, consentendo all'utente di continuare a utilizzare il blocco note che si trova davanti al disegno.
È possibile? Grazie!
Soluzione
Potresti fare quanto segue:
1) ottieni il HWND
della finestra all'interno della quale vuoi simulare gli eventi. Per fare ciò puoi usare la funzione FindWindow
, che accetta due parametri, uno è il nome della classe della finestra (puoi usare NULL
) e l'altro il nome del finestra (vedere la documentazione MSDN per i dettagli);
2) invia un messaggio alla finestra desiderata usando la funzione SendMessage
. I parametri sono: il precedente handle di finestra ottenuto ( HWND
), il messaggio (che può essere ad esempio WM_KEYDOWN
o WM_MOUSEMOVE
, WM_LBUTTONDOWN
ecc.), Il WPARAM
del messaggio (che in caso di WM_KEYDOWN
è il codice chiave virtuale della chiave) e infine il LPARAM
del messaggio (che nel caso di WM_KEYDOWN
è piuttosto complesso e dovresti controllare MSDN per i dettagli).
A mio avviso, questo è sufficiente per quello che intendi fare.
Altri suggerimenti
Beh, se conoscessi JAVA, potresti usare la classe robot.
Questa classe viene utilizzata per generare eventi di input del sistema nativo a fini di automazione di test, demo auto-funzionanti e altre applicazioni in cui è necessario il controllo del mouse e della tastiera
Forse c'è qualcosa di simile in .net?