Bebeoix
Messages postés9Date d'inscriptionsamedi 24 mai 2008StatutMembreDernière intervention 7 septembre 2009
-
28 mai 2009 à 11:53
Bebeoix
Messages postés9Date d'inscriptionsamedi 24 mai 2008StatutMembreDerniè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....
}
}
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 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à !
Bebeoix
Messages postés9Date d'inscriptionsamedi 24 mai 2008StatutMembreDerniè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é...
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 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.