Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4785 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Comment appeler un processus déjà résident ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment appeler un processus déjà résident ?

n°1495187
HERIBERT
Posté le 22-12-2006 à 09:40:43  profilanswer
 

Bonjour.  
 
Je souhaiterais pouvoir appeler un programme déjà lancé. En loccurrence MailWasher, dont l'icône, en bas à droite, permet justement cet appel (mais ça ne m'est pas commode) :
 
http://membres.lycos.fr/a456765/icone.png
 
Il doit bien y avoir une API pour ça, mais laquelle :??: Une API (ou une fonction de D6) permettant l'activation d'un processus résident. Un peu comme le fait le gestionnaire de tâches avec l'onglet "Processus".  
 
Pas moyen de faire ça  :heink: ?  
 
Merci :hello:


Message édité par HERIBERT le 26-01-2007 à 15:10:55
mood
Publicité
Posté le 22-12-2006 à 09:40:43  profilanswer
 

n°1506028
sad bloke
Posté le 22-01-2007 à 19:04:02  profilanswer
 

j'ai pas compris !
le processus est deja lancé et toi tu veux lui changer de nom //impossible
sinon executer ?


---------------
http://www.deezer.com/track/1115801 Qu'est ce que la vie ? :(
n°1506065
HERIBERT
Posté le 22-01-2007 à 20:50:15  profilanswer
 

sad bloke a écrit :

j'ai pas compris !
le processus est deja lancé et toi tu veux lui changer de nom //impossible
sinon executer ?


Pas du tout :non:  
Je veux le faire passer au premier plan, en quelque sorte.  
Faire, en programmation, ce que je fais en doublecliquant sur l'icône de la barre des tâches.  
 
ET là, je ne vois pas du tout :??:

n°1506072
sad bloke
Posté le 22-01-2007 à 21:20:32  profilanswer
 

ah ok bah essaye avec la commande show
 
form1.show


---------------
http://www.deezer.com/track/1115801 Qu'est ce que la vie ? :(
n°1506104
HERIBERT
Posté le 22-01-2007 à 23:03:06  profilanswer
 

sad bloke a écrit :

ah ok bah essaye avec la commande show
 
form1.show


On s'approche... mais c'est pas tout à fait ça :D
Le prog que je veux appeler (enfin : "activer" ) ne fait pas partie du prog qui l'appelle. Comment expliquer ça :/
 
Soit mon prog qui s'appelle TOTO.EXE . Soit un autre prog, en l'occurrence MailWasher. Celui-ci est "résident", comme on disait sous DOS. Il est déjà lancé, c'est un processus qui existe, et qui tourne. On le voir juste par la petit icône en bas à droite. En doublecliquant sur cette icône avec la souris, je l' "active".  
 
C'est exactement cela que je veux programmer : comme un double clic, mais sur un process existant.

n°1506200
aldo13000
Posté le 23-01-2007 à 10:01:10  profilanswer
 

HERIBERT a écrit :

On s'approche... mais c'est pas tout à fait ça :D
Le prog que je veux appeler (enfin : "activer" ) ne fait pas partie du prog qui l'appelle. Comment expliquer ça :/
 
Soit mon prog qui s'appelle TOTO.EXE . Soit un autre prog, en l'occurrence MailWasher. Celui-ci est "résident", comme on disait sous DOS. Il est déjà lancé, c'est un processus qui existe, et qui tourne. On le voir juste par la petit icône en bas à droite. En doublecliquant sur cette icône avec la souris, je l' "active".  
 
C'est exactement cela que je veux programmer : comme un double clic, mais sur un process existant.


 
 
Essaye avec FindWindow puis ShowWindow puis SetWindowPos .
 
Exemple avec Yahoo Messenger
 
andl:= findwindow('YahooBuddyMain', nil);
SendMessage(andl, WM_SETFOCUS, 0 ,0 );
SendMessage(andl, WM_ACTIVATE , 0 , 0 );
ShowWindow(andl,SW_MINIMIZE);
ShowWindow(andl,SW_SHOWDEFAULT);
 
SetWindowPos(andl, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE
or SWP_NOACTIVATE or SWP_NOSIZE);
 


---------------

n°1533278
pebayart
Posté le 24-03-2007 à 22:29:49  profilanswer
 

Bonjour, bonjour
 
Je cherchai la même chose que toi et j'ai trouvé donc je te le poste.
mes sources : http://www.developpez.com/delphi/f [...] rexecution
 
j'ai fait un mix avec les deux solutions qu'il propose pour minimiser le code.
 

Code :
  1. program Project1;
  2. uses
  3.   Windows, Forms,
  4.   UnitMain in 'UnitMain.pas' {Form1};
  5. {$R *.res}
  6. var
  7. H         : THandle;
  8. Erreur    : Integer;
  9.     lsTitre   : string;
  10.     ClassName : array[0..255] of char;
  11. begin
  12. lsTitre := 'Nom_de_ton_appli';
  13. SetLastError(NO_ERROR);
  14. H := CreateMutex (nil, False, PChar(lsTitre));
  15. Erreur := GetLastError;
  16. if ( Erreur = ERROR_ALREADY_EXISTS ) or ( Erreur = ERROR_ACCESS_DENIED ) then
  17.     begin
  18.     GetClassName(Application.Handle, ClassName, 255);
  19.     { Restaurer l'application si minimisée }
  20.     ShowWindow(FindWindow(ClassName, PChar(lsTitre)), SW_RESTORE);
  21.     { Mettre la première instance en premier plan : }
  22.     SetForegroundWindow(FindWindow(ClassName, PChar(lsTitre)));
  23.     Exit;
  24.     end;
  25. Application.Initialize;
  26. Application.Title := 'Nom_de_ton_appli';
  27. Application.CreateForm(TForm1, Form1);
  28. Application.Run;
  29. CloseHandle(H)
  30. end.


 
Voilà j'espère que sa t'aidera et les autres qui passeront ici.
 
C'est la solution pour mettre au premier plan la première instance d'une application a la place de l'ouvrir une deuxième fois, lorsque l'on lance l'exécutable.
 
Voila by.
Pierre-Emmanuel.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Comment appeler un processus déjà résident ?

 

Sujets relatifs
Serveur pour surveillance de processusComment appeler une fonction dans un état
Appeler un fichier php dans un autrePositionner une variable d'environnement Windows depuis Java ?
[MySQL] Limiter la taille du processus mySQLprocessus
Appeler fonction avec NuSoapProblème de création de processus
Appeler une fonction dont le nom peut varier?CreateObject - Processus fantomes
Plus de sujets relatifs à : Comment appeler un processus déjà résident ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)