Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Rilevare pressione tasto stamp...
Forum - C# / VB.NET - [VB.NET] Rilevare pressione tasto stamp...

Avatar
ferruccio94 (Member)
Pro


Messaggi: 135
Iscritto: 07/12/2009

Segnala al moderatore
Postato alle 13:05
Martedì, 15/02/2011
Questo topic è stato chiuso dal moderatore

Chi può dirmi come rilevare la pressione del tasto stamp ed eseguire un codice quando il programma è in background (ad esempio quando il programma è avviato ma sto giocando...)


PM
Avatar
Dedalux (Member)
Pro


Messaggi: 103
Iscritto: 15/12/2010

Segnala al moderatore
Postato alle 14:18
Martedì, 15/02/2011
Se la finestra ha il focus è semplice.
Ma nel tuo caso l'unica cosa che mi viene in mente è creare un hook per la tastiera.

Edit: se hai bisogno è una cosa che ho già fatto.

Ultima modifica effettuata da Dedalux il 15/02/2011 alle 15:06


«La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.»

Isaac Asimov
PM
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 15:56
Martedì, 15/02/2011
Suggerisco di usare la funzione "GetAsincKeyState" che funziona sempre anche quando la tua applicazione è in background.

Inseriscila in un timer in questo modo ad ogni Tick controlli se è premuto.
Es.
Dichiarazione:
Codice sorgente - presumibilmente VB.NET

  1. Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer


Uso:
Codice sorgente - presumibilmente Delphi

  1. If GetAsyncKeyState(Keys.PrintScreen) <> 0 Then
  2.       msgbox "Tasto premuto"
  3.     End If



Il software è come il sesso, è meglio quando è libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. È più facile spiegare il sesso a una vergine.
Robert Anson Heinle
PM
Avatar
Dedalux (Member)
Pro


Messaggi: 103
Iscritto: 15/12/2010

Segnala al moderatore
Postato alle 16:08
Martedì, 15/02/2011
Il GetAsyncKeyState non sapevo funzionasse anche in background, e in effetti non avevo mai provato.

Comunque se volessi intercettare il messaggio dalla tastiera prima che giunga all'applicazione serve un hook, mentre, correggimi se dico una cagata, mi pare che il GetAsync rilevi il messaggio dopo che è stato processato.


«La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.»

Isaac Asimov
PM
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 16:51
Martedì, 15/02/2011
Non so se viene rilevato prima o dopo...
Sinceramente per l'utilizzo che ne ho fatto io, non mi si è mai posto tale problema...


Il software è come il sesso, è meglio quando è libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. È più facile spiegare il sesso a una vergine.
Robert Anson Heinle
PM
Avatar
ferruccio94 (Member)
Pro


Messaggi: 135
Iscritto: 07/12/2009

Segnala al moderatore
Postato alle 16:52
Martedì, 15/02/2011
Testo quotato

Postato originariamente da walker93:

Suggerisco di usare la funzione "GetAsincKeyState" che funziona sempre anche quando la tua applicazione è in background.

Inseriscila in un timer in questo modo ad ogni Tick controlli se è premuto.
Es.
Dichiarazione:
Codice sorgente - presumibilmente VB.NET

  1. Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer


Uso:
Codice sorgente - presumibilmente Delphi

  1. If GetAsyncKeyState(Keys.PrintScreen) <> 0 Then
  2.       msgbox "Tasto premuto"
  3.     End If




Ho provato questo codice, ma appena va in debug restituisce questo:

Una chiamata alla funzione PInvoke 'ScreenCaptureAndSave!ScreenCaptureAndSave.Form1::GetAsyncKeyState' ha sbilanciato lo stack. Questo problema può verificarsi quando la firma PInvoke gestita non corrisponde alla firma di destinazione non gestita. Verificare che la convenzione di chiamata e i parametri della firma PInvoke corrispondano alla firma di destinazione non gestita.

Come risolvere...


PM
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 17:14
Martedì, 15/02/2011
Semplice cambia la dichiarazione da come è adesso:
Codice sorgente - presumibilmente VB.NET

  1. Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer



a questa:
Codice sorgente - presumibilmente VB.NET

  1. Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Integer) As Integer


è cambiata la dichiarazione di vKey. Sarebbe stata Long con vb6...


Il software è come il sesso, è meglio quando è libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. È più facile spiegare il sesso a una vergine.
Robert Anson Heinle
PM
Avatar
ferruccio94 (Member)
Pro


Messaggi: 135
Iscritto: 07/12/2009

Segnala al moderatore
Postato alle 17:35
Mercoledì, 16/02/2011
Grazie, adesso va bene.


PM