Détecter le lancement d'une application externe [Résolu]

Messages postés
76
Date d'inscription
dimanche 9 février 2003
Statut
Membre
Dernière intervention
10 août 2010
- - Dernière réponse : cs_PHIL63
Messages postés
76
Date d'inscription
dimanche 9 février 2003
Statut
Membre
Dernière intervention
10 août 2010
- 5 mars 2008 à 19:57
Bonsoir à toutes et à tous,
Voila ma petite question :
Existe-t-il une fonction dans une API de windows ou une autre méthode pour détecter non pas si une application est déjà lancée depuis 5 minutes par exemple mais pour détecter le lancement de cette application.
Je pourrais lancer un timer avec dans le OnTimer une recherche du handle de la fenêtre de cette application mais le temps de détecter le lancement ce sera déjà trop tard.
Le but, copier 3 petits fichiers juste au démarrage d'une application externe précise..... mais ce n'est pas mon prog qui lance cette application... sinon ce serait bien plus simple.

Donc si quelqu'un à une petite solution ...

Bonne soirée.

Philippe DROUET
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
3
Merci
Ouais, sinon, comme solution "bidouillée" tu peux tout simplement:
- Renommer l'application dont tu veux détecter le lancement
- Créer une toute petite application toi même qui aurait le même nom que celle que tu veux détecter et dont le code se résumerait à :
1. Copier les fichiers qui t'intéressent
2. Lancer effectivement l'application (en transmettant les paramètres, le tout via CreateProcess, voire même ShellExecute si t'as pas besoin de fioriture inutile)
3. Notifier TON application (en recherchant sa fenêtre et via PostMessage)

Ok c'est un peu de la bidouille mais bon, hooker ZwCreateProcess n'est peut être pas la méthode la plus simple...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 123 internautes nous ont dit merci ce mois-ci

Commenter la réponse de florenth
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
0
Merci
Quel est l'évènement qui déclenche le démarrage de cette application ?

cantador
Commenter la réponse de cs_cantador
Messages postés
76
Date d'inscription
dimanche 9 février 2003
Statut
Membre
Dernière intervention
10 août 2010
0
Merci
Bonsoir et merci de t'intéresser à ma question.

Plus de précisions :
Un logiciel lance cette application lorsque l'utilisateur clique sur un bouton "Go".
Une autre solution aurait pu être de surveiller le clic sur ce bouton mais il fait partie d'un programme externe et là je ne sais pas faire non plus.....
Si je pouvais détecter l'apparition de cette application dans la liste des processus dès son apparition, ça pourrait être bon..
merci encore.

Philippe DROUET
Commenter la réponse de cs_PHIL63
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
0
Merci
De rien, mais je trouve ta question intéressante et utile...
C'est clair si tu n'as pas le source de l'application, tu ne peux rien faire à partir de celle-ci..
La difficulté n'est pas de détecter, si elle est ouverte (il y a des exemples sur le forum à ce sujet) mais de savoir quand elle s'ouvre..
Le processus oui mais je pense que çà sera encore trop tard..
je vais chercher à moins que quelqu'un ne trouve une solution.
 
cantador
Commenter la réponse de cs_cantador
Messages postés
76
Date d'inscription
dimanche 9 février 2003
Statut
Membre
Dernière intervention
10 août 2010
0
Merci
Merci en tout cas, même si tu ne trouves rien.

Philippe DROUET
Commenter la réponse de cs_PHIL63
Messages postés
76
Date d'inscription
dimanche 9 février 2003
Statut
Membre
Dernière intervention
10 août 2010
0
Merci
J'ai quand même un avantage, je sais que la lecture de ces trois petits fichiers par la deuxième application n'a pas lieu avant 2 ou 3 secondes (c'est énorme ) après le lancement de celle-ci car elle a beaucoup de choses à charger.... Je sais, ces 2 ou 3 secondes varient en fonction de la machine sur laquelle est lancée l'application et que ce n'est pas une mesure fiable... mais j'ai rien d'autre
De plus je ne peux pas me permettre de faire faire tourner un timer en testant toutes les 100ms un lancement éventuel de cette application ... ce ne serait pas raisonnable en terme d'occupation de ressources ...

Philippe DROUET
Commenter la réponse de cs_PHIL63
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
26 juillet 2018
11
0
Merci
Salut,

Si les 3 petits fichiers sont présents avant le lancement de l'application externe, il y a peut-être une solution avec un sémaphore.
Une subtile propriété des sémaphores est qu'ils n'appartiennent jamais réellement à un process en particulier et qu'ils permettent de contrôler, par exemple, l'accès à des fichiers.

Lorsque l'application externe sera lancée, elle échouera donc. Là, il faudrait faire des essais pour voir si elle sera terminée ou simplement gelée. Ensuite voir si ton application peut libérer le sémaphore à un moment choisi par elle et... ... ... Mais là commence l'aventure! 
Veinard, va ! 

Demain, je dois m'absenter pour quelques semaines et je ne pourrais donc hélas pas participer.

Il faut faire une recherche sur les sémaphores sur Google.
Commenter la réponse de Caribensila
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
0
Merci
Il "suffit" de hooker ZwCreateProcess pour savoir qui est sur le point de se lancer.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
76
Date d'inscription
dimanche 9 février 2003
Statut
Membre
Dernière intervention
10 août 2010
0
Merci
@ Caribensila
j'ai fait une petite recherche sur les semaphores, et je dois dire que j'ai pas tout compris

@ BruNews
Je vais faire une recherche sur "ZwCreateProcess" ensuite je regarderais comment "hooker ZwCreateProcess"
Je suis pas arrivé mais au moins j'ai une piste et je t'en remercie.

Philippe DROUET
Commenter la réponse de cs_PHIL63
Messages postés
76
Date d'inscription
dimanche 9 février 2003
Statut
Membre
Dernière intervention
10 août 2010
0
Merci
@ florenth
je crois que je vais faire comme ça parce que hooker ZwCreateProcess
merci pour l'idée, je n'y avais pas pensé.

Philippe DROUET
Commenter la réponse de cs_PHIL63