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

WinDev Discussion :

Enregistrer touches clavier


Sujet :

WinDev

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 223
    Points : 47
    Points
    47
    Par défaut Enregistrer touches clavier
    Bonjour à tous, je suis un ptit nouveau sur ce forum bien que je vais régulièrement sur ce magnifique site pour me documenter

    J'ai besoin de vos lumières sur windev.
    J'aimerai connaitre les touches qui sont tapés sur le clavier, cela en dehors de la fenêtre de mon projet. Mais je ne sais pas comment faire.

    si quelqu'un à une idée à proposer, cela m'aiderai beaucoup.

    D'avance je vous remercie

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Laos

    Informations forums :
    Inscription : Mars 2003
    Messages : 552
    Points : 1 193
    Points
    1 193
    Par défaut
    Bonjour,

    je copie/colle la solution d'un développeur à cette question sur le forum de PCSOFT, en gros il faut faire un "keyboard's hook" :

    Regarde l'exemple "WD CopieEcran" de la LST 61 il y a tous ce que décrit Patrice. Cela dit ce n'est pas bien compliqué à mettre en place avec la doc de la fonction dispo sur http://msdn.microsoft.com/library/en...dowshookex.asp
    Tu doit écrire par exemple un truc du genre
    nHandleHook = API("user32","SetWindowsHookExA",WH_KEYBOARD_LL,&CallBackHook
    ,SysInstance(),Null)
    Puis à la fermeture de ton appli ou lorsque tu veux cesser le hook ecrire API("user32","UnhookWindowsHookEx",nHandleHook)
    Bonne journée

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 223
    Points : 47
    Points
    47
    Par défaut
    Merci pour ta réponse.
    Mais c'est un peu léger pour mon niveau ... si je peux avoir un peu plus de détails .

    Si je colle ça ça ne va pas marcher et je ne comprends pas vraiment le fonctionnement de API ...

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Laos

    Informations forums :
    Inscription : Mars 2003
    Messages : 552
    Points : 1 193
    Points
    1 193
    Par défaut
    Voici un exemple complet trouvé toujours trouvé sur le forum de PCSOFT :

    // Code de déclaration de la fenêtre
    gnHandleHook est un entier

    // init de ma fenêtre
    gnHandleHook = API("user32","SetWindowsHookExA",13,&Procédure_Hook, Instance() ,0)

    //créer une procédure global

    PROCEDURE Procédure_Hook(ncode, wParam, lParam)

    tu dois gérer les touche de ton clavier ici.
    tu analyses les paramètres de la procédure qui correspondent aux touches enfoncées

    //Pour arrêter le hook
    // Fermeture de la la fenetre ou autre pars
    SI PAS API("user32","UnhookWindowsHookEx",gnHandleHook) ALORS
    Erreur("erreur ")
    FIN

    A vous de synthétiser les informations pour l'adapter à votre système.

    Cordialement.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 223
    Points : 47
    Points
    47
    Par défaut
    Très bon post meri ça m'a aidé. Mais j'ai un soucis qu'une personne a posté aussi c'est que la touche shift n'est pas reconnu.

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    bonjour,
    j'ai trouvé une solution pour le shift :

    dans les constantes il faut rajouter :
    et la procédure hookeuse devient :
    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
     
    PROCEDURE Procédure_Hookeuse(ncode,wparam,lparam)
    clavier est un KBDLLHOOKSTRUCT
    KeyState est un tableau fixe de 256 entiers sans signe sur 1 octet
    MonCharEx est un tableau fixe de 2 caractères
    RetourFonction est un entier
    vk est un entier sans signe
    //MonChar est un caractère
    keylayout est un entier 
    tailleChar est un entier
    x est un entier
     
    SI ncode = HC_ACTION ALORS
    // Sur touche enfoncé uniquement
    	SI  wparam <> WM_KEYDOWN  ALORS
        	RENVOYER API("user32","CallNextHookEx",gnHandleHook, ncode, wparam, lparam) 
      FIN
    Transfert(&clavier,lparam,Dimension(clavier)) // transfert de la structure ( méthode peu recommandable avez-vous mieux ? cast?)
    keylayout=API("USER32","GetKeyboardLayout",0)
    RetourFonction=API("USER32","GetKeyboardState",&KeyState)
    vk = API("USER32","MapVirtualKeyExA",clavier:scanCode,1,keylayout)
    // on place l'état de la touche Shift dans le tableau des états des touches
    KeyState[VK_SHIFT +1]= ETBinaire((API("USER32","GetAsyncKeyState",VK_SHIFT)/256),255)
    //RetourFonction=API("USER32","ToAscii",clavier:vkCode,clavier:scanCode,&KeyState,&MonChar,0)
    // on appelle ToAsciiEx plus balaise que ToAscii
    tailleChar =API("USER32","ToAsciiEx",vk, clavier:scanCode,&KeyState,&MonCharEx, 0, keylayout)
     
    POUR x = 1 A tailleChar
    	Fenêtre1.Memo += MonCharEx[x] // Memo est un champ de saisie qui affiche les caractères tapés	
    FIN
     
    FIN
     
    // Renvoie la suite du hook afin de permettre le traitement de l'appui par la fenetre d'origine
    RENVOYER API("user32","CallNextHookEx",gnHandleHook, ncode, wparam, lparam)
    Je ne sais pas si il y a plus simple, mais cela semble marcher sur mon PC. Toute contribution sera la bienvenue !

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 223
    Points : 47
    Points
    47
    Par défaut
    Merci beaucoup pour ta contribution, tu as tu te creuser la tête parce que ça n'a pas l'air simple.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 223
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    J'ai une autre petite question, visiblement les touches du pavé numérique ne sont pas détectées, que dois je ajouter pour que cela fonctionne ?

    Merci

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 223
    Points : 47
    Points
    47
    Par défaut
    J'ai quelques soucis avec certains caractères, par exemple le è n'est pas affiché (j'ai des symboles à la places), comment faire pour que je puisse prendre en compte tout ces caractères et en fonction du type de clavier (portable, fixe) ?


Discussions similaires

  1. Enregistrement touches clavier
    Par Sylvain_F dans le forum Langage
    Réponses: 6
    Dernier message: 03/03/2010, 11h49
  2. [Win32] Récupérer un appui touche clavier
    Par elsargento dans le forum MFC
    Réponses: 19
    Dernier message: 06/05/2006, 11h05
  3. [JEditorPane]Captures des touches claviers
    Par splend_f dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 17/05/2004, 14h57
  4. [Applet]simuler une touche clavier
    Par mat10000 dans le forum Interfaces Graphiques en Java
    Réponses: 19
    Dernier message: 12/12/2003, 16h23
  5. envoie de touche clavier
    Par psfox2001 dans le forum DirectX
    Réponses: 1
    Dernier message: 13/03/2003, 21h56

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