Ouvrir une application et attendre qu'elle soir chargée
7 réponses
Ubicell
Bonjour à tous,
Voila je voudrais savoir quelles fonctions utiliser en c++
pour ouvrir une application et attendre qu'elle soit chargée.
J'utilisait ShellExecute mais il rend immediatement la main à mon
application sans attendre que le programme s'ouvre .
Je programme sous XP
D'avance merci .
Voila je voudrais savoir quelles fonctions utiliser en c++ pour ouvrir une application et attendre qu'elle soit chargée.
ShellExecuteEx() ou CreateProcess() + WaitForInputIdle()
adebaene
Ubicell wrote:
Bonjour à tous, Voila je voudrais savoir quelles fonctions utiliser en c++ pour ouvrir une application et attendre qu'elle soit chargée. J'utilisait ShellExecute mais il rend immediatement la main à mon application sans attendre que le programme s'ouvre . Je programme sous XP D'avance merci .
Commences par te donner une définition précise de "être chargée" : tu verras vite qu'il n'y a pas de réponse absolue : cela dépend du type d'application (par exemple, quand est-ce que SQL Server "est chargé" lorsqu'on le lance ???).
La réponse de Christian convient pour les applications GUI.
Arnaud MVP - VC
Ubicell wrote:
Bonjour à tous,
Voila je voudrais savoir quelles fonctions utiliser en c++
pour ouvrir une application et attendre qu'elle soit chargée.
J'utilisait ShellExecute mais il rend immediatement la main à mon
application sans attendre que le programme s'ouvre .
Je programme sous XP
D'avance merci .
Commences par te donner une définition précise de "être chargée" :
tu verras vite qu'il n'y a pas de réponse absolue : cela dépend du
type d'application (par exemple, quand est-ce que SQL Server "est
chargé" lorsqu'on le lance ???).
La réponse de Christian convient pour les applications GUI.
Bonjour à tous, Voila je voudrais savoir quelles fonctions utiliser en c++ pour ouvrir une application et attendre qu'elle soit chargée. J'utilisait ShellExecute mais il rend immediatement la main à mon application sans attendre que le programme s'ouvre . Je programme sous XP D'avance merci .
Commences par te donner une définition précise de "être chargée" : tu verras vite qu'il n'y a pas de réponse absolue : cela dépend du type d'application (par exemple, quand est-ce que SQL Server "est chargé" lorsqu'on le lance ???).
La réponse de Christian convient pour les applications GUI.
Arnaud MVP - VC
adebaene
Ubicell wrote:
Bonjour à tous, Voila je voudrais savoir quelles fonctions utiliser en c++ pour ouvrir une application et attendre qu'elle soit chargée. J'utilisait ShellExecute mais il rend immediatement la main à mon application sans attendre que le programme s'ouvre . Je programme sous XP D'avance merci .
Commences par te donner une définition précise de "être chargée" : tu verras vite qu'il n'y a pas de réponse absolue : cela dépend du type d'application (par exemple, quand est-ce que SQL Server "est chargé" lorsqu'on le lance ???).
La réponse de Christian convient pour les applications GUI.
Arnaud MVP - VC
Ubicell wrote:
Bonjour à tous,
Voila je voudrais savoir quelles fonctions utiliser en c++
pour ouvrir une application et attendre qu'elle soit chargée.
J'utilisait ShellExecute mais il rend immediatement la main à mon
application sans attendre que le programme s'ouvre .
Je programme sous XP
D'avance merci .
Commences par te donner une définition précise de "être chargée" :
tu verras vite qu'il n'y a pas de réponse absolue : cela dépend du
type d'application (par exemple, quand est-ce que SQL Server "est
chargé" lorsqu'on le lance ???).
La réponse de Christian convient pour les applications GUI.
Bonjour à tous, Voila je voudrais savoir quelles fonctions utiliser en c++ pour ouvrir une application et attendre qu'elle soit chargée. J'utilisait ShellExecute mais il rend immediatement la main à mon application sans attendre que le programme s'ouvre . Je programme sous XP D'avance merci .
Commences par te donner une définition précise de "être chargée" : tu verras vite qu'il n'y a pas de réponse absolue : cela dépend du type d'application (par exemple, quand est-ce que SQL Server "est chargé" lorsqu'on le lance ???).
La réponse de Christian convient pour les applications GUI.
Arnaud MVP - VC
Cyrille Szymanski
Bonjour,
On 2005-02-23, Christian ASTOR a écrit:
Voila je voudrais savoir quelles fonctions utiliser en c++ pour ouvrir une application et attendre qu'elle soit chargée.
ShellExecuteEx() ou CreateProcess() + WaitForInputIdle()
J'aimerais savoir si on est obligés de créer un deuxième thread qui bloque sur WaitForInputIdle() ou WaitFor...Object() pour ne pas geler l'interface graphique ou s'il existe un autre moyen (par exemple recevoir un message) ?
Merci -- Cyrille Szymanski
Bonjour,
On 2005-02-23, Christian ASTOR <castorix@club-internet.fr> a écrit:
Voila je voudrais savoir quelles fonctions utiliser en c++
pour ouvrir une application et attendre qu'elle soit chargée.
ShellExecuteEx() ou CreateProcess() + WaitForInputIdle()
J'aimerais savoir si on est obligés de créer un deuxième thread
qui bloque sur WaitForInputIdle() ou WaitFor...Object() pour ne
pas geler l'interface graphique ou s'il existe un autre moyen
(par exemple recevoir un message) ?
Voila je voudrais savoir quelles fonctions utiliser en c++ pour ouvrir une application et attendre qu'elle soit chargée.
ShellExecuteEx() ou CreateProcess() + WaitForInputIdle()
J'aimerais savoir si on est obligés de créer un deuxième thread qui bloque sur WaitForInputIdle() ou WaitFor...Object() pour ne pas geler l'interface graphique ou s'il existe un autre moyen (par exemple recevoir un message) ?
Merci -- Cyrille Szymanski
Aurelien REGAT-BARREL
> J'aimerais savoir si on est obligés de créer un deuxième thread qui bloque sur WaitForInputIdle() ou WaitFor...Object() pour ne pas geler l'interface graphique ou s'il existe un autre moyen (par exemple recevoir un message) ?
Faire des PeekMessage dans ta boucle principale pour détecter quand ta propre appli est Idle et alors faire des Wait avec des timeout courts...
-- Aurélien REGAT-BARREL
> J'aimerais savoir si on est obligés de créer un deuxième thread
qui bloque sur WaitForInputIdle() ou WaitFor...Object() pour ne
pas geler l'interface graphique ou s'il existe un autre moyen
(par exemple recevoir un message) ?
Faire des PeekMessage dans ta boucle principale pour détecter quand ta
propre appli est Idle et alors faire des Wait avec des timeout courts...
> J'aimerais savoir si on est obligés de créer un deuxième thread qui bloque sur WaitForInputIdle() ou WaitFor...Object() pour ne pas geler l'interface graphique ou s'il existe un autre moyen (par exemple recevoir un message) ?
Faire des PeekMessage dans ta boucle principale pour détecter quand ta propre appli est Idle et alors faire des Wait avec des timeout courts...
-- Aurélien REGAT-BARREL
Arnaud Debaene
Cyrille Szymanski wrote:
Bonjour,
On 2005-02-23, Christian ASTOR a écrit:
Voila je voudrais savoir quelles fonctions utiliser en c++ pour ouvrir une application et attendre qu'elle soit chargée.
ShellExecuteEx() ou CreateProcess() + WaitForInputIdle()
J'aimerais savoir si on est obligés de créer un deuxième thread qui bloque sur WaitForInputIdle() ou WaitFor...Object() pour ne pas geler l'interface graphique ou s'il existe un autre moyen (par exemple recevoir un message) ?
MsgWaitForMultipleObject(Ex), mais c'est assez délicat à mettre en oeuvre. Je ne connais pas d'équivalent pour WaitForInputIdle.
Arnaud MVP - VC
Cyrille Szymanski wrote:
Bonjour,
On 2005-02-23, Christian ASTOR <castorix@club-internet.fr> a écrit:
Voila je voudrais savoir quelles fonctions utiliser en c++
pour ouvrir une application et attendre qu'elle soit chargée.
ShellExecuteEx() ou CreateProcess() + WaitForInputIdle()
J'aimerais savoir si on est obligés de créer un deuxième thread
qui bloque sur WaitForInputIdle() ou WaitFor...Object() pour ne
pas geler l'interface graphique ou s'il existe un autre moyen
(par exemple recevoir un message) ?
MsgWaitForMultipleObject(Ex), mais c'est assez délicat à mettre en oeuvre.
Je ne connais pas d'équivalent pour WaitForInputIdle.
Voila je voudrais savoir quelles fonctions utiliser en c++ pour ouvrir une application et attendre qu'elle soit chargée.
ShellExecuteEx() ou CreateProcess() + WaitForInputIdle()
J'aimerais savoir si on est obligés de créer un deuxième thread qui bloque sur WaitForInputIdle() ou WaitFor...Object() pour ne pas geler l'interface graphique ou s'il existe un autre moyen (par exemple recevoir un message) ?
MsgWaitForMultipleObject(Ex), mais c'est assez délicat à mettre en oeuvre. Je ne connais pas d'équivalent pour WaitForInputIdle.
Arnaud MVP - VC
Jean-Claude BELLAMY
Dans le message news:421cf9bd$0$8109$ , Arnaud Debaene s'est ainsi exprimé:
Cyrille Szymanski wrote:
Bonjour,
On 2005-02-23, Christian ASTOR a écrit:
Voila je voudrais savoir quelles fonctions utiliser en c++ pour ouvrir une application et attendre qu'elle soit chargée.
ShellExecuteEx() ou CreateProcess() + WaitForInputIdle()
J'aimerais savoir si on est obligés de créer un deuxième thread qui bloque sur WaitForInputIdle() ou WaitFor...Object() pour ne pas geler l'interface graphique ou s'il existe un autre moyen (par exemple recevoir un message) ?
MsgWaitForMultipleObject(Ex), mais c'est assez délicat à mettre en oeuvre. Je ne connais pas d'équivalent pour WaitForInputIdle.
Je viens de retrouver une appli assez délirante où je le fais . Ce n'est pas si compliqué que çà !
C'est une appli d'exécution simultanée de n'importe quoi (word, powerpoint, ...) d'un même fichier copié sur plusieurs PC le tout synchronisé en multicast. (faire de la multidiffusion avec une grande économie réseau, seuls les évenéments clavier et souris étant multidiffusés sur le réseau ) Donc l'appli est "à l'écoute" d'un ordre d'exécution d'une autre appli, qu'elle doit donc lancer, mais elle doit contrôler sa fin d'exécution, tout en ne restant pas bloquée. Voici le passage intéressant (en Delphi) :
var lBusy : DWORD; StartInfo: TStartupInfo; ProcessInformation: TProcessInformation; begin .... //lancement de la nouvelle appli (command contient l'exe + les paramètres) if CreateProcess(nil,Command,nil,nil,true,0,nil,nil,StartInfo,ProcessInformation) then begin //récupération du handle de processus et ID de thread with ProcessInformation do begin Process:=hProcess; Thread:=hThread; ProcessId:=dwProcessId; ThreadId:=dwThreadId; end; WaitForInputIdle(Process,5000); //recherche de la fenêtre principale de l'appli lancée EnumThreadWindows(ThreadId,@EnumThreadWndProc,0); //EnumThreadWndProc est une callback qui retourne le handle hWndProcess //Focus et souris sur cette appli Windows.SetFocus(hWndProcess); SetCapture(hWndProcess); //boucle d'attente repeat lBusy:=MsgWaitForMultipleObjects(1,Process,False,INFINITE,QS_ALLINPUT); //on continue à traiter les messages de la présente appli //la variable globale ForceStop est mise éventuellement à true //par un message venant du réseau Application.ProcessMessages; Until (lBusy=WAIT_OBJECT_0) or ForceStop; ReleaseCapture; ForceStop:úlse; end; ... end;
-- -- May the Force be with You! La Connaissance s'accroît quand on la partage ---------------------------------------------------------- Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org *
Dans le message news:421cf9bd$0$8109$636a15ce@news.free.fr ,
Arnaud Debaene <adebaene@club-internet.fr> s'est ainsi exprimé:
Cyrille Szymanski wrote:
Bonjour,
On 2005-02-23, Christian ASTOR <castorix@club-internet.fr> a écrit:
Voila je voudrais savoir quelles fonctions utiliser en c++
pour ouvrir une application et attendre qu'elle soit chargée.
ShellExecuteEx() ou CreateProcess() + WaitForInputIdle()
J'aimerais savoir si on est obligés de créer un deuxième thread
qui bloque sur WaitForInputIdle() ou WaitFor...Object() pour ne
pas geler l'interface graphique ou s'il existe un autre moyen
(par exemple recevoir un message) ?
MsgWaitForMultipleObject(Ex), mais c'est assez délicat à mettre en
oeuvre. Je ne connais pas d'équivalent pour WaitForInputIdle.
Je viens de retrouver une appli assez délirante où je le fais .
Ce n'est pas si compliqué que çà !
C'est une appli d'exécution simultanée de n'importe quoi (word, powerpoint,
...) d'un même fichier copié sur plusieurs PC le tout synchronisé en
multicast.
(faire de la multidiffusion avec une grande économie réseau, seuls les
évenéments clavier et souris étant multidiffusés sur le réseau )
Donc l'appli est "à l'écoute" d'un ordre d'exécution d'une autre appli,
qu'elle doit donc lancer, mais elle doit contrôler sa fin d'exécution, tout
en ne restant pas bloquée.
Voici le passage intéressant (en Delphi) :
var
lBusy : DWORD;
StartInfo: TStartupInfo;
ProcessInformation: TProcessInformation;
begin
....
//lancement de la nouvelle appli (command contient l'exe + les paramètres)
if
CreateProcess(nil,Command,nil,nil,true,0,nil,nil,StartInfo,ProcessInformation)
then
begin
//récupération du handle de processus et ID de thread
with ProcessInformation do
begin
Process:=hProcess;
Thread:=hThread;
ProcessId:=dwProcessId;
ThreadId:=dwThreadId;
end;
WaitForInputIdle(Process,5000);
//recherche de la fenêtre principale de l'appli lancée
EnumThreadWindows(ThreadId,@EnumThreadWndProc,0);
//EnumThreadWndProc est une callback qui retourne le handle hWndProcess
//Focus et souris sur cette appli
Windows.SetFocus(hWndProcess);
SetCapture(hWndProcess);
//boucle d'attente
repeat
lBusy:=MsgWaitForMultipleObjects(1,Process,False,INFINITE,QS_ALLINPUT);
//on continue à traiter les messages de la présente appli
//la variable globale ForceStop est mise éventuellement à true
//par un message venant du réseau
Application.ProcessMessages;
Until (lBusy=WAIT_OBJECT_0) or ForceStop;
ReleaseCapture;
ForceStop:úlse;
end;
...
end;
--
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
Jean-Claude.Bellamy@wanadoo.fr * JC.Bellamy@free.fr
Dans le message news:421cf9bd$0$8109$ , Arnaud Debaene s'est ainsi exprimé:
Cyrille Szymanski wrote:
Bonjour,
On 2005-02-23, Christian ASTOR a écrit:
Voila je voudrais savoir quelles fonctions utiliser en c++ pour ouvrir une application et attendre qu'elle soit chargée.
ShellExecuteEx() ou CreateProcess() + WaitForInputIdle()
J'aimerais savoir si on est obligés de créer un deuxième thread qui bloque sur WaitForInputIdle() ou WaitFor...Object() pour ne pas geler l'interface graphique ou s'il existe un autre moyen (par exemple recevoir un message) ?
MsgWaitForMultipleObject(Ex), mais c'est assez délicat à mettre en oeuvre. Je ne connais pas d'équivalent pour WaitForInputIdle.
Je viens de retrouver une appli assez délirante où je le fais . Ce n'est pas si compliqué que çà !
C'est une appli d'exécution simultanée de n'importe quoi (word, powerpoint, ...) d'un même fichier copié sur plusieurs PC le tout synchronisé en multicast. (faire de la multidiffusion avec une grande économie réseau, seuls les évenéments clavier et souris étant multidiffusés sur le réseau ) Donc l'appli est "à l'écoute" d'un ordre d'exécution d'une autre appli, qu'elle doit donc lancer, mais elle doit contrôler sa fin d'exécution, tout en ne restant pas bloquée. Voici le passage intéressant (en Delphi) :
var lBusy : DWORD; StartInfo: TStartupInfo; ProcessInformation: TProcessInformation; begin .... //lancement de la nouvelle appli (command contient l'exe + les paramètres) if CreateProcess(nil,Command,nil,nil,true,0,nil,nil,StartInfo,ProcessInformation) then begin //récupération du handle de processus et ID de thread with ProcessInformation do begin Process:=hProcess; Thread:=hThread; ProcessId:=dwProcessId; ThreadId:=dwThreadId; end; WaitForInputIdle(Process,5000); //recherche de la fenêtre principale de l'appli lancée EnumThreadWindows(ThreadId,@EnumThreadWndProc,0); //EnumThreadWndProc est une callback qui retourne le handle hWndProcess //Focus et souris sur cette appli Windows.SetFocus(hWndProcess); SetCapture(hWndProcess); //boucle d'attente repeat lBusy:=MsgWaitForMultipleObjects(1,Process,False,INFINITE,QS_ALLINPUT); //on continue à traiter les messages de la présente appli //la variable globale ForceStop est mise éventuellement à true //par un message venant du réseau Application.ProcessMessages; Until (lBusy=WAIT_OBJECT_0) or ForceStop; ReleaseCapture; ForceStop:úlse; end; ... end;
-- -- May the Force be with You! La Connaissance s'accroît quand on la partage ---------------------------------------------------------- Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org *