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

Windows Forms Discussion :

Forcer l'affichage de la fenêtre principale d'un processus


Sujet :

Windows Forms

  1. #1
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut Forcer l'affichage de la fenêtre principale d'un processus
    Bonjour,

    Dans le cadre d'une application, j'ai besoin de pouvoir afficher la fenêtre principale d'un processus. De forcer une application au premier plan en d'autres termes.

    L'application en question ouvre un fichier PDF (avec Process.Start) afin que l'utilisateur puisse le remplir (PDF formulaire). Lorsque l'on ferme le lecteur PDF je détecte la sortie de ce processus. A ce stade je veux remettre l'application principale au premier plan.

    Deux cas possibles :
    • Soit on est resté dans le lecteur PDF entre son ouverture et sa fermeture
    • Soit on est allé à gauche à droite (recherche d'info pour compléter le PDF) avant de fermer le lecteur PDF

    Dans le premier cas rien à faire de particulier, l'application principale reprendra la main naturellement. Dans le second cas par contre, il faut forcer l'application à revenir au devant de la scène.

    J'ai trouvé plusieurs solutions à base de SetForegroundWindow, AttachThreadInput et autres. Cela ne fonctionne pas toujours correctement malheureusement (fenêtre qui ne revient parfois pas devant et éventuellement qui clignote dans la barre de tâche, ...). La seule solution à priori qui fonctionne bien c'est de minimiser / restaurer la fenêtre. Au début j'utilisais la méthode native ShowWindowAsync mais en jouant avec le WindowState on arrive au même résultat.

    Le problème c'est que fenêtre se réduit puis revient à l'état initial ... et ça fait moche / pas très "pro"

    Connaissez-vous une solution miracle pour ce problème ? ^^
    Pas de questions techniques par MP

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Bonjour,

    J'avais déjà eu un problème similaire (il y a longtemps, c'était en VB6) et je n'avais malheureusement pas trouvé d'autres solutions que d'encapsuler le contrôle ActiveX Acrobat Reader dans une fenêtre de mon application (comme fait Internet Explorer en gros). Après, il n'y avait plus de question à se poser et c'est plutôt invisible pour l'utilisateur.

  3. #3
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Malheureusement je ne peux pas procéder ainsi. L'utilisateur doit pouvoir enregistrer le fichier ouvert dans le lecteur PDF, je retraite ce fichier ensuite pour extraire les données saisies.

    En intégrant dans un browser, l'ActiveX permet uniquement d'enregistrer une copie et pas le fichier ouvert. Pour l'utilisateur ça imposerait de lui dire d'enregistrer le fichier à un endroit précis que je puisse détecter l'opération, difficilement réalisable donc.
    Pas de questions techniques par MP

  4. #4
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Soit on est allé à gauche à droite (recherche d'info pour compléter le PDF)
    [...]
    Dans le second cas par contre, il faut forcer l'application à revenir au devant de la scène.
    bonjour,

    Les infos pour remplir le pdf, l'utilisateur devra aller les chercher sur la fenetre principale ou bien ailleur ou encore les deux?

    Ma solution c'est d'envoyer au constructeur de ton formulaire un paramètre avec la référence de ta fenetre principale que tu stockeras dans une propriété privée et au moment de fermer la fenêtre du formulaire PDF, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       ReferenceFormulairePrincipal.BringToFront();
    je pense que c'est suffisant si j'ai bien compris ton post.
    bon dev...
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  5. #5
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Les infos pour remplir le pdf, l'utilisateur devra aller les chercher sur la fenetre principale ou bien ailleur ou encore les deux?
    Les deux, mais principalement ailleurs. La méthode BringToFront ne fonctionne pas dans ce cas de figure, cela aurait été trop simple
    Pas de questions techniques par MP

  6. #6
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    re,
    c'est vrai c'était trop simple...
    bon j'ai trouvé un truc intéressant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          Process p = Process.Start(new ProcessStartInfo(args));
          p.EnableRaisingEvents = true;
          p.Exited += //ton delegate pour faire this.BringToFront(); attention aux appels inter-thread...
          p.Start();
    ça a fonctionné chez moi...
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  7. #7
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Une fois le process démarré (ouverture d'un PDF dans le cas du sujet), si tu affiches l'explorateur Windows puis que tu retournes sur le PDF et que tu quittes le lecteur, tu te retrouveras sur l'explorateur Windows. Le BringToFront ne ramènera pas ton application devant.

    Au final je vais contourner le problème en changeant la manière de procéder. Je vais bloquer l'accès à l'application en cachant la fenêtre et en passant par un icône dans le systray pour savoir que l'application et toujours là. A la fermeture du lecteur PDF j'affiche de nouveau la fenêtre ce qui la met au premier plan. Je n'ai constaté aucun problème de passage au premier plan avec ce système.

    Par contre ça soulève un autre problème. Si je masque une fenêtre affichée en ShowDialog (this.Visible = false ou this.Hide()) ça force la "fermeture" de la fenêtre en question et donc tout part en sucette puisque je continue après le ShowDialog :/

    Je pense que c'est le fonctionnement logique, puisqu'une fenêtre en ShowDialog est masquée par .Net lorsqu'on la ferme. Donc si on la masque par le code on rentre dans le même processus. Résultat, comment cacher une application avec une fenêtre modale ouverte ? Ce sera peut être le sujet d'un autre sujet ^^

    Dans un premier temps je vais sûrement tester en minimisant la fenêtre modale (avec un ShowInTaskBar à false) et en cachant la fenêtre principale. Cela devrait suffire.
    Pas de questions techniques par MP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Forcer l'affichage d'une fenêtre au premier plan.
    Par SuperCoquillette dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 24/05/2011, 09h31
  2. Thread et affichage de la fenêtre principale
    Par djiga4me dans le forum Langage
    Réponses: 1
    Dernier message: 16/08/2010, 04h34
  3. Réponses: 1
    Dernier message: 27/05/2010, 10h55
  4. Réponses: 3
    Dernier message: 25/03/2010, 11h14
  5. Forcer l'affichage d'une fenêtre au premier plan
    Par Svart26 dans le forum WinDev
    Réponses: 1
    Dernier message: 19/03/2008, 17h55

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