Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[VB.NET] getasynckeystate

25 views
Skip to first unread message

Dave

unread,
Sep 16, 2010, 4:22:00 PM9/16/10
to
No no, niente Keylogger...
Volevo solo capire perchč a me non va :) nel senso, supponiamo di avere:

-1 timer impostato fin dall'inizio su enabled e intervallo a 1000

Io dichiaro cosě il getasynckeystate:
Private Declare Function GetAsyncKeyState Lib "user32" Alias
"GetAsyncKeyState" (ByVal vKey As Keys) As Integer

Nel codice del TIMER:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer1.Tick
If GetAsyncKeyState(Keys.F1) Then
MsgBox("Premuto")
End If
End Sub

Ecco, quando eseguo il codice l'IF viene sempre eseguito, anche se non premo
nulla sulla tastiera...Come mai?
Gli esempi riportati in rete mi paiono uguali al mio...

Andrea [Work]

unread,
Sep 17, 2010, 3:47:14 AM9/17/10
to
Il Thu, 16 Sep 2010 20:22:00 GMT, Dave ha scritto:

> Ecco, quando eseguo il codice l'IF viene sempre eseguito, anche se non premo
> nulla sulla tastiera...Come mai?
> Gli esempi riportati in rete mi paiono uguali al mio...

La funzione che valore ritorna?

Dave

unread,
Sep 17, 2010, 3:53:03 AM9/17/10
to
?>"Andrea [Work]" wrote in message
news:h6xegzst7yf1$.1pnvjhzme3n1n$.dlg@40tude.net...

>La funzione che valore ritorna?

Ho parzialmente risolto trovando un altro esempio che dichiara cosě:
Declare Auto Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As
Int32) As Int16

E nel TIMER:

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer1.Tick

If GetAsyncKeyState(Keys.F) = -32767 Then
MsgBox("Tasto premuto)
End If
End Sub

Cosě funziona, perň sto notando che se il programma inizia un loop tale
controllo sul TIMER non viene piů preso fino alla fine del loop... :-(
In pratica il loop deve terminare quando lo decido io tramite una pressione
di un tasto non avendo il focus sull'applicazione stessa!

Andrea [Work]

unread,
Sep 17, 2010, 4:10:18 AM9/17/10
to
Il Fri, 17 Sep 2010 07:53:03 GMT, Dave ha scritto:

> Cosě funziona, perň sto notando che se il programma inizia un loop tale
> controllo sul TIMER non viene piů preso fino alla fine del loop... :-(
> In pratica il loop deve terminare quando lo decido io tramite una pressione
> di un tasto non avendo il focus sull'applicazione stessa!

Non me ne intendo di threading ma la butto lě, provare con un thread
separato?

Rafunk

unread,
Sep 17, 2010, 4:32:11 AM9/17/10
to

"Andrea [Work]" <andrea.isw...@gmail.invalid> ha scritto nel
messaggio news:azsxbjos3u2i.1lv99iboc7w3g$.dlg@40tude.net...

> Il Fri, 17 Sep 2010 07:53:03 GMT, Dave ha scritto:
>
>> Cos� funziona, per� sto notando che se il programma inizia un loop tale
>> controllo sul TIMER non viene pi� preso fino alla fine del loop... :-(

>> In pratica il loop deve terminare quando lo decido io tramite una
>> pressione
>> di un tasto non avendo il focus sull'applicazione stessa!
>
> Non me ne intendo di threading ma la butto l�, provare con un thread
> separato?

Direi che non serve n� un secondo thread n� tantomeno un timer.
Basta cambiare la condizione di uscita dal loop "intensivo". Ad esempio:

Do ...
[blocco istruzioni]
If (GetAsyncKeyState(Keys.F1) <> 0) Then Exit Do
Loop

Bye

Raf

Andrea [Work]

unread,
Sep 17, 2010, 4:48:06 AM9/17/10
to
Il Fri, 17 Sep 2010 10:32:11 +0200, Rafunk ha scritto:

> Direi che non serve né un secondo thread né tantomeno un timer.


> Basta cambiare la condizione di uscita dal loop "intensivo"

Ah bhe messo così sicuramente :)

Dave

unread,
Sep 17, 2010, 7:22:46 AM9/17/10
to
?>"Rafunk" wrote in message news:i6v8vs$kdd$1...@alix.livenet.it...

>Direi che non serve né un secondo thread né tantomeno un timer.


>Basta cambiare la condizione di uscita dal loop "intensivo". Ad esempio:
>Do ...
> [blocco istruzioni]
> If (GetAsyncKeyState(Keys.F1) <> 0) Then Exit Do
>Loop

E io direi che mi sono proprio perso in un bicchiere d'acqua!!
Grazie mille per il suggerimento che si è rilevato funzionante! ;)

0 new messages