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 :

Simuler événements clavier


Sujet :

C#

  1. #1
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 126
    Points : 91
    Points
    91
    Par défaut Simuler événements clavier
    voila je voudrais créer un programme qui simule des événements clavier, j'ai utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SendKeys.SendWait("n");
    mais le problème c'est que je voudrais généré des temps de touche pressé alors que ici c'est instantané
    en gros je voudrais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SendKeyDown("n");
    Thread.Sleep(45);
    SendKeyUp("n");
    Quelqu'un aurait une idée? j'ai beau cherché tout le monde utilise SendWait :p

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par ArnaudDev Voir le message
    voila je voudrais créer un programme qui simule des événements clavier, j'ai utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SendKeys.SendWait("n");
    mais le problème c'est que je voudrais généré des temps de touche pressé alors que ici c'est instantané
    en gros je voudrais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SendKeyDown("n");
    Thread.Sleep(45);
    SendKeyUp("n");
    Quelqu'un aurait une idée? j'ai beau cherché tout le monde utilise SendWait :p
    Quand tu appuis pendant 1 sec sur une touche, la signal est envoyé n fois durant cette seconde.

    Ce que tu peux faire c'est créer un thread pour une durée de n millisecondes et pendant toute la durée de ce thread tu fais ton SendWait.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  3. #3
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 126
    Points : 91
    Points
    91
    Par défaut
    d'accord merci !, petite question cependant :
    si je fait une boucle for je pourrais l'envoyer n fois mais combien de temps prend l'execution de la fonction sendwait ???
    par exemple si je veux un temps pressé de 40 ms je fait 40 fois le sendwait?

  4. #4
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 126
    Points : 91
    Points
    91
    Par défaut
    j'ai du mal comprendre :s
    si je fait 2 sendwait de suite avec la même touche ça m' envoit deux fois la touche ? et non la même touche pressé pendant 2 ms.

  5. #5
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par ArnaudDev Voir le message
    j'ai du mal comprendre :s
    si je fait 2 sendwait de suite avec la même touche ça m' envoit deux fois la touche ? et non la même touche pressé pendant 2 ms.
    Hum, je sais pas trop en fait.

    Pour moi quand on laisse appuyer son doigt sur une touche ça envoie le signal plein de fois à la suite.

    Une touche pressée pendant 1 sec, pour moi ça veut rien dire.
    Exemple dans le notepad, si tu appuies sur la touche n ben ça fait plusieurs n ça en fait pas qu'un seul.

    Donc pour moi on pourrait simuler ça en faisant plusieurs SendWait d'affilée.

    Après pi-etre que je me trompe.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  6. #6
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 126
    Points : 91
    Points
    91
    Par défaut
    non je parle de temps pressé , c'est le temps entre le keypressed et le keyreleased
    ->c'est le temps que ton doigt reste appuyé sur la même touche ^^
    J'ai réussi en utilisant le keybd_event :
    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
     
    Thread.Sleep(2000);
     
    keybd_event((byte)0x45, 0, 0, 0);
    Thread.Sleep(78);
    keybd_event((byte)0x45, 0, (int)0x0002, 0);
     
    Thread.Sleep(110);
     
    keybd_event((byte)0x4E, 0, 0, 0);
    Thread.Sleep(78);
    keybd_event((byte)0x4E, 0, (int)0x0002, 0);
     
    Thread.Sleep(125);
     
    keybd_event((byte)0x53, 0, 0, 0);
    Thread.Sleep(93);
    keybd_event((byte)0x53, 0, (int)0x0002, 0);
     
    Thread.Sleep(109);
     
    keybd_event((byte)0x49, 0, 0, 0);
    Thread.Sleep(78);
    keybd_event((byte)0x49, 0, (int)0x0002, 0);
     
    Thread.Sleep(141);
     
    keybd_event((byte)0x43, 0, 0, 0);
    Thread.Sleep(109);
    keybd_event((byte)0x43, 0, (int)0x0002, 0);
     
    Thread.Sleep(109);
     
    keybd_event((byte)0x41, 0, 0, 0);
    Thread.Sleep(125);
    keybd_event((byte)0x41, 0, (int)0x0002, 0);
     
    Thread.Sleep(141);
     
    keybd_event((byte)0x45, 0, 0, 0);
    Thread.Sleep(125);
    keybd_event((byte)0x45, 0, (int)0x0002, 0);
     
    Thread.Sleep(125);
     
    keybd_event((byte)0x4E, 0, 0, 0);
    Thread.Sleep(109);
    keybd_event((byte)0x4E, 0, (int)0x0002, 0);
    avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [DllImport("user32.dll")]
    private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
    avec ce code j'ecris "ensicaen" avec différents temps de latency et de touches pressées

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Simuler évènements utilisateur (clic souris, entrée clavier)
    Par _vince_ dans le forum Bibliothèques tierces
    Réponses: 5
    Dernier message: 28/11/2011, 18h44
  2. Réponses: 1
    Dernier message: 20/11/2010, 11h11
  3. Réponses: 2
    Dernier message: 17/02/2008, 09h42
  4. Simuler saisie clavier SendMessage et WM_KEYDOWN
    Par VoLc0m dans le forum Windows
    Réponses: 8
    Dernier message: 11/05/2005, 15h31
  5. Problème évènements clavier
    Par julie20 dans le forum Langage
    Réponses: 3
    Dernier message: 24/09/2003, 12h39

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