Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
585 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  VC++6.0 Savoir si une touche a été enfoncée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

VC++6.0 Savoir si une touche a été enfoncée

n°770159
jahjah
Posté le 20-06-2004 à 06:14:05  profilanswer
 


Bonjour,  
 
Je cherche a savoir dans mon programme si une touche a été enfoncée à un moment donné.
 
j'ai trouvé  
 
if ((GetKeyState(VK_ESCAPE) < 0)  
   /* instructions */
 
mais ca, ca me dit si la touche est enfoncé ou pas alors ke moi je veux savoir si la touché "a été enfoncée",nuance.
 
Dans mon programme je fais différent traitements et donc je ne peux pas faire de GetKeyState tout le temps.
 
Je ne sais pas si une telle fonction existe..
Merci de m'éclairer sur cette situation.
 
 
 
 
 
 

mood
Publicité
Posté le 20-06-2004 à 06:14:05  profilanswer
 

n°770175
WhatDe
Posté le 20-06-2004 à 09:59:10  profilanswer
 

Et si tu fais une boucle qui vérifie en permanence ?
Je dis peut-être une connerie, mais pour moi c'est la seule façon. Si tu ne vérifies pas toi même toutes les x secondes/10ème de seconde et que tu veux qu'une autre fonction le fasse pour toi, autant le faire directement.


Message édité par WhatDe le 20-06-2004 à 10:00:47

---------------
[:whatde]
n°770267
docmaboul
Posté le 20-06-2004 à 13:21:26  profilanswer
 

Je pense qu'il va falloir que vous gériez vous-même cette info par exemple en scrutant les messages à partir d'un PreTranslateMsg de la fenêtre de plus haut niveau. La solution marteau serait sinon de poser le hook qui va bien.

n°770438
MsHome
djulsoonsoune
Posté le 20-06-2004 à 19:29:36  profilanswer
 

Code :
  1. while(1)
  2. {
  3. if ((GetKeyState(VK_ESCAPE) < 0) 
  4. {
  5. nbtouchesenfonced +=1;
  6. break;
  7. }
  8. }


 
?


---------------
http://sylvainm.chez.tiscali.fr mon site qu'il est bieng
n°770505
red factio​n
Posté le 20-06-2004 à 21:27:14  profilanswer
 

Code :
  1. GetKeyState(VK_ESCAPE) == -32768


n°770507
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-06-2004 à 21:31:21  profilanswer
 

MsHome a écrit :

Code :
  1. while(1)
  2. {
  3. if ((GetKeyState(VK_ESCAPE) < 0) 
  4. {
  5. nbtouchesenfonced +=1;
  6. break;
  7. }
  8. }


 
?


[:aaah]
mais ça va pas non ? c'est crade, et ça bouffe toutes les ressources !!!
le mieux et le plus élégant selon moi est de poser un hook de type WH_KEYBOARD via la fonction SetWindowsHookEx, voir MSDN pour cette fonction.
Ne pas oublier d'appeler CallNextHookEx pour traiter les hooks de Windows


---------------
J'ai un string dans l'array (Paris Hilton)
n°770523
red factio​n
Posté le 20-06-2004 à 22:07:46  profilanswer
 

mais non un ptit Sleep(1) et on nen parle plus  
 
:D (oui oui c tres sale)


Message édité par red faction le 20-06-2004 à 22:07:57
n°770678
HelloWorld
Salut tout le monde!
Posté le 21-06-2004 à 00:44:19  profilanswer
 

La prog Windows est évènementielle. Faut simplement réagir à l'évènement WM_SYSKEYDOWN et maintenir une trace de cet appui.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°770812
cricri_
Posté le 21-06-2004 à 08:44:55  profilanswer
 

Et WM_KEYDOWN également, non ?

n°770892
HelloWorld
Salut tout le monde!
Posté le 21-06-2004 à 09:51:21  profilanswer
 

Citation :

The WM_KEYDOWN message is posted to the window with the keyboard focus when a nonsystem key is pressed. A nonsystem key is a key that is pressed when the ALT key is not pressed.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
mood
Publicité
Posté le 21-06-2004 à 09:51:21  profilanswer
 

n°770927
cricri_
Posté le 21-06-2004 à 10:20:44  profilanswer
 

Et ?  
Sauf erreur de ma part la question ne portait pas seulement sur la touche ALT+ qqchose

n°771265
riskoulah
Posté le 21-06-2004 à 12:46:10  profilanswer
 

tu peux pas faire un thread qui regardera à chaque fois si la touche est enfoncée ou non ?

n°771268
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 21-06-2004 à 12:51:45  profilanswer
 

riskoulah a écrit :

tu peux pas faire un thread qui regardera à chaque fois si la touche est enfoncée ou non ?


mais putain, pourquoi vous préconisez des solutions dégueulasses alors que l'OS propose plein de solutions propres ? :cry: :cry:
 
- ou bien on utilise un Hook (proposé par DocMaboul et moi),
- ou bien on utilise la fonction RegisterHotKey() (proposé par moi,
je viens d'y penser à l'instant)
- ou bien on utilise la pompe à messages (proposé par HelloWorld)
- ou bien on passe par PreTranslateMessage() sur la fenêtre mêre (DocMaboul)
 
tout ça est bien propre, et ne bloque pas le système comme les autres solutions proposées, par pitié, utilisez l'API :sweat:


---------------
J'ai un string dans l'array (Paris Hilton)
n°771366
HelloWorld
Salut tout le monde!
Posté le 21-06-2004 à 14:04:38  profilanswer
 

cricri_ a écrit :

Et ?  
Sauf erreur de ma part la question ne portait pas seulement sur la touche ALT+ qqchose


Heu, j'ai loupé un truc.
Il m'a semblé lire ALT uniquement. J'ai du confondre avec un autre post.
Désolé.
Donc oui WM_KEYDOWN. :jap:


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°771777
jahjah
Posté le 21-06-2004 à 18:01:38  profilanswer
 

wè j'ai testé le while(1) {...} dan 1 thread en mettant un sleep(1) mais ca me prend tjs 100% du proc.
 
quand au RegisterHotKey() c a l'air pas mal mais ...chaud a utiliser.
BOOL RegisterHotKey(
HWND hWnd,
    int id,
    UINT fsModifiers,
    UINT vk
);
 
 
 
 

n°771782
jahjah
Posté le 21-06-2004 à 18:08:31  profilanswer
 

bon le hWnd OK , UINT vk OK aussi...
UINT fsModifiers, ca me propose une combinaison de touche bon wè si on veut...
 
Mais pour int id alors la je vois trop pas cke c "id"
 
[in] Specifies the identifier of the hot key. No other hot key in the calling thread should have the same identifier. An application must specify a value in the range 0x0000 through 0xBFFF. A shared dynamic-link library (DLL) must specify a value in the range 0xC000 through 0xFFFF (the range returned by the GlobalAddAtom function). To avoid conflicts with hot-key identifiers defined by other shared DLLs, a DLL should use the GlobalAddAtom function to obtain the hot-key identifier.
 
Merci pour votre aide pr utiliser simplement cette fonction
 

n°771817
HelloWorld
Salut tout le monde!
Posté le 21-06-2004 à 18:40:37  profilanswer
 

Balises cpp...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°771822
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 21-06-2004 à 18:44:06  profilanswer
 

id, c'est l'identifiant que tu souhaites donner à ta hotkey (une valeur arbitraire)
elle te permettra ensuite de détecter si la hotkey a été pressée via le message WM_HOTKEY (le paramètre wParam contiendra l'id). par exemple, pour détecter si la HotKey n° 1 a été pressée :

Code :
  1. (...)
  2. switch (msg)
  3. {
  4.    case WM_HOTKEY:
  5.       if (msg.wParam == 1)
  6.          MessageBox("La Hot Key 1 a été enfoncée" );
  7.       break;
  8.    case WM_QUIT:
  9.       (...)
  10. }


   


---------------
J'ai un string dans l'array (Paris Hilton)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  VC++6.0 Savoir si une touche a été enfoncée

 

Sujets relatifs
jTextPane et touche Tab[awt]État d'une touche pressée/relâchée
Boucle infinie jusqu'à touche appuyéeGTK_Ada -Tout ce qu'on doit savoir...
[JAVA] Savoir si un ServerSocket attend sur un .accept() ?[PHP] savoir si un tableau contient au moins un element ?
[HTML] Problème de textarea et touche TAB...savoir si une session a "commencé" sans faire session_start() ?
[pda pocket pc C#] code touche[HTML]Besoin d'aide d'un mec qui touche un peu...
Plus de sujets relatifs à : VC++6.0 Savoir si une touche a été enfoncée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR