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

Turbo Pascal Discussion :

Simulation de touche du clavier


Sujet :

Turbo Pascal

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Simulation de touche du clavier
    J'aimerais simuler dans mon programme l'appui de touche sur le clavier.

    J'ai pensé à utiliser "keybd_event" que j'ai déjà utiliser sous Delphi, je n'y suis pas arriver.


    Est-il possible d'utiliser keybd_event avec TP7 ?
    Si non, y a t'il une procédure ou fonction équivalente ?
    un toulousain expatrié

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Non, on ne peut pas utiliser keybd_devent dans un programme Turbo pascal, car c'est une API Windows...
    Pour simuler l'appui d'une touche, je ne vois rien d'autres que d'écrire directement dans le buffer du clavier, situé en mémoire. Fais une recherche sur le foum, un précédent message de HDD34 explique tout...

    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  3. #3
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 944
    Points : 59 435
    Points
    59 435
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Eventuellement, aussi, il est possible d'utiliser la fonction 05h de l'interruption 16h :

    Déclaration de la procédure pascal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {$F+}
    {$L TSIMUL}
    Procedure TSIMUL (ascii,scancode:word); external;
    {$F-}
    Module ASM (assembleur MASM) :
    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
    CODE      SEGMENT   WORD   PUBLIC
     
              ASSUME    CS:CODE
              PUBLIC    TSIMUL
     
    COMMENT ! Chargement d'un code ASCII dans le buffer clavier comme si une
              touche du clavier avait été pressée.
              Utilisation du service 05h de l'interruption BIOS 16h.
              Transmission par la pile :
               - du code ASCII à mettre dans le buffer;
               - du scan-code de la touche correspondante. !
     
    TSIMUL    PROC      FAR
              push      bp
              mov       bp,sp
              push      ax
              push      cx
              pushf
              mov       cx,8[bp]            ; CL = code ASCII
              mov       ax,6[bp]
              mov       ch,al               ; CH = scan-code
              mov       ah,05h
              int       16h                 
              popf
              pop       cx
              pop       ax
              pop       bp
              ret
    TSIMUL    ENDP
     
    CODE      ENDS
     
              END
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  4. #4
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Il est préférable de faire appel à l'int 16h fonction 05h en effet, car écrire en mémoire reste une oprération bien particulière, et qui n'est pas conseillée en mode protégé par exemple.

    Cependant, cette fonction est limitée aux claviers étendus (tous les claviers depuis 10 ou 15 ans environ ).

    Le code d'Alcatîz peut être simplifé sous TP7, surtout pour ceux qui sont allergiques à l'assembleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    uses
      Dos;
     
    function SimulKey(Scan, ASCII: Byte): Boolean;
    var
      Regs: Resgiters;
    begin
      Regs.ah := $05;
      Regs.ch := Scan;
      Regs.cl := ASCII;
      Intr($16, Regs);
      SimulKey := (Regs.al = 0);
    end;
    Et pour les non-allergiques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function SimulKey(Scan, ASCII: Byte): Boolean; assembler;
    asm
      mov  ah, 05h
      mov  ch, Scan
      mov  cl, ASCII
      int  16h
      not  al
    end;
    A noter que cette fonction requiert la connaissance du code ASCII et du scancode (appelé aussi code géographique).

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 22
    Points : 26
    Points
    26
    Par défaut
    Merci . c'est utile pour moi aussi meme si je ne comprend que trés peu en assembleur ( syntaxe trés different d'un asm à un autre :o et les cours sur developpez.com sont vague ,ils n'utulise pas un asm particulier . je sait que vous ne voulez pas limiter le choix a l'utulisateur mais le cas d'asm et un peu particulier . et plus je cherche un cours en francais sur le cpu et pas seulement les registres ... désolé j'ai trop sortie du sujet )

    Merci encore .

Discussions similaires

  1. [SWTBot] Simuler une touche de clavier
    Par kkt8 dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 08/12/2011, 15h34
  2. Simuler plusieur touches du clavier en meme temps !
    Par Chyokyka dans le forum Débuter
    Réponses: 3
    Dernier message: 10/04/2008, 17h10
  3. Simuler un e pression sur une touche du clavier
    Par Furius dans le forum VBScript
    Réponses: 13
    Dernier message: 11/12/2005, 17h53
  4. Simuler l’appuie sur une touche du clavier
    Par Furius dans le forum C++
    Réponses: 2
    Dernier message: 26/09/2005, 17h15
  5. [Applet]simuler une touche clavier
    Par mat10000 dans le forum Interfaces Graphiques en Java
    Réponses: 19
    Dernier message: 12/12/2003, 16h23

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