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

API, COM et SDKs Delphi Discussion :

Contrôle du clavier


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut Contrôle du clavier
    Salut à tous.

    Je cherche à simuler l'appui de touches sur le clavier. J'utilise donc le code suivant. Le problème, c'est que ça marche pas !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    keybd_event(41, 0, 0, 0);
    keybd_event(41, 0, KEYEVENTF_KEYUP, 0);
    Si quelqu'un sait pourquoi.....

    Du coup, j'ai essayé en utilisant les PostMessage sur une application, mais, malheureusement pour moi, c'est l'application qui reçoit les évènements, et pas le contrôle actif.
    Je m'explique.
    Pour tester tout ça, j'ai créé une application avec un TMemo actif au lancement. J'ai fait une autre application avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var
      handle: HWND;
    begin
      handle := FindWindow('TForm2', nil);
      SetForegroundWindow(handle);
      sleep(500);
      PostMessage(handle, WM_KEYDOWN,41, 0);
      sleep(1000);
      PostMessage(handle, WM_KEYUP,41, 0);
    end;
    Pour info TForm2 est la classe de l'application qui contient mon TMemo. A l'exécution de ce code, l'application TForm2 passe bien au premier plan, mais les évènements clavier sont reçus par la form mais pas par le TMemo.

    Quelqu'un saurait-il comment envoyer les messages au contrôle actif ? [Que ce soit clair, dans l'absolu, je ne peux pas modifier l'application cible. J'ai essayé avec NotePad, à priori, même problème]
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  2. #2
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    http://docvb.free.fr/apidetail.php?idapi=148
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Essaie en récupérant le handle du mémo alors !
    Mais c'est là qu'est le problème .
    Fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    handle := GetFocus;
    Après SetForegroundWindow afin de prendre le Handle du memo.
    bien sûr en espérant qu'il aie le focus (Valable pour Notepad avec keybd_event et non WM_KEYDOWN et WM_KEYUP)

  4. #4
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Essaies de simuler l'utilisation de l'utilisation de la touche de Tabulation (constante VK_TAB) pour activer séquentiellement le focus des contrôles jusqu'a ce que tu tombes sur le TMemo

    Ca marchera pitêtre
    Bidouilleuse Delphi

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par waskol
    Essaies de simuler l'utilisation de l'utilisation de la touche de Tabulation (constante VK_TAB) pour activer séquentiellement le focus des contrôles jusqu'a ce que tu tombes sur le TMemo

    Ca marchera pitêtre
    Oui ou alors selectionne avec ta souris le memo et tapes ce que tu veux

  6. #6
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Citation Envoyé par edam
    http://docvb.free.fr/apidetail.php?idapi=148
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  7. #7
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Citation Envoyé par portu
    Oui ou alors selectionne avec ta souris le memo et tapes ce que tu veux
    ça marche pas ça ! C'est mon problème, Le mémo a la focus. Si je tape au clavier, ça écrit dedans, mais si je simule l'appui des touches, ça marche pas.
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  8. #8
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Citation Envoyé par edam
    http://docvb.free.fr/apidetail.php?idapi=148
    Oui, mais si j'ai tout suivi, c'est le même système que moi, non ?
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  9. #9
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    non sans handle, ta mhéthode envoit a un controlle,
    keybd_event envoit a n'importe quel control pouvut qu'il as le focus
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  10. #10
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Citation Envoyé par edam
    non sans handle, ta mhéthode envoit a un controlle,
    keybd_event envoit a n'importe quel control pouvut qu'il as le focus
    Ben non justement, et c'est mon problème.
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  11. #11
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    alors faitun recherche récurssive sur tout les controle contenut dans la l'aplication syblé jusqu'a touvé selui que tu veux, tu peut utlisé directement sendmessage dans ce cas,
    j'ai oubliée comment mais j'ai déjà posté cette question et lil_jim63 m'a donnée la réponse
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  12. #12
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Citation Envoyé par edam
    alors faitun recherche récurssive sur tout les controle contenut dans la l'aplication syblé jusqu'a touvé selui que tu veux, tu peut utlisé directement sendmessage dans ce cas.
    Attend, comment tu fais une recherche des contrôles dans une application. Prenons le cas de Notepad, comment je fais ?
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  13. #13
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Au llieu d'utiliser FindWindow, il te faudrait utiliser FindWindowEX, GettWindow etc... (voir SDK Micro$oft)

    sinon, essaies ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     var
     handle: HWND;
    begin
      handle := FindWindow('TForm2', nil);
      SetForegroundWindow(handle);
      handle := FindWindow('TMemo1', nil);
      sleep(500);
      PostMessage(handle, WM_KEYDOWN,41, 0);
      sleep(1000);
      PostMessage(handle, WM_KEYUP,41, 0);
    end;
    ou bien ça...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     var
     handle: HWND;
    begin
      handle := FindWindow('TForm2', nil);
      SetForegroundWindow(handle);
      handle := handle:=GetActiveWindow;
      sleep(500);
      PostMessage(handle, WM_KEYDOWN,41, 0);
      sleep(1000);
      PostMessage(handle, WM_KEYUP,41, 0);
    end;
    Bon courage
    Bidouilleuse Delphi

  14. #14
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Citation Envoyé par waskol
    Au llieu d'utiliser FindWindow, il te faudrait utiliser FindWindowEX, GettWindow etc...
    Je vais essayer ton code, mais je n'ai pas de problème pour trouver l'application [elle passe bien au premier plan], mais plutôt pour taper dans le bon contrôle dedans [celui qui a le focus]
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  15. #15
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    voir:
    http://docvb.free.fr/apidetail.php?idapi=79
    et
    http://docvb.free.fr/apidetail.php?idapi=78
    bon dev
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  16. #16
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  17. #17
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Citation Envoyé par edam
    voir:
    http://docvb.free.fr/apidetail.php?idapi=79
    et
    http://docvb.free.fr/apidetail.php?idapi=78
    bon dev
    Merci edam, mais je n'ai pas de problème pour trouver la fenêtre. La recherche de la fenêtre fonctionne bien, le problème, c'est que les messages du claviers n'arrivent pas au contrôle actif.
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  18. #18
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  19. #19
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Ben voilà, chez lui ça marche et pas chez moi !
    Pour keybd_event() ne marche pas, c'est Delphi qui pose problème ?
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  20. #20
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    ????
    attent tu veux pas utilisé keybd_event,oui ou non??
    comment tu fait toi?
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

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

Discussions similaires

  1. contrôle touche clavier pour affichage des images
    Par ghyosmik dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 17/03/2011, 15h47
  2. Contrôle evenements clavier ds Datagridview
    Par twitty20 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 12/06/2008, 16h37
  3. Contrôle saisie clavier TEdit | Petite question bête..
    Par madnux dans le forum C++Builder
    Réponses: 11
    Dernier message: 03/02/2007, 15h46
  4. Réponses: 1
    Dernier message: 05/11/2005, 23h48

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