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 :

Savoir quelle application est au premier plan


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 76
    Points : 53
    Points
    53
    Par défaut Savoir quelle application est au premier plan
    Bonjour à tous,
    voila, mon appli est reduite mais teste les touches du clavier pour passer des chaine dans une autre appli (lambda.exe)
    En gros quand je suis dans l'autre appli, si j'appuie sur F12 c'est mon appli qui doit réagir.
    Mon problème est de ne pas executer de code si ce n'est pas l'appli lambda.exe qui est au premier plan (pour eviter d'envoyer du texte vers la mauvaise appli)

    Comment m'assurer de cela ?

    Merci pour votre aide

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Points : 241
    Points
    241
    Par défaut
    Salut

    Tu peux utiliser GetActiveWindow. Alors tu peux comparer le handle de cette fenetre avec le de ton app et si est différent......

    A+

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 76
    Points : 53
    Points
    53
    Par défaut
    ok je vais essayer de cette manière.
    en fait je pensais récupérer le nom de l'exe qui se trouve au premier plan car celui est tjs le même, tandis que le handle change à chaque démarrage (enfin, je crois...). Je dois donc connaitre de façon sure le handle de l'appli concernée.
    Y a-t-il pour cela une fct du type DonneMoiLeHandlede('Appli.exe') ?
    Si non, je vais poursuivre dans le sens que tu m'as indiqué de toute manière.
    Merci pour ton aide

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 76
    Points : 53
    Points
    53
    Par défaut
    GetWindowText devrait faire l'affaire !
    Je viens de trouver sur un autre post. Pourtant j'avais cherché avant ..
    Salut.

  5. #5
    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 David
    Bonjour à tous,
    voila, mon appli est reduite mais teste les touches du clavier pour passer des chaine dans une autre appli (lambda.exe)
    En gros quand je suis dans l'autre appli, si j'appuie sur F12 c'est mon appli qui doit réagir.
    Mon problème est de ne pas executer de code si ce n'est pas l'appli lambda.exe qui est au premier plan (pour eviter d'envoyer du texte vers la mauvaise appli)

    Comment m'assurer de cela ?

    Merci pour votre aide
    tu parle de communication entre process.
    voir:http://www.overbyte.be/frame_index.html
    2004, Paris

    Session 2004: Compléter les macros Office avec Delphi
    Session 3004: Communication Inter Processus
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 76
    Points : 53
    Points
    53
    Par défaut
    Voila avec un peu de retard je voulais compléter ce post par un peu de code qui est la synthèse de plusieures réponses trouvées sur ce forum, concernant les handles. J'ai donc remixé le tout en une petite appli.
    Faut juste poser qqes statictext et un timer sur une form.

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    unit Unit1;
    {Appli d'exemples permattant de :
     
      - CONNAITRE LE HANDLE DE LA FENETRE/COMPOSANT
          * sous le curseur de la souris
          * de la fenetre au premier plan
      - CONNAITRE LES COORDONNES/ECRAN SOURIS
      - CONNAITRE LES COORDONNES/FENETRE SOURIS
      - CONNAITRE LA POSITION DE LA FENETRE AU PREMIER PLAN
      - REPOSITIONNER LA SOURIS
      - SIMULER UN CLIC SOURIS
      - RECUPERER LE TEXTE CONTENU PAR UN COMPOSANT
      - TESTER L'ETAT D'UNE TOUCHE
     
    }
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ExtCtrls, StdCtrls, Buttons,Clipbrd,shellapi;
     
    type
      TForm1 = class(TForm)
        Timer1: TTimer;//mettre delai de 20
        StaticText1: TStaticText;
        StaticText2: TStaticText;
        StaticText3: TStaticText;
        StaticText4: TStaticText;
        StaticText5: TStaticText;
        StaticText6: TStaticText;
        RadioGroup1: TRadioGroup;
        StaticText7: TStaticText;
        procedure Timer1Timer(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
      procedure Touchepressee;
     
    implementation
     
    {$R *.DFM}
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    var Hwnd : THandle;
        Posi : TPoint;
        RectWin:Trect;
        Classe, titre,txt : String;
        c:Pchar;
        L:cardinal; 
    begin
      If not GetCursorPos(Posi) Then begin
        Exit;
      end;
      // recherche du handle + infos de la fenetre survolée
      Hwnd:=WindowFromPoint(Posi);
      //ou de la fenetre au premier plan
      if RadioGroup1.ItemIndex=1 then Hwnd:=GetForegroundWindow ;
      SetLength(titre, 100);
      GetWindowText(Hwnd, PChar(titre), 100);
      SetLength(Classe, 100);
      GetClassName(Hwnd, PChar(Classe), 100);
      // Récupération du texte contenu dans la fenêtre survolée
       L := SendMessage(Hwnd,WM_GETTEXTLENGTH,0,0);//la longueur du texte
      If L<>0 Then begin
        GetMem(C,L+1); //on alloue la mémoire.  // L+1 parce que les chaînes sont à zéro terminal, il faut prévoir la place du #0
        Try
          SendMessage(Hwnd,WM_GETTEXT,L+1,Integer(C));//on recupère le texte
          txt:=c;
        Finally
          FreeMem(c);
        End;
      End
      Else txt:='';
      // trouve les ccordonnees de la fenetre
      GetWindowRect(Hwnd,RectWin);
     
      //Teste l'etat d'une touche --> ici c'est F5
        If (GetAsyncKeyState(vk_F5)And $8000)<>0 then begin 
         //...
        end.
     
      //Ecritures des resultats
      StaticText1.Caption:='Handle : ' + IntToStr(Hwnd);
      StaticText2.Caption:='Titre : ' + titre;
      StaticText3.Caption:='Classe : ' + Classe;
      StaticText4.Caption:='Mouse.X screen:'+  inttostr (posi.x)+ '    Mouse.Y screen:'+  inttostr (posi.y);
      StaticText5.Caption:='WindowPos.X :'+  inttostr (RectWin.Left) + '    WindowPos.Y :' + inttostr(RectWin.Left);
      StaticText7.Caption:='Mouse.X Window :'+  inttostr ((posi.x)-RectWin.Left) + '    Mouse.Y Window :' + inttostr((posi.y)-RectWin.Top);
      StaticText6.Caption:='Texte : '+txt;
    end;
     
    end.
    Voilà, si ca peut aider quelqu'un...

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

Discussions similaires

  1. KeyStroke.getKeyStroke Savoir quelle touche est appuyée
    Par oOoOuuhmAn dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 08/06/2008, 19h48
  2. Savoir si une fenetre est au premier plan
    Par Galip dans le forum C++Builder
    Réponses: 2
    Dernier message: 03/07/2007, 13h37
  3. [Process] Comment savoir quelle application est ouverte ?
    Par samus535 dans le forum Framework .NET
    Réponses: 1
    Dernier message: 25/08/2006, 15h01
  4. DLL -> savoir quelle application ou form l'a appelée
    Par chtiot dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 25/02/2006, 11h33
  5. Réponses: 2
    Dernier message: 23/01/2006, 21h31

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