G__D
Messages postés18Date d'inscriptionmercredi 13 juin 2007StatutMembreDernière intervention13 mai 2008
-
22 oct. 2007 à 16:09
G__D
Messages postés18Date d'inscriptionmercredi 13 juin 2007StatutMembreDernière intervention13 mai 2008
-
23 oct. 2007 à 12:39
Bonjour,
J'utilise l'Api GetAsyncKeyStatedans un timer pour capter la pression des touches du clavier.
La différence entre GetAsyncKeyState et GetKeyState est que GetAsyncKeyState indique si la touche a été enfoncée depuis le dernier appel de la fonction alors que GetKeyState indique que la touche est enfoncée au moment de l'appel de la fonction.
GetAsyncKeyState fonctionne très bien avec la plupart des touches de A à Z par exemple.
PAr contre, avec les touches F1 à F12 GetAsyncKeyState fonctionne comme GetKeyState.
C'est à dire que si j'appel ma fonction toute les 5 secondes dans un timer, si entre 2 coups de timer, j'ai appuyé sur A à la seconde 2, çà va être détecté, mais si j'ai appuyé sur F1 à la seconde 2, je ne le voit pas. Je ne le voit que si lors de l'appel de la fonction la touche est enfoncée.
Quelqu'un à déjà eu le soucis... et la solution qui va avec ????
Voici un petit code pour illustrer
Dans une Form avec command1, command2 , text1, timer1, list1
Il faut activer le timer...
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Sub Command1_Click()
List1.Clear
End Sub
Private Sub Command2_Click()
Timer1.Interval = Text1.Text
End Sub
Private Sub Timer1_Timer()
stext = ""
'Touche F1 à F12
For ncpt = 1 To 12
If GetAsyncKeyState(112 + (ncpt - 1)) < 0 Then
stext = stext & "F" & ncpt
End If
Next ncpt
For ncpt = 65 To 90
toto = GetAsyncKeyState(ncpt)
If toto <> 0 Then
stext = stext & Chr(ncpt)
End If
Next ncpt
If stext <> "" Then List1.AddItem stext
End Sub