[API] kkun sait fermer une appli à partir d'un prog ?...

kkun sait fermer une appli à partir d'un prog ?... [API] - C++ - Programmation

Marsh Posté le 23-05-2002 à 11:40:11    

Voilà, je cherche le moyen de fermer une application à partir d'un prog.  
J'ai trouvé les fonctions de l'API :  
CloseHandle, CloseWindow, DestroyWindow, mais aucune d'elles ne ferme l'appli dont le handle est passé en paramètre...  
 
Il n'y a que CloseWindow qui réagit en minimisant l'appli mais elle tourne toujours dans la barre des tâches...
 
Une soluce ???
 
Merci !

Reply

Marsh Posté le 23-05-2002 à 11:40:11   

Reply

Marsh Posté le 23-05-2002 à 12:05:26    

Si tu recupere le pid du process de l'appli, tu peux faire un TerminateProcess dessus. Par contre je ne sais pas si c'est propre

Reply

Marsh Posté le 23-05-2002 à 12:36:22    

Il doit y avoir des flags pour la terminaison du process, donc tout depend de ce que tu recherches.


---------------
Il vaut mieux en rire que d'en pleurer !
Reply

Marsh Posté le 23-05-2002 à 15:34:21    

try58 a écrit a écrit :

Si tu recupere le pid du process de l'appli, tu peux faire un TerminateProcess dessus. Par contre je ne sais pas si c'est propre  




 
Ben ça fait pas grand chose... je vais finir par me demander si C possible à la fin !!!
 
Au fait, petite vérification, le pid, c'est le Handle de la fenêtre que je veux fermer, C bien ça ?
 
en fait voilà le code:
        HWND hWnd = ::FindWindow(NULL, "MyAppli" );
        if(hWnd) TerminateProcess(hWnd, 0);
 
et ça marche pô...

Reply

Marsh Posté le 23-05-2002 à 15:42:44    

Rawhead rex a écrit a écrit :

Il doit y avoir des flags pour la terminaison du process, donc tout depend de ce que tu recherches.  




 
En fait voilà le pb en gros :
 
J'ai réalisé un petit prog il y a qques années et aujourd'hui je fais la version 2.0 de ce petit prog. J'ai gravé ce logiciel sur pas mal de mes CD et il est lancé par un autorun. Le pb est que j'avais pas pensé qu'un jour je ferais une 2è version, et ce petit prog, une fois lancé, ne cherche pas à lancer un exécutable sur le DD à la recherche d'une mise à jour...
 
J'ai donc pensé que ma nouvelle version devrait tourner en tâche de fond et dès qu'elle détecterait que l'ancienne version est lancée, elle la fermerait et se lancerait à sa place...
 
Oui bon, C un peu bourrin mais G rien trouvé d'autre...
 
Donc voilà à quoi servirait exactement cette fonction pour terminer une appli, j'espère avoir donné suffisamment d'explications...
 
Alors, des idées ?  :hello:  
 
Merci !


---------------
...m'enfin !!!
Reply

Marsh Posté le 23-05-2002 à 16:23:03    

mikegyver a écrit a écrit :

 
 
Ben ça fait pas grand chose... je vais finir par me demander si C possible à la fin !!!
 
Au fait, petite vérification, le pid, c'est le Handle de la fenêtre que je veux fermer, C bien ça ?
 
en fait voilà le code:
        HWND hWnd = ::FindWindow(NULL, "MyAppli" );
        if(hWnd) TerminateProcess(hWnd, 0);
 
et ça marche pô...  




 
Le PID, c'est l'identifiant du process de ton appli.
Tu surement le retrouver avec EnumProcesses ('faut voir...)
Une fois que t'as le PID, tu peux faire un TerminateProcess.
C pas propre du tout, un TerminateProcess, parce que ça termine le process brutalement. ça libère pas forcément la mémoire j'pense. ça serait mieux de terminer ton appli en envoyant le message WM_CLOSE au handle de la fenêtre principale de ton appli. T'as essayé ça !?

Reply

Marsh Posté le 23-05-2002 à 16:38:08    

En fait, je viens de regarder dans la msdn et apparement TerminateProcess prend un handle comme argument. Donc ce n'est pas la peine de chercher le pid. (Moi aussi je me suis fais avoir).

Reply

Marsh Posté le 23-05-2002 à 16:40:40    

el_gringo a écrit a écrit :

 
 
ça serait mieux de terminer ton appli en envoyant le message WM_CLOSE au handle de la fenêtre principale de ton appli. T'as essayé ça !?  




Je pense que ce n'est pas l'appli de son programme qu'il veut fermer mais une autre externe. Enfin je crois!!

Reply

Marsh Posté le 23-05-2002 à 18:30:22    

try58 a écrit a écrit :

 
Je pense que ce n'est pas l'appli de son programme qu'il veut fermer mais une autre externe. Enfin je crois!!  




 
Exact, et je pense que c'est justement ce el_gringo voulait dire parce CA MAAAAAAAAAAAAAAAAAAAARCHE !!!  :D  :D  :D  :D  :D  :D  
 
voici le code :
        HWND hWnd = ::FindWindow(NULL, "Game_up" );
        if(hWnd) SendMessage(hWnd, WM_CLOSE, 0, 0);
 
depuis le temps que le la cherchais cette fonction...
 
Merci à tous !


---------------
...m'enfin !!!
Reply

Marsh Posté le 24-05-2002 à 09:04:33    

try58 a écrit a écrit :

 
Je pense que ce n'est pas l'appli de son programme qu'il veut fermer mais une autre externe. Enfin je crois!!  




 
J'vois pas le rapport !
Une fenêtre peut recevoir des messages depuis n'importe quelle appli, du moment que l'appli dispose du Handle de la fenêtre.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed