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

C Discussion :

Provoquer un "appui" sur une touche ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 36
    Par défaut Provoquer un "appui" sur une touche ?
    Bonsoir,
    Voilà ne sachant trop où poser la question, je pense que ce forum se rapproche le plus de ma demande :
    J'aimerais savoir s'il existe quelconque moyen en C (voire en C++) de pouvoir "activer" des touches du clavier ?
    C'est-à-dire : je voudrais qu'une certaine action utilisateur provoque par exemple une "pression" sur la flèche droite : pas une pression physique mais faire comme si (que windows le comprenne en tant que tel). Existe-t-il une bibliothèque capable de faire ça ? une macro ? une fonction ? une opération sur des bits ?

    Merci pour vos réponses !

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Puisque tu as dis Windows, tu as la fonction SendInput() pour cela.

    Par contre, ce n'est pas spécifique au C ni au C++, c'est spécifique à l'OS.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 36
    Par défaut
    Merci pour ta réponse !
    Par contre je ne comprends pas ce que tu entends que c'est spécifique à Windows et non aux langages, qu'est ce que cela implique ? Comment pouvoir l'utiliser dans un programme en fait ?
    Je n'ai pas bien compris la syntaxe.

  4. #4
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Citation Envoyé par ALeX850 Voir le message
    je ne comprends pas ce que tu entends que c'est spécifique à Windows et non aux langages, qu'est ce que cela implique ?
    Ca implique que si tu choisis cette solution, ton programme ne tournera que sous Windows, puisque la fonction proposée fait partie de cet OS. Si tu veux de la portabilité, il faut de la compilation conditionnelle. En gros, tu détectes ton OS ( #ifdef WINDOWS ou quelque chose du genre), et en fonction de lui tu encadres les #includes des librairies spécifiques et les appels de fonctions par des #ifdef #else #endif pour tous les OS avec lesquels tu veux être compatible. Mais peut-être que tu n'as pas de besoin de portabilité, auquel cas tu peux y aller directement.

    A+

    Pfeuh

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 36
    Par défaut
    Ah merci, mais j'avais compris en fait que ce ne serait pas portable.
    Ce que je n'avais pas compris c'était comment l'utiliser en C par exemple ?
    Par exemple en C (ou C++) quel est le code correspondant pour "simuler" une pression sur la flèche droite ?
    Merci encore !

  6. #6
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Il suffit de lire le contenu du lien que t'as donné ram-0000
    Citation Envoyé par ram-0000 Voir le message
    tu as la fonction SendInput() pour cela.
    Fais une structure INPUT avec ta touche, puis appelle la fonction SendInput avec les paramètres qui vont bien, dont le pointeur vers ta structure INPUT. Le retour de la fonction te dira si ta touche a été prise en compte.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 36
    Par défaut
    Merci pour toutes vos réponses mais je n'arrive décidemment pas à l'utiliser, en fait j'ai vraiment du mal à comprendre, c'est pour ça que j'aurais aimé un exemple.

    Si j'ai bien compris :
    la structure INPUT doit contenir les structures vers chaque touche à simuler ?
    l'appel correspond bien à ceci :
    prototype : UINT SendInput(__in UINT nInputs,__in LPINPUT pInputs,__in int cbSize);
    = SendInput(nombre de structures dans pInputs, pointeur vers la structure INPUT qui contient les structures des touches, taille de la structure INPUT) ?

    A ce niveau, le problème c'est la structure INPUT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct tagINPUT {
      DWORD      type;
      MOUSEINPUT mi;
      KEYBDINPUT ki;
    } INPUT, *PINPUT;
    Déjà, je ne comprend pas comment la déclarer dans le code ? (INPUT, *PINPUT ?).
    Je ne vois pas non plus comment y mettre plusieurs simulations de touches.
    Quand je déclare ma structure, est-ce que je dois par exemple remplacer DWORD type; par INPUT_KEYBOARD; si je veux simuler une touche du clavier ?

    Si tel est le cas, je mets ensuite un pointeur? vers une la structure de la touche simulée ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct tagKEYBDINPUT {
      WORD      wVk;
      WORD      wScan;
      DWORD     dwFlags;
      DWORD     time;
      ULONG_PTR dwExtraInfo;
    } KEYBDINPUT, *PKEYBDINPUT;
    Et là c'est même plus la peine, je n'ai rien compris..

    Pour cette raison, est-ce que l'un d'entre vous aurait la gentillesse de me montrer un exemple d'utilisation (flèche droite ou gauche..) ?
    Ah aussi est-il possible de cette manière de simuler une combinaison ? comme CTRL+K par exemple ?

    Merci beaucoup et bonne nuit !

Discussions similaires

  1. Gérer l'appui continu sur une touche
    Par Greensource dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 29/10/2008, 10h45
  2. Appui virtuel sur une touche du clavier
    Par nitneuk dans le forum Windows
    Réponses: 2
    Dernier message: 07/04/2006, 13h56
  3. Appui prolongé sur une touche.
    Par semenzato dans le forum MFC
    Réponses: 7
    Dernier message: 16/01/2004, 12h47

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