GetAsyncKeyState avec Event ?

Signaler
Messages postés
9
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
7 septembre 2009
-
Messages postés
9
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
7 septembre 2009
-
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

Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
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 !
Messages postés
9
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
7 septembre 2009

Euh comment on utilise un HotKey ? Parce que moi et les Event .... :s
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
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 !
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Salut,

Doc sur les hotkeys.

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

[déplacé sur cppfrance]
Messages postés
9
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
7 septembre 2009

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.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
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.
Messages postés
9
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
7 septembre 2009

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 ^^