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

Delphi Discussion :

Simuler des entrées clavier dans une application externe


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut Simuler des entrées clavier dans une application externe
    Bonjour,

    j'aimerais simuler une application clavier dans une application externe.
    Pour l'instant, je l'a fait passer au premier plan mais je n'arrive pas à lui donner des entrées clavier.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      CoordXY := '0,0';
      Rot := '0';
      SendMessage(HInst,WM_SETFOCUS, 0, 0);
      SetForegroundWindow(HInst);
      SendMessage(HInst,WM_SETTEXT, 0, THandle(CoordXY) );
      SendMessage(HInst,WM_SETTEXT, 0, THandle(Rot) );
    Il s'agit en faite d'AutoCAD et j'aimerais passer des entrées clavier dans la barre de commande.

    Qlq un a t'il une idée de comment faire?

    Merci, David
    Mais quelle bordel !

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 427
    Points : 24 792
    Points
    24 792
    Par défaut
    essaye plutôt WM_KEY* ou WM_CHAR
    Et essaye aussi de savoir le handle précis du champ qui doit recevoir le texte, et non pas sa forme ... (findwindow, GetWindowList avec GW_CHILD) ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Merci, ca fonctionne bien

    Reste à paufiner/digérer toutes les instructions pour arriver à faire ce que je veux
    Mais quelle bordel !

  4. #4
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Salut,

    je te conseille plutôt de piloter autocad via l'OLE automation.
    Akim Merabet

  5. #5
    rbh
    rbh est déconnecté
    Membre confirmé Avatar de rbh
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 381
    Points : 471
    Points
    471
    Par défaut
    Salut
    La méthode que tu utilise ne simule pas exactement des frappes de touche, elle envoie du texte.
    Dans ma boite, pour l'utilisation d'une fonction d'un logiciel, (qui se trouve aussi être un Soft de DAO), n'est pas possible avec OLE donc le seul moyen était de lui envoyé le raccourci de la commande (touche F9). voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      procedure SendKey(VirtKey: byte);
      begin
        keybd_event(VirtKey, 0, KEYEVENTF_EXTENDEDKEY, 0);
        keybd_event(VirtKey, 0, KEYEVENTF_KEYUP, 0);
      end;
     
    ...
     
    SendKey(VK_F9);
    Note bien qu'il faut lui envoyer 2 messages (appui puis relachement de la touche).
    Ce bout de code nécessite un "Uses Windows;"
    Il faudra juste que tu change le VK_F9 par la (ou les) touche(s) que tu veux envoyer.
    Ce qui peut être interessant avec cette méthode, c'est que tu n'as pas besoin de connaitre les Handles des composants à cibler, celui qui a le focus reçoit les touches.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par Kaféine
    Salut,

    je te conseille plutôt de piloter autocad via l'OLE automation.
    C'est ce que je fais, malheureusement, AutoCAD appelle aussi une application OLE (ca le fait, controler un OLE qui en controle un ...).
    Et cette fenetre est modale, du coup, plus de réponse de AutoCAD via mon application raison pour laquelle je passe par un click de souris.

    En plus j'ai le problème de "Called rejejectd by callee" car AutoCAD est encore busy

    Si tu as une solution, je suis preneur à 200%
    Mais quelle bordel !

  7. #7
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    j'ai déjà fais ca il y a longtemps, je dois encore avoir du code chez moi.
    si tu n'est pas préssé, je vais cherche ce code...
    a+
    Akim Merabet

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Les solutions que l'ont m'a donnée sur le forum fonctionne, merci à tous

    Par conte Kaféine, je suis toujours preneur d'information supplémentaire sur le pilotage d'AutoCAD, si tu as des informations, je suis preneur
    Mais quelle bordel !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion du clavier dans une application vb
    Par Mac Alceste dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 03/03/2007, 16h40
  2. Utilisation des fichiers CSS dans une application Struts
    Par menzlitsh dans le forum Struts 1
    Réponses: 4
    Dernier message: 22/09/2006, 17h29
  3. Simulation de style MDI dans une application SDI
    Par Djob dans le forum C++Builder
    Réponses: 1
    Dernier message: 13/11/2005, 14h07
  4. [C#] Lier des boutons radio dans une application mobile
    Par Loïc56 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/04/2005, 14h00
  5. Réponses: 2
    Dernier message: 12/10/2004, 14h04

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