Bonjour,
Bon voila tout est dans le titre du topic... j'aimerais etre capable de bloquer la touche windows dans une aplication merci !
merci Encore !
Bonjour,
Bon voila tout est dans le titre du topic... j'aimerais etre capable de bloquer la touche windows dans une aplication merci !
merci Encore !
Salut
Je crois que tu dois regarde du cote des hooks (cherche dans le forum et developpez.com).
Repelle toi que CTRL+ESC fait le meme que la touche Windows
A+
Salut,
si tu est interessé j'ai les sources d'un bloqueur de touches que j'avais fait avec l'aide d'un membre de ce forum (je ne me rapelle plus de son nom) qui utilise les hook. Je ne peux pas vraiment t'expliquer comment tu doit faire parce que j'avait gardé son code tel quel mais si tu les veux dit moi le jte ferait parvenir les sources.
Salut
Et tu ne peux pas les ajouter ici comme un attach?Envoyé par [Silk]
A+
C'est vrai j'y pensais plus.Envoyé par cadetill
remarque que je n'avais pas précisé commentEnvoyé par [Silk]
Voilà les sources de l'exemple qu'on m'avais fait parvenir, tout est fonctionnel tel quel il n'y a quasiment rien à changer, si mes souvenirs sont bons.
lock_t_key.zip
Merci Bcp! [Silk].
mais j'ai une autre question comment je pourais empecher toute les touches du clavier sauf celle Numériques, Les lettres et ENTER....
merci encore !
Si tu veux bloquer plusieur touche il y a cette source qu'il me restait de l'autre fois. (Cette fois ci c'est la dernière)
C'est pareil que pour l'autre elle marche tel quel juste à préciser les touches que tu veux bloquer. Il y a une ou deux exceptions je crois comme la touche impr. ecran qu'on ne peux pas bloquer avec cette methode.
lock_keys.zip
Ok merci bcp la !
Encore un gros merci !
Bonjour et merci pour ce code...
Cependant, j'ai toujours le problème de la touche windows, toutes les autres sont bloquées mais pas celle qui m'interesse...
J'ai essayé avec VK_LWIN et VK_RWIN...
Si quelqu'un pouvait me donner plus de précisions, merci d'avance...
Salut,
effectivement je viens de tester et moi non plus je ne peux pas les bloquer avec cette methode. Là je ne peux vraiment pas t'aider, ce n'est pas moi qui ai mis au point ce code et je me rapelle que la personne qui me l'avait donné avait le même problème. Depuis le temps je ne sais pas du tout si il (ou elle) avait réussi à le solutionner.
Peut-être que d'autres membres pourront te venir en aide.
Salut !
As-tu jeter un coup d'oeil aux sources de Nono40 et son KeyLogger: là.
@+
Salut,
je viens de retrouver le post en question :
http://www.developpez.net/forums/sho...highlight=hook
il te faut donc voir avec Sub0 s'il peut t'aider à solutionner ton problème
Merci de vos réponses, cependant, la source de nono40 ne présente pasle moyen d'interrompre l'action de l'appui sur une des deux touches windows.
Le code dont je dispose (merci Silk) me permet de détecter l'appui sur une de ces deux touches mais le traitement continu et le menu démarré est affiché et c'est bien ce que je veux éviter...
Si quelqu'un a une idée...
De mon coté, je vais essayer de contacter Sub0, peut etre pourra t il m'eclairer...
En tout cas, merci a vous...
Salut
As-tu trouver une solution à ton problème ?
Car je pense avoir une.
@+ Claudius
je suis preneur car la solution radicale préconisée par mon boss reste l'emploi d'un clavier sans toutche windows... plutot moche non?
Donc ta solution fera sans aucun doute mon bonheur merci d'avance.
Sinon un bon coup de tournevis sous la touche et ho!, a plus la touche Window$ !
Salut,
Puisque ma solution intéresse du monde alors la voilà.
Il faut déclarer un hook de type WH_KEYBOARD_LL (LL pour Low Level).
Ce hook doit impérativement être défini dans une DLL. Ce type de hook ne peut fonctionner directement depuis l'instance de l'application.
Accrochez-vous !!
1° partie: définition de la DLL
1.1 Fichier dpr
1.2: Fichier pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 library HookKeybLL; uses SysUtils, uFonctions in 'uFonctions.pas'; // Déclaration des fonctions de la DLL exports InitHook; exports EndHook; begin FInstance := HInstance; end.
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71 unit uFonctions; interface uses Windows; type TKBDLLHOOKSTRUCT = record vkCode, scanCode, flags, time, dwExtraInfo: WORD; end; PKBDLLHOOKSTRUCT = ^TKBDLLHOOKSTRUCT; var FInstance : Cardinal; // Handle d'instance de la DLL KeybdHookHandle: HHOOK; // Handle du hook clavier // Déclaration des fonctions de la DLL procedure InitHook; export; stdcall; procedure EndHook; export; stdcall; function KeybdProc(nCode: Integer; w: WPARAM; l: LPARAM): Integer; stdcall; implementation procedure InitHook; const WH_KEYBOARD_LL = 13; begin // Installation du hook pour le clavier KeybdHookHandle := SetWindowsHookEx(WH_KEYBOARD_LL,// Créer un hook sur le clavier @KeybdProc, // Utiliser la fonction KeybdProc FInstance, // Dans la DLL d'instance HInst 0); // Pour tous les threads end; procedure EndHook(); begin // Supression du hook UnhookWindowsHookEx(KeybdHookHandle); end; function KeybdProc(nCode: Integer; w: WPARAM; l: LPARAM): Integer; var Infos: PKBDLLHOOKSTRUCT; // voir description sur MSDN bHooked: Boolean; begin bHooked := False; if (nCode = HC_ACTION) then begin Infos := PKBDLLHOOKSTRUCT(l); // Touches Windows if (Infos.vkCode = VK_RWIN) or (Infos.vkCode = VK_LWIN) then bHooked := True // Ctrl+Esc else if (Infos.vkCode = VK_ESCAPE) and ((GetAsyncKeyState(VK_CONTROL) and $8000) <> 0) then bHooked := True; end; if (bHooked) then result := 1 else result := CallNextHookEx(KeybdHookHandle, nCode, w, l); end; end.
2° partie: le chtiot programme de test
Vous vous créez une form avec un CheckBox libellé 'Hook (ON/OFF)' par exemple, qui activera / désactivera le hook clavier.
Ce code ne fonctionne qu'avec Win2000 et XP.
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
58
59
60
61
62
63
64
65
66
67
68
69 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, AppEvnts; type TForm1 = class(TForm) CheckBox1: TCheckBox; procedure FormCreate(Sender: TObject); procedure CheckBox1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private InitHook: procedure; stdcall; // fonction d'initialisation des hooks EndHook: procedure; stdcall; // fonction de suppression des hooks hinstDLL: Cardinal; // instance de la DLL bHook: Boolean; // Les hooks ont-ils été initialisés ? end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin bHook := False; // Les hooks ne sont pas initialisés hinstDLL := LoadLibrary('HookKeybLL.dll'); // Chargement de la librairie if (hinstDLL = 0) then // Erreur lors du chargement de la librairie ? MessageBox(handle,'Impossible de charger la librairie.','Echec',MB_OK) else begin // On récupère les adresses des fonctions InitHook := GetProcAddress(hinstDLL, 'InitHook'); EndHook := GetProcAddress(hinstDLL, 'EndHook'); end; end; procedure TForm1.CheckBox1Click(Sender: TObject); begin if (hinstDLL = 0) then // La librairie n'est pas chargée, inutile de continuer Close else if (CheckBox1.Checked) then// Activer le hook begin bHook := True; InitHook; // On initialise le hook end else begin bHook := False; EndHook; end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if (bHook) then // Si le hook est actif on le supprime avant de quitter EndHook; if (hinstDLL <> 0) then //Libérer la librairie FreeLibrary(hinstDLL); Action := caFree; end; end.
Je me suis largement inspiré des exemples que l'on peut trouver sur ce site (FAQ et cours).
@+ Claudius
merci beaucoup,
cependant, je t'avoue que j'ai du mal à utiliser ce code, je ne sais pas vraiment pourquoi mais lorsque j'appelle initHook, beau plantage Violation d'acces adresse 00000000...
Donc, je voulais savoir si tu avais diretement un projet pour que je puisse voir a quoi ce ressemble...
Merci d'avance...
Solar
Salut
J'ai testé le code et fonctionne tres bien. Merci Claudius40
Je crois que ça peut etre une tres bonne FAQ
A+
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