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

MFC Discussion :

keybd_event


Sujet :

MFC

  1. #1
    Membre actif Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Points : 203
    Points
    203
    Par défaut keybd_event
    voila, j'aimerai simuler un copier par le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    keybd_event(VK_CONTROL,0,0,0);
    keybd_event(VK_C,0,0,0);
    keybd_event(VK_C,0,KEYEVENTF_KEYUP,0);
    keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
    mais il ne reconnait pas VK_C alors qu'il apparait dans la MSDN comme étant reconnu
    comment faire?

  2. #2
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 102
    Points : 111
    Points
    111
    Par défaut
    Et si tu mets 43 à la place :

  3. #3
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 102
    Points : 111
    Points
    111
    Par défaut
    Après vérification, VK_C n'existe pas dans MSDN. Voici la liste des codes que tu peux entrés ici

  4. #4
    Membre actif Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Points : 203
    Points
    203
    Par défaut
    ok merci, le code compile cette fois. ( même si ça n'a pas l'effet escompté du CTRL+C )

  5. #5
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    pas bete le coup du control-c,
    j'étais parti sur du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    OpenClipboard(...)
    GetWindowText(...)
    SetClipboardData(...)
    et tout le toutim

    mais c'est vrai, pourquoi pas utiliser la capacité de windows à faire le copier coller facilement

    tu vérifies si t'es bien sur une zone texte au moment du double clic ?

  6. #6
    Membre actif Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Points : 203
    Points
    203
    Par défaut
    ben non justement
    c'est pour ca que ca ne doit pas marcher mon code
    mais je sais pas comment faire pour verifier si je suis bien sur une zone de texte

    et sinon j'ai essaye avec sendMessage() mais ca marche pas non plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    keybd_event(VK_CONTROL,0,0,0); 
    SendMessage(hFore,WM_CHAR,VK_RETURN,0);	
    keybd_event(43,0,0,0);
    SendMessage(hFore,WM_CHAR,VK_RETURN,0);
    keybd_event(43,0,KEYEVENTF_KEYUP,0);
    keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut

    Si tu veux copier, il faut avoir sélectionné quelque chose, donc quelle action fais-tu pour sélectionner ?

  8. #8
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    quel est l'objet qui recoit la commande ?
    si l'objet en question est un edit il y a beaucoup plus simple ...

  9. #9
    Membre actif Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Points : 203
    Points
    203
    Par défaut
    l'objet qui recoit la commande est la fenetre active. et ce qui est selectionné est le mot sur lequel j'ai double-cliqué.
    voila

  10. #10
    Membre actif Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Points : 203
    Points
    203
    Par défaut
    en fait, il vaut mieux utiliser un sendMessage(), un postMessage() ou un keybd_event pour simuler une combinaison de touches telle que CTRL+C ??

  11. #11
    Membre actif Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Points : 203
    Points
    203
    Par défaut
    aucune idée?

  12. #12
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    re,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //Copy()
    ::SendMessage(hWnd, WM_COPY, 0, 0); 
     
    //Cut()
    ::SendMessage(hWnd, WM_CUT, 0, 0); 
     
    //Paste()
    ::SendMessage(hWnd, WM_PASTE, 0, 0);
    Sinon sur un CEdit : Copy(),Paste(),Cut() directement.


  13. #13
    Membre actif Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Points : 203
    Points
    203
    Par défaut
    ok merci.
    mais par contre comment savoir ce qu'il va copier ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //Copy() 
    ::SendMessage(hWnd, WM_COPY, 0, 0);

  14. #14
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    il faudra faire une selection avant voir SetSel()
    oid CEdit::SetSel(int nStartChar, int nEndChar, BOOL bNoScroll)
    { ASSERT(::IsWindow(m_hWnd)); ::SendMessage(m_hWnd, EM_SETSEL, nStartChar, nEndChar);

  15. #15
    Membre actif Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Points : 203
    Points
    203
    Par défaut
    oui mais c'est pour un CEdit ça non?
    est-ce que ca marcherait si je veux copier une zone de texte sélectionnée par la souris dans n'importe quelle fenetre de windows?

  16. #16
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    si tu peux selectionner dans ta fentre le sendmessage devrais fonctionner
    essaye.

  17. #17
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    sauf que tu pourras pas récuperer EM_SETSEL avec un controle qui n'est pas un Edit
    Avec SendMessage et WM_GETTEXT tu n'auras pas la zone selectionnée, à moins qu'il n'y ait un message spécial pour la selection

  18. #18
    Membre actif Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Points : 203
    Points
    203
    Par défaut
    donc par exemple, si je fais ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char buffer[30];
    HWND hFore = (HWND)GetForegroundWindow();
    SendMessage(hFore, WM_GETTEXT, sizeof(buffer), (LPARAM) buffer);
    je devrai recupérer les 30 premiers caracteres d'une zone d'edit de la fenetre en cours?

  19. #19
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    au lieu de sizeof(buffer), faut mettre 30

  20. #20
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    meme mieux, récupère avant la taille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    len = GetWindowTextLength(hFore );
    et apres, dans sendmessage, tu mets en taille, len + 1

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Utilisation de keybd_event et PostKeybdMessage
    Par Bmagic dans le forum Visual C++
    Réponses: 2
    Dernier message: 21/08/2006, 09h56
  2. Problème Keybd_Event
    Par Mestoph dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 09/04/2006, 01h17
  3. keybd_event ne marche pas sur un jeu !
    Par seal3 dans le forum Windows
    Réponses: 5
    Dernier message: 24/03/2006, 16h28
  4. Réponses: 7
    Dernier message: 16/03/2006, 20h54
  5. Réponses: 2
    Dernier message: 11/07/2005, 23h54

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