comment on peut intercepter les caracteres taper sur clavier sans que le
focus soit a votre application. merci de me repondre vite
comment on peut intercepter les caracteres taper sur clavier sans que le
focus soit a votre application. merci de me repondre vite
Salut, il faut que tu fasses un hook clavier. Tu as des exemples sur le site de hook clavier et souris.
j'ai une question qui va assez vien avec ce sujet.
Je voudrai que (La Form a le focus) quand l'utilisateur apuis sur la touche Esc le programme effectue une action.
Comment est ce que je peut faire ceci?
Tu peux t'inspirer du code suivant (que j'utilise dans une de mes appli):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 // dans ton fichier projet: HINSTANCE hinst; WINAPI WinMain(HINSTANCE h, HINSTANCE,LPSTR,int) { hinst = h; ... // dans ta fiche principale: #include <winuser.h> HHOOK OldHook; FARPROC PFiltre; extern HINSTANCE hinst; // fonction de filtre des messages clavier LRESULT CALLBACK _export Filtre(int nCode, WPARAM wParam, LPARAM lParam) { MSG *mes = (MSG *) lParam; BOOL nexthook = TRUE; if (mes->message == WM_KEYDOWN || mes->message == WM_SYSKEYDOWN) { UINT tch; switch(tch = mes->wParam) { case VK_ESCAPE: nexthook = false; ... break; } } return nexthook ? CallNextHookEx(OldHook,nCode,wParam,lParam) : 0; } // et tu mets quelque part, après l'initialisation de ton appli (moi je l'ai mis sur // le FormKeyDown car on entre dans mon appli après l'appui sur une touche: // already_done, booléen initialisé à false dans le constructeur if (!already_done) { // installe un filtre pour capter l'appui sur les touches PFiltre = MakeProcInstance((FARPROC) Filtre,hinst); if (PFiltre != 0) { #ifdef __FLAT__ OldHook = SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC) PFiltre, hinst,GetCurrentThreadId()); #else OldHook = SetWindowsHook(WH_GETMESSAGE,(HOOKPROC) PFiltre); #endif } already_done = true; }
Gecko753, il te suffit de coder la fonction OnKeyPress ou OnKeyDown de ta form
dedans tu teste la touche frappé Si c'est Echap, tu effectue ton code.
Mais poste plutôt dans un nouveau message la prochaine fois car même si ta question traite aussi du clavier, elle est différente.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 // Méthode déclancher lorsque l'on relache une touche du clavier void __fastcall TAForm::OnKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { // Si la touche est Suppr if(Key == VK_ESCAPE) { // Ton code ici } }
Effectivement, la méthode de kurul1 est plus adaptée au problème de Gecko que ma solution. J'étais focalisé sur la question de filtre clavier, mais si la seule touche à capter est ESCAPE, il n'y a pas besoin de passer par un filtre !
Par contre pour la question de yacscream, cela ne marche pas étant donné que ca form n'a pas le focus. Là, ta solution est plus adapté joss95, mais je n'y connait rien en hook.
Une solution plus simple serait de faire le test suivant dans un Timer:
cela test si la touche ESC est enfoncée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 if((GetAsyncKeyState(VK_ESCAPE) & 0x8000) != 0) { //code ... }
ok merci a tous. J'ai trouvé plusieurs réponse que je vais essayer.
C'est sympa de voir que l'on peut compter sur les autres
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager