GetAsyncKeyState avec Event ?

Bebeoix Messages postés 9 Date d'inscription samedi 24 mai 2008 Statut Membre Dernière intervention 7 septembre 2009 - 28 mai 2009 à 11:53
Bebeoix Messages postés 9 Date d'inscription samedi 24 mai 2008 Statut Membre Dernière intervention 7 septembre 2009 - 3 juin 2009 à 18:31
Bonjour, pour l'instant j'ai un timer qui toute les 50ms appelle la fonction ci dessous. Avant j'avais une boucle while(true) mais le programme (console) consommais quoi...
Maintenant j'aimerai faire mieux que un timer, à savoir il existe pas un Event (eventhandler) je sais pas trop sur GetAsyncKeyState ou peu importe, du moment que dès qu'une touche est pressé la fonction est executé ?

for



(

int
i = 0; i <= 255; i++)

//Go through all key codes to check if any key is pressed.

{







int
j = GetAsyncKeyState(i);

//Get state of key i.






if
(j == -32767)

//Check if key is pressed.

{
//travail effectué en fonction de la touche....
}
}

7 réponses

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
28 mai 2009 à 17:00
Si si tu peux utiliser un Hotkey :

RegisterHotKey
UnregisterHotKey

Mais tu devras récupérer le message WM_HOTKEY avec dans le wParam l'index donné au hotkey. Renseigne toi.

Cordialement, Bacterius !
0
Bebeoix Messages postés 9 Date d'inscription samedi 24 mai 2008 Statut Membre Dernière intervention 7 septembre 2009
28 mai 2009 à 18:24
Euh comment on utilise un HotKey ? Parce que moi et les Event .... :s
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
28 mai 2009 à 19:09
Déjà tu enregistres ton Hotkey au démarrage de ton application avec RegisterHotKey. Renseigne toi sur MSDN ou sur une des sources du site pour avoir des infos sur les paramètres, etc ...
Une fois enregistrée, l'appui sur la touche concernée (ou le groupe de touches, mais dans ton cas 1 touche) fera que Windows enverra à ton application un message WM_HOTKEY.
Tu le chopes comme ça :

public
...
procedure WMHOTKEY(var Message: TMessage); message WM_HOTKEY;
end;

...

procedure TForm1.WMHOTKEY(var Message: TMessage);
begin
// En supposant que tu aies donné à la touche du hotkey l'identificateur "1", alors tu fais :
case Message.wParam of
1: // Ce qui se passe quand on appuie sur la touche du hotkey à l'ID "1"
end;
end;

A la fin de ton application, tu libères ton hotkey avec UnregisterHotkey.
Et voilà !

Cordialement, Bacterius !
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
3 juin 2009 à 12:59
Salut,

Doc sur les hotkeys.

Merci de poster sur cppfrance dans un thème C pour du code C.

[déplacé sur cppfrance]
0

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

Posez votre question
Bebeoix Messages postés 9 Date d'inscription samedi 24 mai 2008 Statut Membre Dernière intervention 7 septembre 2009
3 juin 2009 à 18:09
Merci pour le déplacement du poste.

Par contre, ton lien, concerne explicitement le thread actuel (cf. "for the main thread") or moi je cherche veut faire un truc pour mon application du style setWindowHook en moins compliqué...

Merci,
Bebeoix.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
3 juin 2009 à 18:25
Non non. C'est registré pour le main thread, mais le message est toujours envoyé à l'application, peut importe l'application qui a le focus.

C'est comme pour Alt+Tab. Peu importe l'application active, si on presse Alt+Tab, explorer.exe (Ou un processus windows similaire...) reçoit le message.
0
Bebeoix Messages postés 9 Date d'inscription samedi 24 mai 2008 Statut Membre Dernière intervention 7 septembre 2009
3 juin 2009 à 18:31
Ah d'accord, je vais me pencher dessus alors ;)

PS : Bien que je fasse aussi du C++, en l'occurrence c'est du CSharp que je travail ^^
0
Rejoignez-nous