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

Python Discussion :

Vérifier qu'une fenêtre est bien au premier plan


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 12
    Par défaut Vérifier qu'une fenêtre est bien au premier plan
    Bonjour à tous,

    Je cherche à réaliser un script qui, à un moment donné, lance des logiciels à l'aide de la fonction os.startfile et réalise après des tâches sur celui-ci à l'aide du package pyautogui. Je précise que je suis sous Windows et que je n'ai pas de possibilité de changer d'OS.

    Le problème, c'est que parfois cette fenêtre n'est pas au premier plan et donc les manipulations ne se réalisent pas telles que souhaitées. Après de longues recherches, je n'ai pas trouvé les informations que je souhaitais obtenir, d'où les questions suivantes :

    - Est-il possible de vérifier l'identité du programme au premier plan ? L'idée serait de vérifier le nom et si ce n'est pas celui souhaité, changer de fenêtre à l'aide de Alt+Tab par exemple.
    - Est-il possible de forcer à avoir une fenêtre au premier plan ?

    Merci d'avance pour vos réponses,
    UL

  2. #2
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    bonjour,

    celà peux se faire avec win32gui.GetForegroundWindow()

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 12
    Par défaut
    Salut,

    Merci pour ta réponse mais j'ai un problème lors de l'installation du module win32gui... lorsque je tape la commande pip install win32gui dans l'invite de commande, j'ai le message suivant qui s'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Command "c:\python37\python.exe c:\python37\lib\site-packages\pip\_vendor\pep517\_in_process.py get_requires_for_build_wheel C:\Users\ulaval\AppData\Local\Temp\tmp5ic9g_be" failed with error code 1 in C:\Users\ulaval\AppData\Local\Temp\pip-install-y9izrovy\win32gui
    J'ai cherché à réaliser divers manipulations trouvées sur internet, sans succès... Avez-vous une idée ?

    Merci à tous et bonne fin de journée !

  4. #4
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    bonjour,

    https://pypi.org/project/win32gui/#history : il est fort probable que win32gui ne soit pas compatible avec python 3.7, je vous recommande d'utiliser une version plus ancienne (et d'utiliser un venv si ce n'était pas le cas)
    sinon désolé je ne connais pas d'autre solution, même si je suis sûr qu'il existe des alternatives. Peut être chercher des scripts en batch qui permettent cela, avec un peut de psutil ou subprocces c'est faisable.

  5. #5
    dsy
    dsy est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 105
    Par défaut
    PyWinAuto est une alternative à PyAutoGui qui gère les fenêtres : https://pywinauto.readthedocs.io/

    Sinon pour installer win32gui sous Windows et Python 3.7 :
    https://www.lfd.uci.edu/~gohlke/pythonlibs/

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 12
    Par défaut
    Ça marche parfaitement merci à tous !

    UL

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 12
    Par défaut
    En fait, je rencontre un autre problème.

    L'entier retourné par win32gui.GetForegroundWindow() change à chaque fois que le programme supposé être vérifié est lancé.

    Existe-t-il un moyen de fixer cet entier ?

    Merci !

  8. #8
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    J'imagine que si vous parlez d'entrer C' est qu'il doit s'agir du PID de votre fenêtre, même si je n'en suis pas sûr.
    Essayé print(type(win32gui.GetForegroundWindow())), s'il s'agit bien du PID alors vous pouvez alors utiliser psutil pour récupérer votre processus, à partir de là vous pourrez vérifier s'il s'agit bien du votre (regarder le nom, les arguments passé en ligne de commande, ect...).

    À ce moment là si le processus ne semble pas être le vôtre alors il faudra que vous le trouvez (encore une fois avec psutil) puis que vous mettez la fenêtre en premier plan.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 12
    Par défaut
    Je pensais également qu'il s'agissait du PID, mais en fait ce n'est pas le cas.

    Si je lance mon programme et que je récupère avec win32gui.GetForeGroundWindow(), j'obtient à titre d'exemple l'entier suivant : 132008
    En récupérant le PID du programme concerné avec psutil, j'obtient le PID suivant : 7920

    Une idée de ce que peut être le 132008 ? J'ai l'impression qu'il s'agit d'un entier très élevé pour un PID...

    Edite : le type de win32gui.GetForeGroundWindow() est 'int'

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 677
    Par défaut
    Salut,

    Citation Envoyé par ULaval Voir le message
    Une idée de ce que peut être le 132008 ? J'ai l'impression qu'il s'agit d'un entier très élevé pour un PID...
    Un peu de recherche chez Msoft vous indiquerait qu'il s'agit d'un handle (une entité opaque utilisée comme un entier pour appeler d'autres fonctions). Si vous voulez récupérer le PID, c'est via GetWindowThreadProcessId (à récupérer dans la bonne DLL). Mais qui va aussi changer à chaque lancement de l'application.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 12
    Dernier message: 20/05/2015, 12h34
  2. Réponses: 0
    Dernier message: 16/10/2012, 13h39
  3. Comment vérifier si une application est bien démarrée
    Par emile.coue dans le forum Weblogic
    Réponses: 1
    Dernier message: 28/05/2010, 17h39
  4. Vérifier qu'une hiérarchie est bien organisée
    Par tendre_amie007 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 04/08/2009, 16h43
  5. Vérifier qu'une partition est bien montée
    Par Olivier Regnier dans le forum Linux
    Réponses: 6
    Dernier message: 30/03/2008, 00h29

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