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 :

besoin d'aide sur un point dans la FAQ


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Par défaut besoin d'aide sur un point dans la FAQ
    Salut,

    dans la faq delphi il y'a une partie qui est tres interressante poru ce que je souhaite faire :

    Comment passer au premier plan une application instanciée une seconde fois ?

    Cependant etant (très) débutant en Delphi j'ai du mal a comprendre malgré avoir lu un cours de delphi proposé sur ce site!

    Bref, j'aimerais grace a ces sources en extraire un *.exe qui puisse faire passer au premier plan un programme precis lors de l'execution de mon exe(celui généré avec les sources delphi)! par exemple l'executable créé avec les sources delphi(appelons le delphi.exe) a chaque execution passe Word au premier plan(evidement je considere que word est deja lancé)

    Et donc voila mon probleme je ne comprends pas comment indiqué aux sources delphi quelle fenetre passer au premier...


    merci de m'eclairer

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 17
    Par défaut
    Salut

    Si tu comptes pas changé tous les jours l'application en question, lance-la. Liste toutes les classes reçues avec EnumWindows. Avec un peu de chance, y'en aura bien une qui s'appellera Word quelque chose. Maintenant si tu comptes changer à chaque fois ...

  3. #3
    Membre Expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Par défaut
    Oui l'application qui passera au premier plan sera toujours la meme(j'ai donné word pour 'l'exemple) donc je vais voir avec la fonction Enumwindows pour recuperer la classe de ma fenetre et apres je passe ce nom de classe en parametre a la fonction findwindow, c'est bien ca, non?

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  4. #4
    Membre Expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Par défaut
    honnetement j'ai du mal a comprendre comment récupérer la classe de la fenêtre(avec enumwindows) et ensuite la trouver avec findwindow, si un volontaire pouvait m'aider en me donnant un exemple d'utilisation ,parce que j'ai lu le msdn et j'avoue ne pas trop avoir compris et les exemples ne sont pas très commenté!

    merci

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut,

    ou est ton probleme exactement

    voici un exemple simple

    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
     
    type
      PTreeViewEnumParam = ^TTreeViewEnumParam;
      TTreeViewEnumParam = record
         Nodes: TTreeNodes;
         Current: TTreeNode;
      end;
     
    function EnumWindowsProc(Wnd: HWND; Param: PTreeViewEnumParam): BOOL; stdcall;
    const
      Cs_MaxName = 64;
      Cs_MaxText = 64;
    var
      ParamChild: TTreeViewEnumParam;
      ClassName: string;
      WindowText: string;
    begin
      Result := True;
      SetLength(ClassName, Cs_MaxName);
      SetLength(ClassName, GetClassName(Wnd, PChar(ClassName), Cs_MaxName));
      SetLength(WindowText, Cs_MaxText);
      SetLength(WindowText, SendMessage(Wnd, WM_GETTEXT, Cs_MaxText, lParam(PChar(WindowText))));
      ParamChild.Nodes   := Param.Nodes;
      ParamChild.Current := Param.Nodes.AddChildObject(Param.Current,
        '[' + ClassName + '] "' + WindowText + '"' + ' Handle: ' + IntToStr(Wnd), Pointer(Wnd));
      EnumChildWindows(Wnd, @EnumWindowsProc, lParam(@ParamChild));
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Param: TTreeViewEnumParam;
    begin
      Param.Nodes := TreeView1.Items;
      Param.Current := TreeView1.TopItem;
      TreeView1.Items.BeginUpdate;
      EnumWindows(@EnumWindowsProc, lParam(@Param));
      TreeView1.Items.EndUpdate;
    end;
    @+ Phil

  6. #6
    Membre Expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Par défaut
    Mon problème c'est que je connais mal le delphi et encore moins l'api windows! et j'ai du mal a comprendre exactement ce que je dois faire pour obtenir la fentre de mon appli au premier plan a partir d'une autre appli!

    pour résumer et vérifier que j'ai bien compris ! je dois récupérer la classe et le nom de ma fenetre de l'appli que je souhaite mettre au premier plan(avec enumwindows)! et ensuite coder un programme delphi qui permet de passer l'appli au premier plan avec la fonction findwindow.

    si c'est bien ca mon probleme ce sont les parametres a donner a ces fonctions, enfin surtout enumwindows! j'ai tenté de récupérer la classe avec spy++ mais il ne se lance pas chez moi j'ai le droit a une erreur a l'execution!

    en tout cas merci pour ton aide!

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  7. #7
    Membre Expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Par défaut
    Bon désolé je relance un le post car j'm'en sors pas !

    dans la FAQ il y a ce code :
    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
    function IsPrevInstance: HWND; 
    var 
      ClassName: array[0..255] of char; 
      Title: string; 
    begin 
      Title := Application.Title; 
      Application.Title := ''; 
      { On change le titre, car on trouverait toujours une application lancée, (la notre). }
      try 
        GetClassName(Application.Handle, ClassName, 255); 
        { Met dans ClassName le nom de la classe de l'application. }
        Result := FindWindow(ClassName, PChar(Title)); 
        { Renvoie le Handle de la 1ère fenêtre de Class (Type) ClassName, et le titre de l'application. }
      finally 
        Application.Title := Title; { Restauration du vrai titre. }
      end; 
    end; 
     
    procedure AfficherInstance(InstHandle: HWND); 
    begin 
      { Restaurer l'application si minimisée }
      ShowWindow(InstHandle, SW_RESTORE); 
      { Mettre la première instance en premier plan : }
      SetForegroundWindow(InstHandle); 
      { Fin de la deuxième instance }
      Application.Terminate; 
    end;
    le probleme c'est que je souhaite utiliser ce code dans un autre exe que l'application que je cherche a mettre au premier plan, donc evidement si je laisse le code en l'état il ne connait pas "Application"!donc il faut que j'enleve getClassName et dans findwindow je mette la classe et le nom de la fenetre, mais mon probleme c'est que je n'arrive pas a récupérer ces infos! je rame pour utiliser la fonction enumwindows malgré l'aide de anapurna... et comme spy++ ne se lance pas sur mon pc! y'a t'il une autre solution pour récupérer ces infos?

    désolé

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  8. #8
    Membre Expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Par défaut
    C'est bon j'ai trouvé une alternative a spy++ tres simple et efficace! c'est Systree et ca fonctionne a merveille

    merci encore unapurna

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

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

Discussions similaires

  1. [XL-2013] Besoin d'aide sur une boucle en vba dans excel
    Par ppfun dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/04/2014, 20h25
  2. [Débutant] Besoin d'aide sur ma methode dans un Domaine service.
    Par solaar dans le forum Silverlight
    Réponses: 0
    Dernier message: 18/06/2013, 17h41
  3. Réponses: 3
    Dernier message: 09/04/2008, 14h24
  4. [VB6 + Excel] besoin d'aide sur 3 petits points
    Par Mackouacloth dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/07/2007, 16h09
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

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