PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Detection fermeture outlook
Detection fermeture outlook
Iniciado por jjacob, 13,jun. 2019 14:29 - 2 respuestas
Publicado el 13,junio 2019 - 14:29
Bonjour,

Je suis en train de développer un service qui lance une application à la fermeture d'outlook, et je recherche actuellement un moyen 'propre' pour détecter qu'outlook a été lancé, puis fermé.
Actuellement j'utilise ça :
TANTQUE ObjetActif("OutLook.Application")
FIN
LanceAppliAssociée(mon_appli)

quelqu'un connaitrai quelque chose de mieux ?

Merci d'avance
Miembro registrado
4.361 mensajes
Publicado el 14,junio 2019 - 10:24
Bonjour,
Es-tu allé voir du côté de ExeLancé ?

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
2 mensajes
Publicado el 24,julio 2019 - 12:03
Salut,

S'il n'y a pas de risque de conflit entre plusieurs instances de Outlook alors tu peux simplement te débrouiller avec Handle() et ExeLance() je pense.

Sinon il faut utiliser les API windows pour détecter l'existance d'une fenêtre grâce a son nom, et là ça se complique un peu :


Procedure F_Cherche_Titre_Fenetre(v_nom)
Lg, Ok, hWnd sont des entiers // variables utilisées par les API
lpString est une chaîne fixe sur 255

hWnd = AppelDLL32("User32", "GetWindow", Handle(), 0) // on recupere la premiere fenetre

TANTQUE hWnd <> 0 // tant qu'il reste une fenetre :

Lg = AppelDLL32("User32", "GetWindowTextLengthA", hWnd) // Recupere la longueur du texte de la barre de titre de la fenetre
Ok = AppelDLL32("User32", "GetWindowTextA", hWnd, &lpString, Lg + 1) // stock le texte de la barre de titre dans lpString
SI Ok ALORS
SI Contient(lpString,v_nom) ALORS // Si le retour contient la chaine alors on renvoie vrai, la fenetre est ouverte
RENVOYER Vrai
FIN
FIN
// On passe à la fenêtre suivante
hWnd = AppelDLL32("User32", "GetWindow", hWnd, 2)
FIN

// Si aucune fenetre ne correspond alors on renvoie faux, la fenetre n'existe pas
RENVOYER Faux


Ca c'est la fonction qui détecte si ta fenêtre est ouverte en fonction de son nom .
Le code en dessous permet d'utiliser la procédure du dessus pour vérifier que l'appli s'est bien lancée, puis d'attendre qu'elle se ferme.

v_retour est un booléen = Faux

SI PAS LanceAppliAssociée("C:\temp\170_test.xlsx") ALORS
Erreur("Impossible d'ouvrir le fichier")
RENVOYER Faux
FIN
Trace("lancement")
Temporisation(1000ms)
v_retour = F_Cherche_Titre_Fenetre("170_test.xlsx")
TANTQUE v_retour = Faux
Trace("fermé")
Temporisation(200ms)
v_retour = F_Cherche_Titre_Fenetre("170_test.xlsx")
FIN
Trace("ouvert")
TANTQUE v_retour = Vrai
Trace("ouvert")
Temporisation(200ms)
v_retour =F_Cherche_Titre_Fenetre("170_test.xlsx")
FIN
Trace("fermé")


Evidemment tu adaptes tout ça a tes besoins, ne te contente pas d'un copier/coller.