Sandro Bizioli


Chi sogna di giorno conosce molte cose che sfuggono a chi sogna soltanto di notte. (E.A.Poe)
Mappa

Intercettare la pressione di un tasto anche fuori dall'evento che l'ha causata

Una cosa che potrebbe tornare utile è la possibilità di intercettare la pressione di un tasto anche fuori dall'evento che l'ha causata.
Mi spiego meglio.
Supponiamo di voler far comparire una MessageBox quando il mouse passa sopra un determinato controllo. Fin qui nulla di complicato, ci appoggiamo all'evento MouseMove dell'oggetto, ma se volessimo monitorare se l'operatore sta premendo un determinato tasto od una combinazione di tasti cosa facciamo?
Gli eventi KeyPress, KeyDown ecc. non ci vengono in aiuto, infatti essi vengono scatenati nel momento in cui il controllo ha il focus e noi premiamo un tasto da tastiera. Al massimo possiamo intercettare la pressione di un tasto a livello di form con la proprietà KeyPreview, ma il mouse qui non lo recuperiamo.
Per sapere in ogni istante il tasto che è attualemnte premuto da tastiera ci affidiamo all'API di Windows GetAsyncKeyState.

Private
Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Keys) As Short

Private Sub object_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
     If GetAsyncKeyState(Keys.ControlKey) < 0 And GetAsyncKeyState(Keys.Alt) < 0 Then
          MsgBox("Stai premento Ctrl + Alt")
     End If
End Sub
Categoria: VB.Net
giovedì, 16 mar 2006 Ore. 08.59
Statistiche
  • Views Home Page: 109.873
  • Views Posts: 560.037
  • Views Gallerie: 108.926
  • n° Posts: 227
  • n° Commenti: 222
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003