IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Comment bloquer touche Windows!


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Comment bloquer touche Windows!
    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 !

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Points : 241
    Points
    241
    Par défaut
    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+

  3. #3
    Membre actif Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Points : 201
    Points
    201
    Par défaut
    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.

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Points : 241
    Points
    241
    Par défaut
    Salut

    Citation Envoyé par [Silk]
    [...]jte ferait parvenir les sources.
    Et tu ne peux pas les ajouter ici comme un attach?

    A+

  5. #5
    Membre actif Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Points : 201
    Points
    201
    Par défaut
    Citation Envoyé par cadetill
    Et tu ne peux pas les ajouter ici comme un attach?
    C'est vrai j'y pensais plus.
    Citation Envoyé par [Silk]
    jte ferait parvenir les sources.
    remarque que je n'avais pas précisé comment

    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

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci Bcp! [Silk].

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    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 !

  8. #8
    Membre actif Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Points : 201
    Points
    201
    Par défaut
    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

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Ok merci bcp la !

    Encore un gros merci !

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    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...

  11. #11
    Membre actif Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Points : 201
    Points
    201
    Par défaut
    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.

  12. #12
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut !

    As-tu jeter un coup d'oeil aux sources de Nono40 et son KeyLogger: .

    @+

  13. #13
    Membre actif Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Points : 201
    Points
    201
    Par défaut
    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

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    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...

  15. #15
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    As-tu trouver une solution à ton problème ?
    Car je pense avoir une.

    @+ Claudius

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    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.

  17. #17
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    Sinon un bon coup de tournevis sous la touche et ho!, a plus la touche Window$ !

  18. #18
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    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
    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.
    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
    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.

    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.
    Ce code ne fonctionne qu'avec Win2000 et XP.
    Je me suis largement inspiré des exemples que l'on peut trouver sur ce site (FAQ et cours).

    @+ Claudius

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    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

  20. #20
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Points : 241
    Points
    241
    Par défaut
    Salut

    J'ai testé le code et fonctionne tres bien. Merci Claudius40

    Je crois que ça peut etre une tres bonne FAQ

    A+

Discussions similaires

  1. [VB.NET] Bloquer touches Windows
    Par seemax dans le forum Windows Forms
    Réponses: 13
    Dernier message: 04/10/2007, 09h19
  2. comment bloquer une touche
    Par iam dans le forum Delphi
    Réponses: 6
    Dernier message: 01/08/2006, 12h42
  3. Comment bloquer la touche précédente du navigateur?
    Par shnouf dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/01/2006, 10h44
  4. comment désactiver la touche windows ?
    Par mAdY dans le forum Bibliothèques tierces
    Réponses: 2
    Dernier message: 13/04/2005, 10h24
  5. [MFC] Comment bloquer lma touche maximiser?
    Par xs_nady dans le forum MFC
    Réponses: 2
    Dernier message: 14/06/2004, 20h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo