Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Sapere quando il mouse si muove e quando si ferma?
Forum - C# / VB.NET - Sapere quando il mouse si muove e quando si ferma?

Avatar
jimmypatane (Normal User)
Newbie


Messaggi: 3
Iscritto: 04/05/2011

Segnala al moderatore
Postato alle 8:51
Mercoledì, 29/06/2011
Ho un problema all'apparenza banale, ma il fatto di non essere ancora sufficientemente pratico con vb.net lo rende insormontabile.

Ho bisogno di sapere quando il mouse si sta muovendo e soprattutto quando è fermo. Ai 2 eventi devo associare l'avvio e lo spegnimento di un timer in modo da ottenere questo efetto:
quando il mouse è fermo il timer parte e se arriva alla fine del conteggio chiude il form, quando il mouse si muove, invece, spegne il timer che si riattiverà solo quando il mouse non si muove più.

Il movimento del mouse lo intercetto con Form1.MouseMove, ma quando si ferma?
Come faccio ad intercettare l'evento?

Spero di essere stato chiaro.
Grazie

PM
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 9:57
Mercoledì, 29/06/2011
dovresti usare un 2° timer attivo sempre che controlla tutte le volte la posizione del mouse, se è uguale a quella memorizzata nel tick precedente allora non si è mosso, altrimenti si è spostato, e puoi anche capire in che direzione e di quanti pixel...

quindi non ti servirebbe nemmeno l'evento mousemove...

Grazie per la risposta... proverò! - jimmypatane - 29/06/11 12:50
PM
Avatar
Goblin (Member)
Expert


Messaggi: 375
Iscritto: 02/02/2011

Up
1
Down
V
Segnala al moderatore
Postato alle 14:57
Mercoledì, 29/06/2011
Io userei i messaggi di windows per testare le coordinate del mouse con una variabile che si aggiorna di volta in volta, se le coordinate della variabile e del mouse corrispondono vuol dire che il mouse è fermo.
L'unica pecca potrebbe essere (non ne sono sicuro), che l'evento WM_MOUSEMOVE avviene anche fuori dall'applicativo, cmq prova a vedere su MSDN cosa dicono ...
http://msdn.microsoft.com/en-us/library/aa928314.aspx
G.

tranne per le API è uguale al mio metodo...ma ricorrere alle API per un problema cosi banale è esagerato... - walker93 - 29/06/11 16:39


Ibis redibis non morieris in bello
PM
Avatar
Goblin (Member)
Expert


Messaggi: 375
Iscritto: 02/02/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 17:05
Mercoledì, 29/06/2011
@walker93
Non voglio minimamente mettere in dubbio la tua soluzione, ma le due proposte non mi sembrano uguali, diciamo che ( "forse" Vedi evento WM_MOUSEMOVE) giungono allo stesso risultato, ma nel tuo caso c'e' un timer aggiuntivo che gira in mezzo all'applicazione, nel caso di uso di API ci pensa il gestore di messaggi a processare la posizione del mouse, l'utente deve solo fare un controllo, ossia non c'e' codice rindondante.
Come ho detto non voglio sminuire la tua soluzione, ho dato solo lo spunto per una soluzione alternativa, adesso jimmypatane faccia le valutazioni del caso e in base a quelle può scegliere l'una o l'altra, non voglio soffermarmi su PRO/CONTRO nell'uso di una tecnica piuttosto che un altra.
G.

Tra l'altro non serve nemmeno ricorrere a funzioni esterne, basta eseguire un override della procedura WndProc, intercettare il messaggio WM_MOUSEMOVE e agire di conseguenza. - Phil93 - 29/06/11 17:14
Vedremo cosa preferisce, so che il timer non è una soluzione "elegante" ma penso che per jimmypatane sia più facile da gestire rispetto alle API... è per questo che ho postato quella soluzione: nonostante sia meno elegante mi sembrava più adatta alle conoscenze di jimmypatane... - walker93 - 29/06/11 18:23


Ibis redibis non morieris in bello
PM