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

Windows Discussion :

détection de la séquence Ctrl-q


Sujet :

Windows

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 340
    Points : 177
    Points
    177
    Par défaut détection de la séquence Ctrl-q
    Je souhaite détecter la séquence de touches Ctrl-q (ou tout autre lettre de l'alphabet que 'q'), et ceci indépendamment de la disposition du clavier (français, anglais, etc...), et ceci quand on presse une touche, ou bien quand on la relâche.

    Déjà, pour des raisons techniques qui sont propres au but que je me suis fixé, je n'utilise pas le message WM_CHAR, mais uniquement WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP et WM_SYSKEYUP.

    j'utilise ce code (msg->window_param est le wParam du message):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    BYTE kbd_state[256];
    WORD b[2];
    
    GetKeyboardState(kbd_state);
    res = ToAscii(msg->window_param, MapVirtualKey(msg->window_param, 2), kbd_state, b, 0);
    if (res ==1)
      printf("%d\n", (char)b[0]);
    Si j'appuie sur la touche 'a', j'obtiens 97 (le code ASCII du a minuscule)
    Si je lance Shift+a, j'obtiens 65 (le code ASCII du a majuscule)
    si je lance Ctrl+a, j'obtiens 1 (2 si c'est b, etc... 26 si c'est z) donc la position de la lettre dans l'alphabet)

    pourquoi n'obtiens-je pas 97 ?

    merci
    L'Opus attire les Prélats

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 671
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    Ctrl+a ne correspond pas à "a". Pourquoi voudrais-tu que la fonction renvoie #97 ?
    Relis la table ASCII, Ctrl+a vaut bien #1 (SOH).

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 340
    Points : 177
    Points
    177
    Par défaut
    je m'attendais à ce que ça fasse comme Alt-a par exemple : le caractère + le modificateur. Là ça renvoie un truc bien différent

    par exemple, si je veux que mon application ferme quand je fais Ctrl-q, je dois apparemment juste voir que le modificateur est Ctrl et que la valeur renvoyée est 17. Mais c'est quand même peu pratique dans la mesure où je dois gérer les combinaisons avec les modificateurs au cas par cas (ne parlons même pas de AltGr...)
    L'Opus attire les Prélats

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 671
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    Citation Envoyé par d'Oursse Voir le message
    par exemple, si je veux que mon application ferme quand je fais Ctrl-q, je dois apparemment juste voir que le modificateur est Ctrl et que la valeur renvoyée est 17.
    Pas du tout ! Soit tu testes simplement WParam (le VK) et l'état de la touche Ctrl, soit tu passes par une conversion ASCII et ne teste que #17.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Citation Envoyé par d'Oursse Voir le message
    je m'attendais à ce que ça fasse comme Alt-a par exemple : le caractère + le modificateur.
    Mais c'est comme ça... avant ton appel à MapVirtualKey() qui convertit en le véritable caractère.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [AC-2007] Détection des trous dans une séquence
    Par ARFAOUI1953 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 12/04/2013, 19h47
  2. Détection des points d'intérêt dans une séquence vidéo
    Par miss_angel dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 15/12/2011, 14h52
  3. Détection d'un passage jour/nuit dans une séquence d'images
    Par maxwell86 dans le forum Traitement d'images
    Réponses: 5
    Dernier message: 07/03/2008, 16h17
  4. Automatiser le séquence ctrl-alt-suppr avec VNC
    Par Tomate251 dans le forum Windows
    Réponses: 0
    Dernier message: 19/12/2007, 08h45
  5. Détection des séquence d'adultes dans des scénes vidéo
    Par karima1010 dans le forum Traitement d'images
    Réponses: 37
    Dernier message: 03/05/2007, 17h39

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