Problème getasynckeystate

StiriX Messages postés 67 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 2 septembre 2009 - 26 août 2006 à 20:10
StiriX Messages postés 67 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 2 septembre 2009 - 26 août 2006 à 22:13
Bonjour,
je voudrais mettre la valeur de mon tableau dans la fonction getasynckeystate comme suis :

dim tableau
tableau=array("un","deux")
for i=0 to 1 step 1
if (getasynckeystate(tableau(i)) and &H1) = &H1 Then
Msgbox("vous avez cliquez sur le bouton gauche de votre souris")
end if
next

avec en module ceci :

Declare function getasynckeystate lib "user32.dll" (byval vkey as long) as Integer
public const un= &H1

Une erreur vient à getasynckeystate(tableau(i)), il ne reconnait pas la valeur du tableur.

Merci beaucoup .
A voir également:

14 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
26 août 2006 à 20:16
salut,

"un" <> untableau array(...)> variant

++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
StiriX Messages postés 67 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 2 septembre 2009
26 août 2006 à 20:35
désolé j'ai pas compris ce que tu as voulu dire, en fait je veux pas que tableau(i) soit interprété par la fonction comme étant tableau(i) mais comme étant le mot "un".
 Merci.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
26 août 2006 à 21:20
ok.
alors tu peux me traduire (avec tes mots) la signification de çà stp :
getasynckeystate(tableau(i)) and &H1) = &H1

qu'est-ce que tu .... penses faire avec ce test ?

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
StiriX Messages postés 67 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 2 septembre 2009
26 août 2006 à 21:25
je compte vérifier si l'utilisateur a cliqué sur le bouton gauche de sa souris....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
26 août 2006 à 21:29
çà j'ai bien compris, c'est l'intention du code que je ne vois pas.

utiliser le mot "un", quel rapport?
déclarer une variable un en long à 1&, ok mais pourquoi?
faire un And avec une string et un long, quoi?!!
utiliser cette API pour la souris, hein??!!

The GetAsyncKeyState function determines whether a key is up or down at the time the function is called, and whether the key was pressed after a previous call to GetAsyncKeyState.

++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
26 août 2006 à 21:31
Il ne faut pas utiliser l'API GetAsyncKeyState mais GetKeyState :

<small>
Coloration syntaxique automatique </small>
' API pour test si une touche est enfoncée
Private Declare Function GetKeyState Lib "user32" ByVal nVirtKey As Long) As Integer 

' Déclaration des touches
Const VK_LBUTTON = 1  '  *** bouton gauche souris

'  *** Place un Timer dans une Form pour tester :
Private Sub Timer1_Timer() 

    If GetKeyState(VK_LBUTTON) >= 0 Then 
        Me.Caption = "Bouton gauche de la souris relaché" 
    Else 
        Me.Caption = "Bouton gauche de la souris enfoncé" 
    End If 
End Sub 
<small>
Coloration syntaxique automatique </small>

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
26 août 2006 à 21:35
C'est clair ^^

l'autre (reprends moi PCPT si je me trompe) est pour garder une touche 'virtuellement' enfoncée.

La valeur vkey de getasynckeystate prend la valeur d'une touche, et simule un appuie tant que tu ne lui dis pas d'arrêter la simulation.
Par ex : tu lance la fonction pour la Touche Maj, bah à chaque fois que tu écriras qque chose, ce sera en Majuscule. (même après fermeture du prog, il me semble)

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
26 août 2006 à 21:48
non mortalino, ta description est celle de keyb_event.

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
StiriX Messages postés 67 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 2 septembre 2009
26 août 2006 à 21:49
Effectivement Mortalino ton code fonctionne bien et il est moins lourd que l'autre. Mais je vais me retrouvé au même probleme. Si je stock le nom de toutes mes constantes dans un array (par exemple: tabl = array("lettrea","lettreb","lettrec"), il ne va pas les interpréter; il va prendre tabl(i) et nom pas "lettrea", "lettreb" ou "lettrec".

for i=0 to 2 step 1
 If GetKeyState( tabl(i) ) = 1 Then
        'code en fonction de la touche saisie
End If

et hmmm tu trouve ou les autres valeurs des touches ?

merci beaucoup ^^
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
26 août 2006 à 21:55


PCPT : oui, je confonds (après 11h de Topic ^^ )StiriX, t'as pas vraiment répondu sur l'intention du code !!Les constantes :ConstanteValeurDéfinitionVK_F978Touche f9VK_F877Touche f8VK_F675Touche f6VK_F776Touche f7VK_F574Touche f5VK_F473Touche f4VK_F372Touche f3VK_F271Touche f2VK_F170Touche f1VK_DIVIDE6FTouche "division".VK_DECIMAL6ETouche séparateur décimal.VK_SUBTRACT6DTouche "soustraction".VK_SEPARATOR6CTouche de séparation.VK_ADD6BTouche "addition".VK_MULTIPLY6ATouche "multiplication".VK_NUMPAD969Touche 9 (clavier numérique).VK_NUMPAD868Touche 8 (clavier numérique).VK_NUMPAD767Touche 7 (clavier numérique).VK_NUMPAD666Touche 6 (clavier numérique).VK_NUMPAD565Touche 5 (clavier numérique).VK_NUMPAD464Touche 4 (clavier numérique).VK_NUMPAD363Touche 3 (clavier numérique).VK_NUMPAD262Touche 2 (clavier numérique).VK_NUMPAD161Touche 1 (clavier numérique).VK_NUMPAD060Touche 0 (clavier numérique).VK_APPS5DTouche Windows applications (Microsoft Natural Keyboard).VK_RWIN5CTouche Windows droite (Microsoft Natural Keyboard).VK_LWIN5BTouche Windows gauche (Microsoft Natural Keyboard).VK_Z5ATouche zVK_Y59Touche yVK_X58Touche xVK_W57Touche wVK_V56Touche vVK_U55Touche uVK_T54Touche tVK_S53Touche sVK_R52Touche rVK_Q51Touche qVK_P50Touche pVK_O4FTouche oVK_N4ETouche nVK_M4DTouche mVK_L4CTouche lVK_K4BTouche kVK_J4ATouche jVK_I49Touche iVK_H48Touche hVK_G47Touche gVK_F46Touche fVK_E45Touche eVK_D44Touche dVK_C43Touche cVK_B42Touche bVK_A41Touche aVK_939Touche 9VK_838Touche 8VK_737Touche 7VK_535Touche 5VK_636Touche 6VK_333Touche 3VK_434Touche 4VK_131Touche 1VK_232Touche 2VK_030Touche 0VK_HELP2FTouche "aide".VK_DELETE2ETouche "Suppression".VK_INSERT2DTouche insertion.VK_SNAPSHOT2CTouche impression écran.VK_EXECUTE2BTouche "exécution".VK_SELECT29Touche "selection".VK_DOWN28Flèche curseur bas.VK_RIGHT27Flèche curseur droit.VK_UP26Flèche curseur haut.VK_LEFT25Flèche curseur gauche.VK_HOME24Touche "début".VK_END23Touche "fin".VK_NEXT22Touche "page bas".VK_PRIOR21Touche "page haut".VK_SPACE20Touche Espace.VK_ESCAPE1BTouche Echap.VK_CAPITAL14Touche verrouillage majuscule.VK_PAUSE13Touche "Pause".VK_MENU12Touche "Alt".VK_CONTROL11Touche "Control".VK_SHIFT10Touche "Shift".VK_RETURN0DTouche "Entrée".VK_CLEAR0CTouche d'effacement.VK_TAB09Touche tabulation.VK_BACK08Touche retour arrière.VK_MBUTTON04Bouton du milieu de la souris (le 3ème boutton).VK_CANCEL03Control-break.VK_RBUTTON02Bouton droit de la souris.VK_LBUTTON01Bouton gauche de la souris.VK_F1079Touche f10VK_F117ATouche f11VK_F127BTouche f12VK_F137CTouche f13VK_F147DTouche f14VK_F157ETouche f15VK_F167FTouche f16VK_F1780HTouche f17VK_F1881HTouche f18VK_F1982HTouche f19VK_F2083HTouche f20VK_F2184HTouche f21VK_F2285HTouche f22VK_F2386HTouche f23VK_F2487HTouche f24VK_NUMLOCK90Touche verrouillage numérique.VK_SCROLL91Touche verrouillage défilement.VK_ATTNF6Touche "Attn".VK_CRSELF7Touche "CrSel".VK_EXSELF8Touche "ExSel".VK_PLAYFATouche "Play".VK_ZOOMFBTouche "Zoom".VK_NONAMEFCReservé.VK_PA1FDTouche PA1.@++   --Mortalino--Le mystérieux chevalier, "Provençal, le Gaulois"
0
StiriX Messages postés 67 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 2 septembre 2009
26 août 2006 à 22:01
c'est pour faire un jeux tout bete ^^
merci beaucoup Mortalino tu m'as beaucoup avancé :)
par contre j'en reviens à mon problème principal

Dim tabl1
tabl1 = Array("touche1","touche2",......)

For i = 0 To ... Step 1
    If GetKeyState( tabl1(i) ) = 1 Then                  < j'ai une erreure à ce niveau.
        'code
    End If
Next

voilaaaaaa :p :p :p merciiiii
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
26 août 2006 à 22:06
normal, l API atend une valeur de type longue, toi tu lui donnes du String.
D où l utilité des Constantes que je t ai fourni

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
26 août 2006 à 22:08
"de type longue"  ARF

faut vraiment qu j aille me coucher.
Bien entendu, lire Long
@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
StiriX Messages postés 67 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 2 septembre 2009
26 août 2006 à 22:13
okay bon alors jvé changer caaa merciiiii et bonne nuit mortalino ;)
0
Rejoignez-nous