Buffer du clavier

Résolu
madflo Messages postés 47 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 24 juin 2013 - 3 sept. 2006 à 23:09
madflo Messages postés 47 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 24 juin 2013 - 4 sept. 2006 à 01:00
Je fais un petit test d'application et j'aimerai récupérer le buffer du clavier. Par exemple l'utilisateur clique sur a et b en meme temps j'aimerai etre au courant. Parceque les arguments de base ne peuvent renvoyer que a ou b (les keypress par exemple). Merci si vous trouvez la solution, je cherche depuis 1h je n'en peux plus...

15 réponses

Utilisateur anonyme
4 sept. 2006 à 00:57
Bonsoir tout le monde.



Donc, en dotnet, la déclaration d'api change.
De plus si la doc de l'api (http://docvb.free.fr/apidetail.php?idapi=160) indique qu'il renvoie -127 ou -128 si la touche est enfoncé.



Donc si on remet tout en ordre, ca donne :






Private

Declare

Function
GetKeyState
Lib

"user32"
(
ByVal
nVirtKey
As
Int32)
As

Integer

Private

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

  
If
GetKeyState(System.Windows.Forms.Keys.F9) < 0
Then
Label1.Text =
"La touche F9 a été pressé"
& vbNewLine &
"Qu'y a t-il de compliqué à cela ??"

End

Sub




Voili, voilou

Kenji
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 sept. 2006 à 23:17
salut,
API GetKeyState par exemple. aucun rapport avec un buffer quelconque...
recherches sans succès? bizarre çà....
normalement çà devrait être bon là ;)

++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
madflo Messages postés 47 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 24 juin 2013
3 sept. 2006 à 23:26
Mince c'est encore du COM. Ils n'ont donc rien fait en .NET là dessus? Je vais devoir utiliser l'API mais bon j'ai l'impression de faire du VB6 :(
0
madflo Messages postés 47 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 24 juin 2013
3 sept. 2006 à 23:42
Le code :
Public Class Form1
    Declare Function GetKeyState Lib "user32" ( _
                     ByVal nVirtKey As Long) As Integer
    Const test = 1
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim mytest As Long
        mytest = CLng(Asc("z"))
        Label1.Text = Str(GetKeyState(mytest))

    End Sub
End Class

L'erreur :
A call to PInvoke function 'WindowsApplication1!WindowsApplication1.Form1::GetKeyState' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.

Je ne comprend pas... :'(
0

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

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
4 sept. 2006 à 00:12


Salut,avec cette fonction d'API, pas de transformation en ASCII !Il faut utiliser les constantes : (je vais finir par les copier dans une page html) 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
madflo Messages postés 47 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 24 juin 2013
4 sept. 2006 à 00:23
Public Class Form1
    Declare Function GetKeyState Lib "user32" ( _
                     ByVal nVirtKey As Long) As Integer
    Const test = 1
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim mytest As Long
        Label1.Text = GetKeyState(58)
    End Sub
End Class

Je suis en VB.net, je ne vois pas ce que vous demandez que je rajoute... Le type long est attendu donc conversion de l'hexadecimal des constantes ca donne toujours la meme erreur. Si on envoie 1, c'est sensé être un bouton de la sourie selon une source de quelqu'un d'autre. Rien ne fonctionne... :'(
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 sept. 2006 à 00:32
Faudrait remettre les choses en place dans ton esprit.
API n'est pas du COM, c'est l'appel direct des fonctions qu'expose le système.
Le framework .NET par contre est bien un serveur COM, c'est d'ailleurs lui qui transmet les appels API sans lesquels il ne se passerait rien.

ciao...
BruNews, MVP VC++
0
madflo Messages postés 47 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 24 juin 2013
4 sept. 2006 à 00:33
Oui ne t'inquiete pas j'ai regretté mon post, mais en ce qui concerne mon problème, l'erreur est toujours là.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
4 sept. 2006 à 00:40
Exemple :

Declare Function GetKeyState Lib "user32" ( _
                     ByVal nVirtKey As Long) As Integer

Const VK_F9 As Long = 78

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

         If GetKeyState(58) Then Label1.Text = "La touche F9 a été pressé" & vbCrLf & _
                                                                "Qu'y a t-il de compliqué à cela ??"
    End Sub

@++

<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
4 sept. 2006 à 00:41
Arf, j'ai réecrit ta bétise :

Il ne faut pas lire If GetKeyState(58) mais If GetKeyState(VK_F9)

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
madflo Messages postés 47 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 24 juin 2013
4 sept. 2006 à 00:43
Non je t'assure que ca me fait un bug, toujours le même d'ailleur. Même en faisant ce que tu viens de me mettre (j'ai utilisé l'aide sur http://docvb.free.fr/apidetail.php?idapi=160)

A call to PInvoke function
'WindowsApplication1!WindowsApplication1.Form1::GetKeyState' has
unbalanced the stack. This is likely because the managed PInvoke
signature does not match the unmanaged target signature. Check that the
calling convention and parameters of the PInvoke signature match the
target unmanaged signature.

Je ne suis pas nul à ce point...
0
madflo Messages postés 47 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 24 juin 2013
4 sept. 2006 à 00:44
Non vraiment... Toujours la même erreur...
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
4 sept. 2006 à 00:46
Désolé mais je ne peux t"aider plus, je ne suis pas encore en dotnet, mais vb6 : ce message d"erreur je ne le connais pas.

Bon courage

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
madflo Messages postés 47 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 24 juin 2013
4 sept. 2006 à 00:49
Je vais devenir fou, merci de l'aide je vais quand même rester vérifier que personne ne réussisse à comprendre l'erreur.
0
madflo Messages postés 47 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 24 juin 2013
4 sept. 2006 à 01:00
Merci, tout va bien à présent.
0
Rejoignez-nous