IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

[WD26] Comment savoir si une appli externe est toujours en cours d'utilisation


Sujet :

WinDev

  1. #1
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 384
    Points : 9 745
    Points
    9 745
    Par défaut [WD26] Comment savoir si une appli externe est toujours en cours d'utilisation
    Bonjour à toutes et tous,

    Voilà, je me pose une question, qui de prime abord semble simple, mais pour laquelle la solution m'échappe.

    Si je lance une application (depuis une appli Windev) avec LanceAppli, je peux récupérer le n° de processus (PID) en utilisant le paramètre exePid, dans la seconde syntaxe de la fonction.

    La question que je me pose, c'est comment je sais que cette application a été fermée ? Bref, comment savoir que ce PID n'est plus valable ?

    Si quelqu'un a une idée, merci d'avance.

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 276
    Points : 739
    Points
    739
    Par défaut
    Bonjour,

    Tout simplement, avec la fonction ExeLancé (https://doc.pcsoft.fr/fr-FR/?3035003&name=ExeLance) : on peut passer le chemin de l'exécutable ou le PID.

    Une autre méthode (moins fine) peut être de lister tous les processus avec ExeListeProcessus et de vérifier si une ligne correspond au PID.

  3. #3
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 384
    Points : 9 745
    Points
    9 745
    Par défaut
    Tout d'abord merci pour vos pistes.

    Maintenant, j'ai un souci. Je vais devoir utiliser LanceAppliAssociée pour ouvrir des documents (excel, word, ...), mais je veux savoir quand est-ce que l'application est fermée. Je ne veux pas que l'application attende la fermeture de l'application, car l'utilisateur doit pouvoir retourner dans l'appli windev pour consulter ce qu'il veut afin de compléter le document ouvert. Par contre, j'ai besoin de savoir si l'application fille a été fermée.

    Comme LanceAppliAssociée ne renvoie pas de PID, je me suis tourné vers ExeListeProcessus. Je récupère bien la liste des processus, mais je ne sais pas quels fichiers sont ouverts.

    Par exemple, si j'ouvre un classeur Excel je vais retrouver une ligne me donnant le chemin complet de Excel (avec le nom du fichier passé en ligne de commande, si c'est comme ça que je l'ai ouvert ou si je l'ai lancé depuis l'explorateur). Mais, si j'en ouvre un second, le résultat ne change pas (mise à part la mémoire occupée).
    Donc, je n'ai aucun moyen de savoir quels sont les fichiers ouverts et donc aucun moyen de savoir si on a fermé tel ou tel document.

    Dans le gestionnaire des tâches de Windows, on retrouve bien une seule ligne pour Excel (par exemple), mais il est possible de dérouler la liste des documents ouverts. Comment est-ce que je peux obtenir la même chose avec Windev ? Je suppose qu'il faut passer par les API, mais lesquelles et comment ? Je ne suis pas un expert API.

    Quelqu'un aurait déjà réalisé un truc comme ça et pourrait me donner une piste, ou alors une idée de solutions de contournement ?

    L'idée est d'ouvrir un ou plusieurs documents (excel, word, ...) et de savoir quand ces documents sont refermés.

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  4. #4
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 808
    Points : 5 264
    Points
    5 264
    Billets dans le blog
    1
    Par défaut
    Boujour,
    Essaye avec fouvre avec un blocage en écriture. Si l'ouverture échoue (handle = -1 et errcodesysteme=32) c'est que le fichier est déjà ouvert. Il suffit de traiter ça dans ton CAS ERREUR
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  5. #5
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 384
    Points : 9 745
    Points
    9 745
    Par défaut
    Citation Envoyé par Voroltinquo Voir le message
    Boujour,
    Essaye avec fouvre avec un blocage en écriture. Si l'ouverture échoue (handle = -1) c'est que le fichier est déjà ouvert.
    Bonjour Voroltinquo,

    Merci pour cette solution de contournement, comme on les aime dans Windev
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  6. #6
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 808
    Points : 5 264
    Points
    5 264
    Billets dans le blog
    1
    Par défaut
    J'ai édité légèrement la solution de contournement (temps de réflexion après le valider) mais le principe est le même
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  7. #7
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    hello,
    Citation Envoyé par Jon Shannow Voir le message
    passer par les API, mais lesquelles et comment ? Je ne suis pas un expert AP

    Quelqu'un aurait déjà réalisé un truc comme ça et pourrait me donner une piste, ou alors une idée de solutions de contournement ?

    L'idée est d'ouvrir un ou plusieurs documents (excel, word, ...) et de savoir quand ces documents sont refermés.

    JS
    peut-être en te servant de ma classe ClWinInfos :
    Cette classe permet de récolter des informations sur les fenêtres Windows en activité (un peu comme Spy++). En particulier les Handles, Pid, noms de Classe et Titres des fenêtres Windows.
    Voici un exemple d'utilisation pour trouver les fenêtres Excel et Word qui sont ouvertes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    MonwinInfo est un ClWinInfos.WinInfo
    MaClasseWinInfo est une ClWinInfos
     
    // on recherche la fenêtre ayant un nom de classe contenant XLMAIN (MS EXcel)
    Trace("============================ EXCEL ===========================================")
    MonwinInfo = MaClasseWinInfo.GetWinInfo(0,"XLMAIN",Null,Null)
    Trace("Handle : " + MonwinInfo.Hwnd,  "   Pid : " + MonwinInfo.Pid, 
    "   Classe : " + MonwinInfo.Clas,"   Titre : " + MonwinInfo.Titre)
    TableauSupprimeTout(MaClasseWinInfo.tabWinInfos)
    Trace("============================ WORD =======================================")
    // on recherche la fenêtre ayant un nom de classe contenant OpusApp ( MS Word) 
    MonwinInfo = MaClasseWinInfo.GetWinInfo(0,"OpusApp",Null,Null)
    Trace("Handle : " + MonwinInfo.Hwnd,  "   Pid : " + MonwinInfo.Pid, 
    "   Classe : " + MonwinInfo.Clas,"   Titre : " + MonwinInfo.Titre)
    TableauSupprimeTout(MaClasseWinInfo.tabWinInfos)
    et voici le résultat . Dans un premier temps il y avait un Word et en Excel actif. Dans un deuxième temps les applications avaient été fermées :
    Nom : ClWinInfos.PNG
Affichages : 516
Taille : 14,6 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  8. #8
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 384
    Points : 9 745
    Points
    9 745
    Par défaut
    Salut JP,

    Juste une question, est-ce que cette classe sera capable de me lister tous les documents ouverts dans excel ou word, par exemple ?

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  9. #9
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    Non, il s'arrête à la première fenêtre trouvée avec les conditions
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  10. #10
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 384
    Points : 9 745
    Points
    9 745
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    Non, il s'arrête à la première fenêtre trouvée avec les conditions
    Mais c'est modifiable
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  11. #11
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    hello,
    voici une solution olé olé avec des objets automation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    // Test Docs Excel Word   J.P 09/2021
    XLObj est un objet Automation dynamique
    WordObj est un objet OLE dynamique
    i est un  entier
    SI ObjetActif("Excel.Application") <> Null ALORS
    	// Récupération de l'instance de Excel existante
    	XLObj = ObjetActif("Excel.Application")
    	Trace(" ======== Documents Excel ouverts ==========")
    	POUR i=1 _A_ XLObj>>Workbooks>>Count
    		Trace(XLObj>>Workbooks>>Item(i)>>Name)
    	FIN
    SINON
    	Trace("Excel n'est pas ouvert")
    FIN
    SI ObjetActif("Word.Application") <> Null ALORS
    	// Récupération de l'instance de Word existante
    	WordObj = ObjetActif("Word.Application")
    	Trace(" ======== Documents Word ouverts ==========")
    	POUR i=1 _A_ WordObj>>Documents>>Count
    		Trace(WordObj>>Documents>>Item(i)>>Name)
    	FIN
    SINON
    	Trace("Word n'est pas ouvert")
    FIN
    Exemple de résultat :

    Nom : WdDetectWordExcel.PNG
Affichages : 482
Taille : 9,2 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  12. #12
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Bonjour,

    Je sais que j'ai qqpart un bout de code avec un appel api qui va lister tous les processus en cours... Mais il faut que je le retrouve...
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  13. #13
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 384
    Points : 9 745
    Points
    9 745
    Par défaut
    Merci à tous pour vos propositions, mais je pense que j'ai trouvé ma solution. Je vais utiliser la classe de JP et tester si le document est toujours dans la liste. S'il ne l'est plus, c'est qu'on a fermé. Ensuite, il me reste à comparer la date et l'heure de modif du document avec celle lors de l'ouverture pour savoir si le document a été modifié.

    Je risque de me heurter à d'autres soucis, alors je vais laisser le post ouvert...

    Encore merci à tous.

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  14. #14
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    hello,
    c'est quoi le souci avec la méthode OLE ? il y a des documents qui s'ouvre avec des applications qui n'ont pas d'objet COM ?
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  15. #15
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 384
    Points : 9 745
    Points
    9 745
    Par défaut
    C'est ça. Je ne suis pas sûr que je puisse gérer tous les documents de cette manière. Et puis ta classe est très rapide, et avec TableauChercheParProcédure, c'est très facile de savoir si le document est toujours ouvert. Et la méthode est la même quelle que soit l'outil (Excel ou Word).
    Merci pour ta classe en tout cas
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

Discussions similaires

  1. comment savoir si une appli ASP est en html 1.1?
    Par RobinNono dans le forum ASP
    Réponses: 2
    Dernier message: 30/07/2007, 03h44
  2. [C#] Comment savoir si une connexion SQL est disponible ?
    Par mister3957 dans le forum Accès aux données
    Réponses: 4
    Dernier message: 19/10/2006, 10h53
  3. Comment savoir si une fenêtre s'est fermée
    Par niuniuk36 dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 12/05/2005, 14h49
  4. Comment savoir si une impression s'est bien déroulé?
    Par Cyrilh7 dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/11/2003, 20h49
  5. Réponses: 4
    Dernier message: 10/09/2002, 17h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo