2010-02-09 19 views
5

Desidero essere in grado di registrare movimenti del mouse, clic e input da tastiera da un utente. Sarebbe bello se fosse una soluzione multipiattaforma.registra movimenti del mouse, clic e input da tastiera con Java o C++

mi piacerebbe tornare qualcosa di simile (pseudo codice):

del mouse si trasferì a 500, 500 del mouse doppio clic del mouse si trasferì a 800, 300 sinistro del mouse cliccato tastiera digitato "Ciao Mondo "

C++ o Java hanno classi che possono eseguire questa operazione? Se stavo usando C++, probabilmente lavorerei con il framework QT.

Edit:

avrei dovuto dire questo in origine, ma voglio registrare i movimenti e clic al di fuori della applicazioni GUI, quindi sul desktop troppo.

+2

È necessario registrare l'input a livello di sistema o solo nella finestra principale dell'applicazione? – finnw

+0

vedi questa domanda simile: http://stackoverflow.com/questions/2147903/retrieve-window-handle-and-press-button-programatically – lsalamon

+1

la domanda è per C# – Joe

risposta

0

GLUT fa questo, ma è legato a OpenGL che potrebbe essere eccessivo per il progetto.

OpenGL è multipiattaforma.

+0

o freeglut (http://freeglut.sourceforge.net /) che viene mantenuto attivamente a differenza di GLUT, che è stato abbandonato più di 10 anni fa – Manuel

0

Non credo che ci sia un toolkit multipiattaforma specifico per l'acquisizione di input da una finestra e nient'altro, ma la maggior parte dei toolkit fornisce questa funzionalità. Due buone opzioni sono:

  1. Utilizzare SDL, poiché è abbastanza leggero e può gestire input semplici.
  2. implementare la funzionalità in modo nativo per piattaforma, come dovrebbe essere banale in X11, Windows, Mac OS X, ecc
0

Se si vuole intrappolare gli eventi in tutto il sistema GUI, non solo un'app, c'è non molta probabilità di una soluzione multipiattaforma. Tuttavia, la parte di hook dell'evento potrebbe essere facilmente separata dalla parte di registrazione, in modo da poter rendere la maggior parte del programma multipiattaforma.

Per Windows, you need this 17 year old (!) document. (Man, sto invecchiando!)

+0

http://msdn.microsoft.com/en-us/library/ms997537.aspx: "* Questo contenuto è stato rimosso. *" –

+1

@Martin - Link aggiornato per andare su www.archive.org –

0

Su Windows, questo è chiamato Journal Record Hook. Dovresti scrivere la parte hook in C o C++, potrebbe essere tecnicamente possibile fare in java, ma non è una buona idea, vuoi che la tua procedura di hook abbia il minor numero possibile di dipendenze e che sia il più veloce possibile. I ganci del sistema, , in particolare il diario, aggiungono un sacco di overhead alla tastiera e al mouse, per ridurre al minimo l'impatto il più possibile.

Si installano gli hook di Windows utilizzando SetWindowsHookEx passando WH_JOURNALRECORD per ottenere un hook di registrazione del diario.

Si potrebbe anche (forse) ottenere questo funzionamento installando sia WH_KEYBOARD_LL e , ma le due procedure di hook verranno chiamate separatamente e si dovrà scrivere il proprio codice per mettere in ordine gli eventi.

Dubito che troverete una soluzione multipiattaforma.

Problemi correlati