Récupération des keydown du clavier ...

Résolu
Thanos_the_yopper Messages postés 309 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 5 mars 2009 - 7 juil. 2004 à 16:42
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 22 juil. 2004 à 10:56
j'ai réussi a intercepter l'appuis sur les touches du clavier mais seulement sur les touches "classiques" (genre la touche A, F2, esc, etc ...)
j'aurais voulu savoir comment on pouvait récupérer des combinaisons de touche de clavier (genre ctrl+1, ctrl+2, ...)
merci d'avance
voici le code que j'utilise :

public bool PreFilterMessage(ref Message m)
{
// si le message est une pression sur touche
if ( m.Msg == WM_KEYDOWN)
{
//si on a appuyé sur la touche echap
if (m.WParam == (IntPtr)Keys.F1)
{
// si le message est destiné a notre form ou un controle qu'il contient, on le fermeif ( m.HWnd form.Handle || form.Contains(Control.FromHandle(m.HWnd)) true )
{
// fermeture du form
form.Close();

// blocage du message
return true;
}
}
}

// le message n'etait pas celui qu'on attendait, on le laisse passer
return false;
}


Final Fantasy Memories Venez découvrir les origines d'une saga

10 réponses

cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 99
7 juil. 2004 à 17:51
bon j'avais envie de mumuse un peu avec ça donc ça donne :

[DllImport("user32")]
private static extern short GetKeyState(int virtKey);

private const int VK_LCONTROL = 0xA2;
private const int VK_RCONTROL = 0xA3;


public bool PreFilterMessage(ref Message m)
{
// si le message est une pression sur touche et que la touche est F1if ( m.Msg WM_KEYDOWN && m.WParam (IntPtr)Keys.F1)
{
// si le message est destiné a notre form ou un controle qu'il contientif ( m.HWnd form.Handle || form.Contains(Control.FromHandle(m.HWnd)) true )
{
// récupération des etats des touches ctrl
short keystate;
bool lctrl, rctrl;
keystate = GetKeyState(VK_LCONTROL);lctrl ((keystate & 0x8000) 0x8000 );
keystate = GetKeyState(VK_RCONTROL);rctrl ((keystate & 0x8000) 0x8000 );
if ( lctrl false && rctrl false)
MessageBox.Show("F1");
else if ( lctrl == true )
MessageBox.Show("LCTRL+F1");
else if ( rctrl == true )
MessageBox.Show("RCTRL+F1");

// blocage du message
return true;
}
}

// le message n'etait pas celui qu'on attendais, on le laisse passer
return false;
}


Cocoricoooooooo !!!!
3
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 99
7 juil. 2004 à 17:18
tu devrais pouvoir y arriver via la methode GetKeyState de l'api win

Cocoricoooooooo !!!!
0
Thanos_the_yopper Messages postés 309 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 5 mars 2009
8 juil. 2004 à 10:25
kewl, merci !! :D

par contre, ca se met ou le "[DllImport("user32")]" ?? parce que quand je le mets, ca me fait une erreur à la compile : "Le type ou le nom d'espace de noms 'DllImport' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?)" :(

Final Fantasy Memories Venez découvrir les origines d'une saga
0
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 99
8 juil. 2004 à 10:31
dans une classe par exemple
et tout est dans le texte de l'erreur :

extrait doc :
Namespace: System.Runtime.InteropServices
Assembly: Mscorlib (in Mscorlib.dll)

donc
using System.Runtime.InteropServices;


:)

Cocoricoooooooo !!!!
0

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

Posez votre question
Thanos_the_yopper Messages postés 309 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 5 mars 2009
8 juil. 2004 à 10:44
vi, j'avais trouvé entre temps ... je devrais chercher avant de demander ;)
mais merci quand même, je compte plus le nombre de fois où tu m'as aidé msieur coq ! :D

Final Fantasy Memories Venez découvrir les origines d'une saga
0
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 99
8 juil. 2004 à 10:48
lol
de rien

Cocoricoooooooo !!!!
0
Thanos_the_yopper Messages postés 309 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 5 mars 2009
22 juil. 2004 à 10:09
et comment est-ce qu'on fait pour récupérer l'état du bouton shift ?
j'imagine qu'il faut définir des constante VK_LSHIFT et VK_RSHIFT, mais c'est quoi les valeurs ?
merci d'avance :)

Final Fantasy Memories Venez découvrir les origines d'une saga
0
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 99
22 juil. 2004 à 10:16
c'est dans le fichier winuser.h :

#define VK_LSHIFT         0xA0
#define VK_RSHIFT         0xA1
#define VK_LCONTROL       0xA2
#define VK_RCONTROL       0xA3
#define VK_LMENU          0xA4
#define VK_RMENU          0xA5


Cocoricoooooooo !!!!
0
Thanos_the_yopper Messages postés 309 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 5 mars 2009
22 juil. 2004 à 10:35
merci ! :D
la touche VL_MENU, ca correspont a quelle touche sur le clavier en fait ?

Final Fantasy Memories Venez découvrir les origines d'une saga
0
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 99
22 juil. 2004 à 10:56
va savoir ;)
personellement je n'en ai qu'une de touche MENU

et au fait tu as aussi celles là :
#define VK_SHIFT          0x10
#define VK_CONTROL        0x11
#define VK_MENU           0x12


enfin, à toi de déterminer celles qu'il te faut

Cocoricoooooooo !!!!
0