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

Lazarus Pascal Discussion :

Obtenir le texte d'une fenêtre appartenant à une autre application


Sujet :

Lazarus Pascal

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 14
    Points : 14
    Points
    14
    Par défaut Obtenir le texte d'une fenêtre appartenant à une autre application
    Bonjour,

    Je désire écrire une application qui permet sur la pression d'une touche de fonction (par exemple F6) de trouver un champ dans un logiciel.
    Le logiciel se trouve sur le bureau Windows.

    Par exemple :
    - appui sur F6
    - recherche de la fenêtre avec caption "Mon application"
    - dans la fenêtre "Mon application" je vais chercher le texte à la position x, y (ou en parcourant les textes).

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 457
    Points
    15 457
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    C'est plus ou moins ce que fait WindowSpy.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  3. #3
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour.

    Voici une solution de "bricolage" (j'aimerais connaître la meilleure solution).

    Utilisation de FindWindow pour trouver la TForm de l'application 1.
    Envoi d'un message auquel l'application 1 va répondre par un copy du texte dans le presse-papier.
    Paste du presse-papier dans l'application 2.

    Attention: avec ce système, le nom de la TForm de l'application 1 doit être bien identifiable (des "form1", il peut y en avoir beaucoup !).

    Petit code de test.

    Code l'application 1 :

    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
    36
    37
    unit app1unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Windows, Clipbrd;
     
    const
      MY_MESSAGE = WM_USER + 1000;
     
    type
     
      { TApp1Form }
     
      TApp1Form = class(TForm)
        Edit1: TEdit;
      private
        procedure MyMessage(var Message: TMessage); message MY_MESSAGE;
      public
      end;
     
    var
      App1Form: TApp1Form;
     
    implementation
     
    {$R *.lfm}
     
    procedure TApp1Form.MyMessage(var Message: TMessage);
    // réception du message
    begin
       Clipboard.AsText:= Edit1.text; //Edit1.CopyToClipBoard fonctionne mal (?)
    end;
     
    end.
    Code de l'application 2 :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    unit app2unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Windows, Clipbrd;
     
    const
      MY_MESSAGE = WM_USER + 1000; // le même message que dans l'application 1
     
    type
      TApp2Form = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
      public
      end;
     
    var
      App2Form: TApp2Form;
     
    implementation
     
    {$R *.lfm}
     
    procedure TApp2Form.Button1Click(Sender: TObject);
    // à remplacer par KeyDown F6
    var
      H: HWND;
      S: string;
    begin
       H:= FindWindow(nil, PChar('app1form'));
       if H <> 0 then
       begin
         PostMessage(H, MY_MESSAGE,0,0); // 0,0 à remplacer par valeurs x,y
         Sleep(500); // un peu d'attente
         S:= Clipboard.AsText; // récupération du presse-papier
         Showmessage(S);
       end;
    end;
     
    end.
    Mais j'espère qu'un membre te donnera une meilleure solution.

    Cordialement
    Thierry

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/04/2015, 20h35
  2. Réponses: 2
    Dernier message: 16/03/2015, 21h19
  3. Réponses: 5
    Dernier message: 15/09/2011, 22h53
  4. Réponses: 1
    Dernier message: 02/08/2011, 12h48
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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