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

Pascal Discussion :

Programme qui lit tout ce qu'un utilisateur tape au clavier


Sujet :

Pascal

  1. #1
    Candidat au Club Avatar de Razzy65
    Homme Profil pro
    Ingenieur Electromecanique
    Inscrit en
    Juillet 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Niger

    Informations professionnelles :
    Activité : Ingenieur Electromecanique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 2
    Par défaut Programme qui lit tout ce qu'un utilisateur tape au clavier
    Salut à tous... J'ai un projet en Pascal : faire un programme qui lit tout ce qu'un utilisateur tape au clavier.
    Je ne sais pas par où commencer. Est-ce que quelqu'un peut m'aider ? Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Salut,

    il manque une information, là :
    Citation Envoyé par Razzy65 Voir le message
    [...] un programme qui lit tout ce qu'un utilisateur tape au clavier.
    pour en faire quoi ?

    Et sinon, attention à être précis au niveau du vocabulaire, ça évitera des confusions : un programme ne lit pas ce qu'un utilisateur tape, il récupère ce que l'utilisateur tape, et attention, ça va vite devenir compliqué : par exemple, quand je tape ce texte en ce moment, si un programme doit récupérer les lettres sans perturber ce que je fais, ça veut dire qu'il va falloir insérer le programme de récupération quelque part entre le pilote du clavier et le programme qui affiche ce qui est tapé, l'éditeur du forum dans mon navigateur.

    Très compliqué, et géré différemment en fonction du système d'exploitation (dont tu ne nous dis rien)...

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Bonjour et bienvenue dans le forum Pascal !

    Quand vous posez une question, il est toujours bon de préciser quel est le compilateur que vous utilisez (et aussi, comme l'a dit Jipété, quel est votre système d'exploitation).

    Si c'est pour récupérer une chaîne entière, que l'utilisateur a validée en appuyant sur la touche Entrée, vous pouvez utilisez la procédure ReadLn.

    Si c'est pour récupérer chaque touche sur laquelle l'utilisateur appuie, vous pouvez utiliser la procédure Read, ou encore la procédure ReadKey de l'unité Crt.

  4. #4
    Membre confirmé

    Inscrit en
    Novembre 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 46
    Par défaut
    Citation Envoyé par Razzy65 Voir le message
    Salut à tous... J'ai un projet en Pascal : faire un programme qui lit tout ce qu'un utilisateur tape au clavier.
    Je ne sais pas par où commencer. Est-ce que quelqu'un peut m'aider ? Merci d'avance.
    Effectivement, le clavier c'est une entrée système. Windows permet cela avec des hooks (le crochetage du clavier). Certains antivirus reconnaîtrons le programme comme étant un Keylogger et pourraient le bloquer.
    Avec Delphi/Lazarus :
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, Forms, Controls, Graphics, Dialogs;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
     
      public
     
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    uses
      windows ;
     
    const
      wh_keybd_ll = 13;
     
     
    type
        KeybdLLHookStruct = record
            vkCode      : cardinal;
            scanCode    : cardinal;
            flags       : cardinal;
            time        : cardinal;
            dwExtraInfo : cardinal;
          end;
     
    var
      kHook : cardinal;
      Vk_ToucheActive : integer;
      Vk_Param  : integer;
     
     
     
    function LowLevelKeybdHookProc(nCode: LongInt; WPARAM: WPARAM;
      lParam: LPARAM): LRESULT; stdcall;
    // possible wParam values: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP
    var
    info : ^KeybdLLHookStruct absolute lParam;
    kState : TKeyboardState;
     
    begin
        result := CallNextHookEx(kHook, nCode, wParam, lParam);
        with info^ do
        begin
          GetKeyboardState(kState);
     
          Vk_ToucheActive:=vkCode;
          Vk_Param:=wParam;
     
          Form1.Caption := 'Code touche : ' + IntToStr(Vk_ToucheActive);
     
        end;
    end;
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
        kHook := SetWindowsHookEx(wh_keybd_ll, @LowLevelKeybdHookProc, hInstance, 0);
    end;
     
    end.

  5. #5
    Membre très actif

    Homme Profil pro
    sans
    Inscrit en
    Octobre 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Octobre 2019
    Messages : 205
    Par défaut
    ça veut dire qu'il va falloir insérer le programme de récupération quelque part entre le pilote du clavier et le programme qui affiche ce qui est tapé, l'éditeur du forum dans mon navigateur.
    Il faut lancer un programme sur le pc dont on veut tester le clavier, et ce programme ne ralentira pas la saisie, car il va juste capter l’interruption clavier (interruption systeme mais msdos fait une couche par dessus) au moment où elle se produit, c'est à dire dés qu'une touche est pressée, et là il va regarder quelle touche a été pressée et l'enregistrer avant de se remettre à l'attente de l'interruption clavier.

  6. #6
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 658
    Par défaut Peter Pan et ...
    Bonjour,

    Quelques extraits d'un vieux code qui faisait de la conversion euro-franc en s'intégrant à toute application (hooks clavier et presse papier, dll autocollante, fichier mappé en mémoire...). Il est possible que certains arguments doivent changer de type quoique la compatibilité nous en préserve peut être.

    Quand on déclare un hook, Windows insère notre propre fonction callback dans la chaîne de fonctions de ce hook. Chaque fonction insérée peut décider de briser ou non cette chaîne. Par exemple, si la combinaison Alt+Ctrl+! doit déclencher une action, on ne souhaite généralement pas qu'elle affecte en plus l'application active : alors on casse la chaîne.
    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
    var
       hHookCatch : hHook;     // Handle du hook "Catch"  
       isCatching : Boolean;   // True : le Hook est actif
       isEating   : Boolean;   // True : le hook absorbe le caractère 
     
    {-------------------------------------------------------------------------}
    function Catch(Code : integer; wParam, lParam : Longint): Longint; stdcall;
    begin   //  Hook Keyboard : Catch est la fonction callback appelée par Windows       
       //...
       if code = HC_ACTION then  begin
          KeyIn   := word(wParam);
          if (lParam shr 30) < 2 then begin // Une touche descend 
             //...
          end
          else begin // Une touche remonte
              //...
          end
          if isEating then Exit(-1); // Si la combinaison de touches est consommée la chaîne d'appels s'arrête là
       end;
       Result := CallNextHookEx(hHookCatch, Code, wParam, lParam); // Passer à la fonction callback suivante
       end;
     
    {-------------------------------------------------------------------------}
    procedure StartCatch; // Met le "hook" !
    begin
       if isCatching then Exit; 
       hHookCatch := SetWindowsHookEx(WH_KEYBOARD, Catch, hInstance, 0);  // @Catch en FreePascal
       if hHookCatch = 0
       then raise ESetHookError.Create('Impossible d''activer le "hook"')
       else isCatching := true;
    end;
     
    {-------------------------------------------------------------------------}
    procedure StopCatch; // Si actif, arrêter le "hook"
    begin                                       
       if isCatching then UnhookWindowsHookEx(hHookCatch);  
       isCatching := false;
    end;
    Salutations

Discussions similaires

  1. idée pour un programme qui lit le code source
    Par snoopo dans le forum Langage
    Réponses: 3
    Dernier message: 20/07/2010, 10h24
  2. programme qui donne toutes les possibilités
    Par sabreofthewind dans le forum Débuter
    Réponses: 4
    Dernier message: 30/01/2010, 19h02
  3. Réponses: 4
    Dernier message: 11/01/2010, 21h51
  4. programme qui sort tout seul
    Par waldomania dans le forum Débuter
    Réponses: 1
    Dernier message: 03/01/2010, 22h54
  5. [Turbo Pascal] Ecrire un programme qui lit une chaîne de caractères
    Par agan2012 dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 22/02/2009, 20h46

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