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

  1. #1
    Expert éminent
    Ouvrir une fenêtre explorateur en mode modal, ou au moins récupérer un événement quand elle se ferme !
    Bonjour,

    Dans un programme, j'ai un bouton qui permet d'ouvrir un explorateur positionné sur un dossier, afin que l'utilisateur puisse effectuer des tâches dedans.

    Je souhaite pouvoir récupérer dans mon programme l'était du dossier une fois que la personne revient dedans...

    J'ai imaginé 3 solutions :

    1/ Fenêtre modale
    La plus simple des solutions. Ouverture de l'explorateur en mode modal, donc mon programme reste bloqué tant que la fenêtre est ouverte. Puis quand l'explorateur est fermé, retour dans mon programme là où il s'était arrêté, et youpi ni vu ni connu je peux recharger le contenu du dossier au retour de l'utilisateur.
    => Sauf que là, je trouve pas du tout comment faire...

    2/ Être notifié de la fermeture de l'explorateur
    N'arrivant pas à ouvrir l'explorateur en mode modal, j'ai tenté de créer un process et de récupérer l'événement Exited, pour recharger le dossier quand l'explorateur est fermé. Mais cela ne fonctionne pas (l'événement se déclenche avant même que l'explorateur ne s'ouvre) :
    Code csharp :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
     
            private void BtnOpenOut_Click(object sender, EventArgs e)
            {
                Process p = new Process()
                {
                    EnableRaisingEvents = true,
                    StartInfo = new ProcessStartInfo("explorer.exe", Station.OutFolder)
                };
                p.Exited += P_Exited;
     
                p.Start();
            }
     
            private void P_Exited(object sender, EventArgs e)
            {
                RefreshFilesIn();
                RefreshFilesOut();
            }


    3/ Rafraîchir la fenêtre de mon program à intervalle régulier tant que la fenêtre de l'explorateur n'est pas fermée.
    Sauf que là ça va m'obliger à surveiller les process système, donc potentiellement besoin de droits administrateur, etc. Et en plus ça va être très moche... (sapin de Noël...)

    Avez-vous une meilleure solution ?
    Une idée de pourquoi ma solution 2 ne fonctionne pas ?
    On ne jouit bien que de ce qu’on partage.

  2. #2
    Membre expert
    Salut StringBuilder,

    As-tu regardés cette piste :
    https://www.visualstudiogeeks.com/wi...er-close-event

    ++

  3. #3
    Expert éminent sénior
    Bonjour,

    Le coup du process ne fonctionnera pas en tant que tel, car toutes les fenêtres sont gérées par le même process ! Et le bureau aussi d'ailleurs. Et quand tu ouvres une nouvelle fenêtre en ligne de commande (ou via Process), il y a une communication avec le process déjà existant. C'est pour cela que la commande se termine de suite !

    Peut être est-il possible de faire le coup de la modal avec un objet COM (s'il en existe un pour l'explorateur windows).
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  4. #4
    Expert éminent
    Citation Envoyé par wallace1 Voir le message
    Salut StringBuilder,

    As-tu regardés cette piste :
    https://www.visualstudiogeeks.com/wi...er-close-event

    ++
    Merci, en enrichissant un peu, j'ai pu faire exactement ce que je voulais !
    On ne jouit bien que de ce qu’on partage.

###raw>template_hook.ano_emploi###