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++Builder Discussion :

Comment utiliser la fonction SendKeys() ?


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut Comment utiliser la fonction SendKeys() ?
    Bonjour,

    dans mon code je souhaiterai utiliser la fonction SendKeys() pour simuler l'appui des touches Ctrl-Z.

    J'ai noté la fonction comme ceci :
    mais j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [BCC32 Erreur] USMS.cpp(206): E2268 Appel à une fonction non définie 'SendKeys'
    Que dois je inclure pour que mon programme reconnaisse cette fonction ?

    Merci d'avance, à bientôt !

  2. #2
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 309
    Points
    1 309
    Par défaut
    Je ne connais pas la fonction SendKeys, et BCB5 non plus apparemment.

    Pour simuler l'appui sur une touche, tu peux regarder du coté de keybd_event. Un petit exemple (à vérifier!!):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //  Appuie sur la touche CTRL
      keybd_event(VK_CONTROL,0,0,0);  
    //  Appuie sur la touche Z
      keybd_event(0x59,0,0,0);   
    //  Relache la touche Z                  
      keybd_event(0x59,0,KEYEVENTF_KEYUP,0);
    //  Relache la touche CTRL 
      keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Merci sat83, mais j'aimerai que le ctrl-Z soit envoyé sur le port usb !!!

    Et je ne sais pas comment m'y prendre !

  4. #4
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 309
    Points
    1 309
    Par défaut
    Hello!

    Et que fais exactement la fonction SendKeys, mis a part de simuler l'appui sur une touche du clavier?

    Parce que keybd_event permet justement de simuler l'appui (puis le relâchement) d'une touche du clavier, donc ca devrait marcher.
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    oui c'est vrai, ces 2 fonctions semblent être similaires.

    Cependant, je voudrai simuler l'appui de ctrl-Z et l'envoyer sur le port usb.

    J'utilise la fonction WriteFile() pour l'envoi sur le port usb !!!

    Une idée ...

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Hello,

    Ctrl+Z, c'est bien le caractère ASCII 26 ?

    C'est pas un truc de ce genre que tu veux faire ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char chaine[2] = { 26, 0};
    WriteFile(..., chaine, 2, ..., ...);

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Merci totoche76, mais ça ne fonctionne pas !!!

    En fait, c'est pour dialoguer avec un modem gprs usb (envoi de sms) : j'arrive à lui envoyer le message que je souhaite envoyer mais pour l'envoi il faut faire un ctrl-z et je ne sais pas comment faire ...


  8. #8
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Truc bête: les trames que tu envoies à ton modem sont en texte, non ?
    Donc pas de 0 terminal.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char ctrlZ = 26;
    WriteFile(..., &ctrlZ, 1, ..., ...);
    Peut-être avec en plus un retour charriot derrière ?

    Ou alors, quand tu envoies ta trame avec le message, prévoies un caractère de plus que tu initialises à 26 (code ASCII).

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    marche pas !!!

    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
     
     
            char CtrlZ = 26;
     
            etat=WriteFile(hdl, "HU HU" , 5,&nblu,0);
    	if (etat == 0)
    	{
    		ShowMessage("erreur Message");
     
    	}
     
    	etat=WriteFile(hdl, &CtrlZ, 1,&nblu,0);
    	if (etat == 0)
    	{
    		ShowMessage("erreur Ctrl-Z");
     
    	}

  10. #10
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Ca non plus ça ne marche pas ?? Dingue, ça....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      AnsiString chaine;
      chaine.sprintf("TU TU%c", 26);
     
      etat = WriteFile(hdl, chaine.c_str(), chaine.Length(), &nblu, 0);
      if (etat == 0)
        ShowMessage("erreur Message");

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    C'est le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    etat=WriteFile(hdl, &CtrlZ, 1,&nblu,0);
    	if (etat == 0)
    	{
    		ShowMessage("erreur Ctrl-Z");
     
    	}
    qui ne fonctionne pas le reste oui !


  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Je n'y arrive toujours pas !!!

    J'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            etat=WriteFile(hdl, char(26), 1,&nblu,0);
    	if (etat == 0)
    	{
    		ShowMessage("erreur Ctrl-Z");
     
    	}
    Mais cela ne fonctionne pas !!!

    Comment puis je faire, c'est pour l'envoi d'un sms avec un modem gprs usb !!!

  13. #13
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut petitclem
    SendKeys c'est du Visual Basic, et apparemment ta fonction envoie Ctrl puis "z", je ferais un essai comme ceci attention à "z" et "Z"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char chaine[2] = {0x11, 0x59}; // valeur Ctrl, valeur Z
    WriteFile(..., chaine, 2, ..., ...);
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Merci pour ta réponse blondelle mais cela ne fonctionne toujours pas !!!



  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Bonjour,

    j'utilise un modem gprs usb, j'utilise les commandes AT pour communiquer avec lui.

    Pour l'envoi de sms, c'est en 3 étapes :

    1/ la commande AT+CMGF=1 puis "entrer" pour signaler au modem que je me met en mode texte pour l'écrit de sms

    2/ la commande AT+CMGS=06... puis "entrer" pour signaler au modem l'écrit du sms. Après cette commande il répond par ">" et j'écris mon message.

    3/ après avoir écrit mon message, il faut lui envoyer "Ctrl-z" pour envoyer le sms ou "ESC" pour annuler.

    Je pense que mon problème doit venir soit du 2/ ou du 3/ car j'ai vérifier la commande 1/ avec un dialer et il la prend bien en compte !!!

    Y a t'il quelqu'un qui aurait une solution s'il vous plait ?

    A bientôt !

Discussions similaires

  1. comment utiliser les fonctions d'une dll
    Par sebled dans le forum MFC
    Réponses: 3
    Dernier message: 24/02/2006, 16h59
  2. [Excel] Comment utiliser la fonction RECHERCHEV
    Par forsay1 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 03/02/2006, 11h43
  3. Réponses: 3
    Dernier message: 31/12/2005, 23h09
  4. Comment utiliser la fonction NBR.JOURS.OUVRES?
    Par MEHCOOPER dans le forum Access
    Réponses: 9
    Dernier message: 20/10/2005, 12h50
  5. Réponses: 11
    Dernier message: 22/12/2003, 21h06

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