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 :

keybd_event et scan code


Sujet :

C

  1. #1
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut keybd_event et scan code
    J'essaye de faire une fonction ecrire pour gérer tous les caractères. Mais je dois avouer que c'est un vrai mic-mac parce que suivant les docs on a pas les mêmes informations. Là je me prends le tête pour faire [ et ] mais pas moyen d'y arriver.

    http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
    http://msdn.microsoft.com/en-us/libr...loband%29.aspx
    http://msdn.microsoft.com/en-us/library/aa928103.aspx.

    Pour le coup je suis totalement perdu et je ne sais plus à quoi m'en tenir. A partir de quoi son vraiment fais les scan code ??? C'est là question 2000000 francs (anciens).

    Y'aurait-il un moyen de mettre dans une variable de l'HEXADECIMAL pour le passer à keyboard_event ? Comme ça je pourrais faire toutes les possibilités ?

    Merci d'avance.


    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    void ECRIRE( char *CHAINE, int TAILLE )
    {
     
        int j=0;
        int T=20;
        for ( j ; j<TAILLE ; j++ )
            {
     
            char CurrentLetter=CHAINE[j];
     
                      // Chiffre          
                      if ( '0' == CurrentLetter )
                         {
                              keybd_event(0x60,0,0,0);
                              keybd_event(0x60,0,KEYEVENTF_KEYUP,0);
                              _sleep(T); 
     
                         }
     
                 else if ( '1' == CurrentLetter )
                         {
                              keybd_event(0x61,0,0,0);
                              keybd_event(0x61,0,KEYEVENTF_KEYUP,0);
                              _sleep(T); 
                         }
     
                 else if ( '2' == CurrentLetter )
                         {
                              keybd_event(0x62,0,0,0);
                              keybd_event(0x62,0,KEYEVENTF_KEYUP,0);
                              _sleep(T); 
     
                         }
     
                 else if ( '3' == CurrentLetter )
                         {
                              keybd_event(0x63,0,0,0);
                              keybd_event(0x63,0,KEYEVENTF_KEYUP,0);
                              _sleep(T); 
                         }                                   
     
                 else if ( '4' == CurrentLetter )
                         {
                             keybd_event(0x64,0,0,0);
                             keybd_event(0x64,0,KEYEVENTF_KEYUP,0);
                             _sleep(T); 
                         }
     
                 else if ( '5' == CurrentLetter )
                         {
                             keybd_event(0x65,0,0,0);
                             keybd_event(0x65,0,KEYEVENTF_KEYUP,0);
                             _sleep(T); 
                         }
     
                 else if ( '6' == CurrentLetter )
                         {
                             keybd_event(0x66,0,0,0);
                             keybd_event(0x66,0,KEYEVENTF_KEYUP,0);
                             _sleep(T); 
                         }
     
                 else if ( '7' == CurrentLetter )
                         {
                              keybd_event(0x67,0,0,0);
                              keybd_event(0x67,0,KEYEVENTF_KEYUP,0);
                              _sleep(T); 
                         }                                  
     
                 else if ( '8' == CurrentLetter)
                         {
                              keybd_event(0x68,0,0,0);
                              keybd_event(0x68,0,KEYEVENTF_KEYUP,0);
                              _sleep(T); 
                         }
     
                 else if ( '9' == CurrentLetter )
                         {
                              keybd_event(0x69,0,0,0);
                              keybd_event(0x69,0,KEYEVENTF_KEYUP,0);
                              _sleep(T); 
                         }
     
                 // Caractères spéciaux                   
                 else if ( '@' == CurrentLetter )
                         {
                              keybd_event(VK_MENU,0,0,0);
                              keybd_event(VK_CONTROL,0,0,0);
                              keybd_event(0x30,0,0,0);
                              keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
                              keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
                              keybd_event(0x30,0,KEYEVENTF_KEYUP,0);     
                              _sleep(T);                    
                         }
     
                 else if ( '.' == CurrentLetter )
                         {                            
                               keybd_event(VK_SHIFT,0,0,0);
                               keybd_event(0xBE,0,0,0);
                               keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
                               keybd_event(0xBE,0,KEYEVENTF_KEYUP,0);
                               _sleep(T); 
                         }
     
                 else if ( '/' == CurrentLetter )
                         {                                               
                               keybd_event(VK_SHIFT,0,0,0);
                               keybd_event(0xBF,0,0,0);
                               keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
                               keybd_event(0xBF,0,KEYEVENTF_KEYUP,0);
                               _sleep(T); 
                         }
     
                 else if ( '[' == CurrentLetter )
                         {      
                              keybd_event(VK_MENU,0,0,0);
                              keybd_event(VK_CONTROL,0,0,0);
                              keybd_event(0x35,0,0,0);
                              keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
                              keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
                              keybd_event(0x35,0,KEYEVENTF_KEYUP,0);   
                              _sleep(T);
                         }
     
     
    //             else if ( ']' == CurrentLetter )
    //                     {                                               
    //                           keybd_event(VK_OEM_4,0,0,0);
    //                           keybd_event(VK_OEM_4,0,KEYEVENTF_KEYUP,0);
    //                           _sleep(T); 
    //                     }
     
                 // Caractères usels                      
                 else    {
     
                               keybd_event(VkKeyScan(CHAINE[j]),0,0,0);
                               keybd_event(VkKeyScan(CHAINE[j]),0,KEYEVENTF_KEYUP,0);
                               _sleep(T);        
                         }
     
     
     
     
                      } 
    }

  2. #2
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Pour l'hexadécimal tu peux faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int var = 0x60;
    var += 0xA;
    printf("%x", var); /* Affichera 6a */
    Sinon pour ton problème, pourquoi tu ne fais pas tout simplement une table de correspondances ? Ce serait beaucoup plus simple à gérer
    Et un switch serait sûrement plus adapté que plein de if...else if...else

  3. #3
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Que veux tu dire par faire une table des correspondance ? Je vois pas comment en faire une, il me manque trop de choses.
    Je ne comprends pas leurs docs. Les valeurs sont toujours différentes et elles n'y sont pas toutes. Rien que pour faire le @, le . le /... j'ai lutté pour trouver. Et pas grâce à leur doc.

  4. #4
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Si tu veux mon avis tu te compliques la vie pour rien.
    Parce que tout simplement les caractères correspondent à la table ASCII
    Donc en fait il suffit d'envoyer ton caractère à la fonction

    Après je ne connais pas l'API win donc je ne pourrais pas t'aider plus

  5. #5
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    sauf que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    keybdv_event(kkeyscan('['),0,0,0);
    sa renvoit '(' et non pas [. En plus pour faire la touche 5 c'est 0x65 qu'il faut envoyer à Keybd_event et c'est bien la valeur octal ascii et c'est aussi la valeur que donne la msdn dans l'une de ces docs sauf qu'on me sort aussi des des valeurs hexadécimales genre 0xBE pour d'autres caractères. Alors faut savoir, de l'octal ou de l'hexadécimal ? parce que si c'est de l'hexadecimal 65 en octal ça vaut 35 et ça ne correspond plus à la touche 5. Donc c'est juste du grand n'importe quoi tout ça et je m'énerve parce que y'a un truck qui m'échappe et ça me gonfle de perdre du temps pour ça

  6. #6
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 082
    Par défaut
    Le truc qui t'echappe, c'est que seul la table ASCII de base (0 à 127 en code decimal) est assuré. Ensuite, c'est de l'ASCII etendu et c'est pas normalisé du tout, tout le monde fait ce qu'il veut.
    C'est pour ca qu'un caractere peut ne pas avoir la meme valeur.

    Enfin, faudrai voir le code de scanf si possible, ca t'aiderai surement.

  7. #7
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Tu confonds entre l'octal et l'hexadécimal !
    Pour représenter un nombre en base :
    - Décimale : Comme on a l'habitude de les écrire (ex: 12)
    - Octale : On rajoute un 0 devant le nombre (ex: 012)
    - Hexadécimale : On rajoute 0x devant le nombre (ex: 0x12)

    Donc les valeurs que tu envoies à ta fonction sont des valeurs hexadécimales

    Sinon les brackets [ et ] sont dans la table ASCII.
    Elles valent :
    91 0133 0x5B [ (left opening bracket)
    93 0135 0x5D ] (right closing bracket)

  8. #8
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Citation Envoyé par Pouet_forever Voir le message
    Tu confonds entre l'octal et l'hexadécimal !
    Pour représenter un nombre en base :
    - Décimale : Comme on a l'habitude de les écrire (ex: 12)
    - Octale : On rajoute un 0 devant le nombre (ex: 012)
    - Hexadécimale : On rajoute 0x devant le nombre (ex: 0x12)

    Donc les valeurs que tu envoies à ta fonction sont des valeurs hexadécimales

    Sinon les brackets [ et ] sont dans la table ASCII.
    Elles valent :
    91 0133 0x5B [ (left opening bracket)
    93 0135 0x5D ] (right closing bracket)
    sauf que keybd_event(0x5B,0,0,0) ou keybd_event(0x5B,0,0,0) ça ne fait pas ni [ ni ]... donc je ne pige plus rien.

  9. #9
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    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
                 else if ( '[' == CurrentLetter )
                         {      
                              keybd_event(VK_MENU,0,0,0);
                              keybd_event(VK_CONTROL,0,0,0);
                              keybd_event(0x35,0,0,0);
                              keybd_event(0x35,0,KEYEVENTF_KEYUP,0); 
                              keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
                              keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
                              _sleep(T);
                         }
     
     
                 else if ( ']' == CurrentLetter )
                         {                                               
                               keybd_event(VK_MENU,0,0,0);
                               keybd_event(VK_CONTROL,0,0,0);
                               keybd_event(0xDB,0,0,0);
                               keybd_event(0xDB,0,KEYEVENTF_KEYUP,0);
                               keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
                               keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
                               _sleep(T); 
     
                  }
    Je fais comme ça et ç marche mais je ne comprends pas pourquoi les autres valeurs ne marchent pas !

  10. #10
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 148
    Par défaut
    Salut,

    Si ton programme concerne une application automatisé, c'est à dire: simulation des touches du clavier, déplacement de souris et autre actions de manière automatique, je te conseille d'utiliser des script Autoit: http://www.autoitscript.com/autoit3/ au lieu des fonctions Microsoft. Autoit est le meilleure outils pour faire ce genre de chose, il n'ya qu'à ce documenté sur les fonctions, dont la simulation des touches du clavier...
    A+

  11. #11
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Je te remercie, je vais voir ce que je peux faire avec cela !

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

Discussions similaires

  1. scan code barre
    Par sylvain1809 dans le forum Access
    Réponses: 9
    Dernier message: 18/07/2016, 12h15
  2. [WM17] Scan Code Barre Ios
    Par favierpaul dans le forum Windev Mobile
    Réponses: 1
    Dernier message: 27/03/2013, 16h27
  3. API scan code barre
    Par l-amoureu dans le forum Android
    Réponses: 1
    Dernier message: 09/03/2011, 07h43
  4. Scan code-barre avec une douchette
    Par slevindonofrio dans le forum wxPython
    Réponses: 14
    Dernier message: 20/09/2010, 13h09
  5. scan code
    Par ilimo dans le forum C++
    Réponses: 2
    Dernier message: 05/04/2006, 14h56

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