Utiliser SetForegroundWindow

Fredelem - Modifié le 1 nov. 2021 à 22:55
papyvore Messages postés 223 Date d'inscription samedi 15 novembre 2003 Statut Membre Dernière intervention 16 décembre 2021 - 7 nov. 2021 à 12:08
Bonjour,

Il m'arrive de lancer Delphi 2 fois et ça me crée des problèmes. Je voudrais bien que l'icône de Delphi 7 sur le bureau, au lieu d'appeler Delphi, lance le petit programme suivant:


IF ProcessExists('Delphi32.exe') THEN
   Begin
      Sm('Delphi est déjà ouvert !');

      // Ici une ou plusieurs lignes qui me permettraient de trouver le handle de Delphi 32.exe

      IF Winhandle>0 THEN
         SetForegroundwindow(Winhandle); // et le Delphi déjà lancé apparaîtrait en grand.
   End

   ELSE
      ShellExecute(0,'Open',Pchar('C:\Program Files'\Borland\Delphi7\Bin\Delphi32.exe'),Nil,Nil,Sw_maximize);


A la place de la ligne "Ici une ou plusieurs lignes ...", je voudrais bien avoir une ligne qui commencerait par "WinHandle:=" et qui me donnerait la valeur de WinHandle.

Voici quelques procédes que j'ai essayés. Aucun ne marche.


winhandle:=Findwindow('Delphi32.exe',nil);

winhandle:=findwindow(nil,'Delphi32.exe');

WinHandle := SysUtils.FileOpen('Delphi32.exe', fmOpenWrite);

Pid:=GetPidByProcessName('Delphi32.exe'); winhandle:=GetWindowFromID(Pid);

9 réponses

papyvore Messages postés 223 Date d'inscription samedi 15 novembre 2003 Statut Membre Dernière intervention 16 décembre 2021 15
6 nov. 2021 à 16:26
https://codeoncode.blogspot.com/2016/12/get-processid-by-programname-include.html
tu l'as 1 ou 2 messages plus haut
tu copie les functions dans ton unit
tu auras peut être a ajouter Psapi, shellapi,TlHelp32 dans les uses
2
AbeBar27 Messages postés 28 Date d'inscription mardi 14 septembre 2021 Statut Membre Dernière intervention 18 décembre 2022 8
6 nov. 2021 à 17:27
Ok, j'ai vu. Finalement les 2 méthodes sont équivalentes, il faut déclarer des fonctions supplémentaires pour trouver la fenêtre principale de l'application visée.
Je ne sais pas laquelle est la plus performante (vitesse, occupation mémoire...) Mais ça ne doit pas faire une grosse différence dans le cas présent.
En tou cas, merci pour le lien sur ces fonctions qui peuvent m'être utiles un jour.
0