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 - Combinazione di tasti in Visual Basic.NET
Forum - C# / VB.NET - Combinazione di tasti in Visual Basic.NET

Avatar
Adryx (Normal User)
Newbie


Messaggi: 1
Iscritto: 26/04/2011

Segnala al moderatore
Postato alle 16:21
Martedý, 26/04/2011
Ciao a tutti, volevo chiedervi come implementare in un programma, un'azione in seguito alla pressione di una particolare combinazione di tasti come Ctrl + Alt + H o Ctrl + Alt + S

PM
Avatar
Question (Normal User)
Rookie


Messaggi: 58
Iscritto: 14/12/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 20:55
Martedý, 26/04/2011
Beh, se vuoi che l'applicazione "se ne accorga" anche quando l'utente non la ha in focus l'unica Ŕ usare un timer (scegli tu quale tipologia) che verifichi in lassi di tempo molto brevi lo stato fisico dei tasti.
Per fare ci˛ potresti usare un'API chiamata GetAsyncKeyState che richiede il codice della key e che restituisce due valori Short: -32767 se il tasto Ŕ down e -32768 se Ŕ up

Eccoti un esempio che verifica lo status di "a" (dove tmrCheck Ŕ un controllo timer):
Codice sorgente - presumibilmente VB.NET

  1. Public Class MyForm
  2.     Declare Function GetAsyncKeyState Lib "user32" (ByVal KeyCode As Int32) As Int16
  3.  
  4.     Private Sub tmrCheck_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrCheck.Tick
  5.         If GetAsyncKeyState(Keys.A) = -32767 Then MessageBox.Show("Adryx has just pressed A")
  6.     End Sub
  7. End Class


http://msdn.microsoft.com/en-us/library/ms646293%28v=vs.85 ...

N.B. ricordati che ci sono diverse tipologie di CTRL (destro,sinistro etc..) ma per fortuna l'enum Keys li raccoglie tutti :pat:

Ultima modifica effettuata da Question il 26/04/2011 alle 20:59
PM
Avatar
()
Newbie


Messaggi:
Iscritto:

Up
1
Down
V
Segnala al moderatore
Postato alle 12:42
Mercoledý, 27/04/2011
Disapprovo l'approccio di Question... perchŔ usare un timer e le API se puoi usare semplicemente l'evento KeyPress/KeyDown? :noway:
Poi utilizzi l'enum Keys per sapere se i pulsanti della combinazione sono stati premuti.

Se invece devi individuare la pressione anche quando la tua form non Ŕ attiva, allora si che devi ricorrere all'API GetAsyncKeyState, ma ti conviene farlo non in un timer :nono: ma in un BackgroundWorker o in un thread separato apposta.
PerchŔ non il timer?
PerchŔ con un thread separato riesci a eseguire la routine moltissime volte pi¨ spesso che al tick di un timer

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
1
Down
V
Segnala al moderatore
Postato alle 15:17
Mercoledý, 27/04/2011
KeyPress e KeyDown sono eventi scatenati da controlli dell'applicazione, quindi interni e dipendenti dall'applicazione stessa. Se le shortcut devono funzionare quando l'app Ŕ in background, non puoi usare alcun evento gestito.

Ti consiglio di aggiungere un hook handler per la combinazione dei tasti:
http://msdn.microsoft.com/en-us/library/ms632589.aspx

PM
Avatar
Question (Normal User)
Rookie


Messaggi: 58
Iscritto: 14/12/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 17:09
Mercoledý, 27/04/2011
Infatti io gli ho detto apposta di scegliere lui la tipologia del timer :k:

PM