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

C# Discussion :

fermeture de form quand fin de session


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    touche à tout, ou presque.
    Inscrit en
    Août 2021
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : touche à tout, ou presque.
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2021
    Messages : 1
    Points : 1
    Points
    1
    Par défaut fermeture de form quand fin de session
    Bonjour à tous,

    je cherche de l'aide concernant la fermeture de ma form dans un un contexte spécifique, je vais essayer de m'expliquer.

    Le code que j'ai fait fonctionne bien, maintenant je cherche à fermer la form1 (et du coup le programme) à la fermeture de session de windows. Sachant que j'ai déjà un code pour une ouverture de session unique, et que je pense, enfin je suis presque sure que je dois utilisé l'évent SystemEvents.SessionEnding.

    Je ne veux pas simplement faire un kill process, car je récupère une information dans le form1 que j'écris dans le registre avant la fermeture définitif du prog.

    Si quelqu'un a une idée de comment faire, car je pensais adapté mon invok et mon délégé de ma session unique (voir le code si dessous) pour fermer le form, mais je n'y arrive pas. L'état de ma forme peut être hide, du coup j'ai l'impression que ca ne me facilite pas la tache. et l'information que je récupere est dans ToolStripMenuItem.Text du form1 (mais si on arrive accède a cette information peut-être qu'écrire dans le registre avant de faire un kill du process pourrait aussi fonctionné, même si pour moi ce n'est pas une façon propre), enfin bref je pense qu'il y a plusieurs façon de faire, mais je bloque.

    C'est pourquoi je vous demande de l'aide.

    ci dessous, le code du program.cs:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    using Microsoft.Win32;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Remoting;
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Ipc;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
    namespace MonPrgDeTest
    {
        static class Program
        {
            //GUID qui ce trouve dans les information de l'assembly (unique, ou probabilité de double très faible)
            const String AppGUId = "Local\\db8b778f-e737-4c2a-9675-10e7672xxxxx";
     
            /// <summary>
            /// Point d'entrée principal de l'application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                //permet de faire que l'application ne démare qu'une fois
                using (Mutex mutex = new Mutex(false, AppGUId))
                {
                    IpcChannel channel;
                    if (!mutex.WaitOne(0))
                    {
                        //lorsque c'est une 2éme instance, je crée un message
                        String[] msg = {"Programme déjà en cour d'execution.", "Si vous ne le trouvez pas, vérifiez dans la zone de notification de la barre des taches. Et faite un clique-droite sur son icone."};
                        // et je me connect au canal qui à été créé lors du lancement de la 1er instance
                        channel = new IpcChannel();
                        ChannelServices.RegisterChannel(channel, false);
                        SingleInstance app = (SingleInstance)Activator.GetObject(typeof(SingleInstance), String.Format("ipc://{0}/RemotingServer", AppGUId));
                        // et j'envois le message à la 1er instance qui ce chargera de l'affiché
                        app.Execute(msg);
     
                        return;
                    }
                    //creation d'un canal pour que la 1ere instance puisse recevoir des arguments
                    channel = new IpcChannel(AppGUId);
                    ChannelServices.RegisterChannel(channel, false);
                    RemotingConfiguration.RegisterWellKnownServiceType(typeof(SingleInstance), "RemotingServer", WellKnownObjectMode.Singleton);
     
                    //code par défaut qu'il y a dans le Main
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
     
                    // Abonnement à l'évènement SessionEnding 
                    SystemEvents.SessionEnding += new SessionEndingEventHandler(FinDeSession);
     
                    Application.Run(new Form1());
     
                    //desabonnement à l'évènement SessionEnding (probablement inutile, car si j'en a cette ligne c'est que je quitte cette application)
                    SystemEvents.SessionEnding -= new SessionEndingEventHandler(FinDeSession); ;
                }
            }
     
            private delegate void MyDelegate();
     
            /// <summary>
            /// Objet utilisé par le serveur et le client (entre la le premier lancement du programe, et les autres)
            /// </summary>
            private class SingleInstance : MarshalByRefObject
            {
                public void Execute(String[] args)
                {
                    //affiche un message d'aide
                    Form MsgForm = new Form{TopMost = true};
                    MessageBox.Show(MsgForm.Owner, String.Join(Environment.NewLine, args), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    //si ma form1 est déjà executé, l'affiche et l'active
                    if (Application.OpenForms[0].InvokeRequired)
                    {                
                        Application.OpenForms[0].Invoke(new MyDelegate(Application.OpenForms[0].Show));
                        Application.OpenForms[0].Invoke(new MyDelegate(Application.OpenForms[0].Activate));
                    }
                }
            }
     
            /// <summary>
            /// C'est le code qui est censsé etre executé lorsque l'èvent de fin de session est détecté (pas vraiment pu testé cela)
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private static void FinDeSession(object sender, SessionEndingEventArgs e)
            {
                // ???? comment je quitte l'application sachant que l'orsque je ferme le formulaire, j'ecrit des information dans le registre
     
            }
     
        }
     
    }

  2. #2
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    Bonjour,

    Tu as l'evenement Form_Closing qui est appelé lors de la fermeture de session.

    https://docs.microsoft.com/fr-fr/dot...ramework-4.5.1

    Cordialement.

Discussions similaires

  1. [VB.NET] Fermeture du navigateur et fin de session
    Par Dadou74 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 16/11/2006, 10h43
  2. [websphere] Version du JSDK et fin de session.
    Par ncachet dans le forum Websphere
    Réponses: 2
    Dernier message: 04/01/2006, 00h04
  3. message d'erreur perso lors fin de session
    Par zorba49 dans le forum ASP
    Réponses: 1
    Dernier message: 26/08/2005, 11h12
  4. detruire une cookie après fin de session
    Par MASSAKA dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 25/08/2005, 16h02

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