VC++6.0 Savoir si une touche a été enfoncée - C++ - Programmation
Marsh Posté le 20-06-2004 à 09:59:10
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.
Marsh Posté le 20-06-2004 à 13:21:26
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.
Marsh Posté le 20-06-2004 à 19:29:36
Code :
|
?
Marsh Posté le 20-06-2004 à 21:31:21
MsHome a écrit :
|
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
Marsh Posté le 20-06-2004 à 22:07:46
mais non un ptit Sleep(1) et on nen parle plus
(oui oui c tres sale)
Marsh Posté le 21-06-2004 à 00:44:19
La prog Windows est évènementielle. Faut simplement réagir à l'évènement WM_SYSKEYDOWN et maintenir une trace de cet appui.
Marsh Posté le 21-06-2004 à 09:51:21
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. |
Marsh Posté le 21-06-2004 à 10:20:44
Et ?
Sauf erreur de ma part la question ne portait pas seulement sur la touche ALT+ qqchose
Marsh Posté le 21-06-2004 à 12:46:10
tu peux pas faire un thread qui regardera à chaque fois si la touche est enfoncée ou non ?
Marsh Posté le 21-06-2004 à 12:51:45
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 ?
- 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
Marsh Posté le 21-06-2004 à 14:04:38
cricri_ a écrit : Et ? |
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.
Marsh Posté le 21-06-2004 à 18:01:38
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
);
Marsh Posté le 21-06-2004 à 18:08:31
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
Marsh Posté le 21-06-2004 à 18:40:37
ReplyMarsh Posté le 21-06-2004 à 18:44:06
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 :
|
Marsh Posté le 20-06-2004 à 06:14:05
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.