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 :

[C#] mon appli bloque le reboot du PC


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 41
    Points : 40
    Points
    40
    Par défaut [C#] mon appli bloque le reboot du PC
    C'est un appli Trayicon + winform, quand on clique sur la croix pour fermer le form, je ferme le formet j'annule la fermetur complète de l'application pour qu'elle reste en trayicon.

    Sauf que quand on reboote, windows fait l'equivalent d'un clic sur la crois du form, donc il me ferme la fenetre mais mon appli reste en trayicon et le PC reboot pas, ce qui est très génant.

    Je veux gardé le principe de seulement fermer la fenetre avec la croix sans quitter l'application, tout en faisant fonctionner le reboot. Quelqu'un peut m'aider ?

    merci d'avance

  2. #2
    Inscrit

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Points : 1 229
    Points
    1 229
    Par défaut
    De quel évenement te sers-tu ? OnClosed ? OnClosing ?

    Il faudrait voir le code si possible, mais je pense qu'il doit être possible de différencier la fermeture provoquée par windows d'une fermetur provoquée par un click.
    In my experience, any attempt to make any system idiot proof will only challenge God to make a better idiot.

  3. #3
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 41
    Points : 40
    Points
    40
    Par défaut
    J'utilise l'evenement OnClosing avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
    	this.Hide(); 
    	// annule la fermeture de l'application
    	e.Cancel = true;
    }

  4. #4
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 41
    Points : 40
    Points
    40
    Par défaut
    On ne peux pas faire un override de l'évenement Closing ?

  5. #5
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    le pb avec ton code c'est que ton appli n'est pas fermable du tout

    Donc en deux fois car le code C# est pas complet:

    C#
    http://www.stevex.org/dottext/articles/155.aspx

    Vb.net
    http://www.windowsforms.net/Forums/ShowPost.aspx?tabIndex=1&tabId=41&PostID=10914

  6. #6
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Ce qu'il faut faire c'est intercepter l'evenement de fin de session Microsoft.Win32.SystemEvents.SessionEnding.

    Comme ça tu peux savoir si dans le Form1_Closing tu annules la fermeture de l'application ou pas.

    Le problème c'est qu'on ne peut être sur que le sessionEnding soit appellé avant le form.closing.

    Solution : Il faut redefinir WndProc de form afin d'incerpter WM_QUERYENDSESSION

    Exmple de code

    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
     
    // Déclaré dans ta form
    		private static bool syshutdown = false;
    		private static int WM_QUERYENDSESSION = 0x11;
     
    // Override WndProc
    		protected override void WndProc(ref Message m)
    		{
    			if (m.Msg == WM_QUERYENDSESSION)
    				syshutdown = true;
    			base.WndProc (ref m);
    		}
     
     
    private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
       this.Hide();
       // annule la fermeture de l'application si ce n'est pas une fermeture de session
        if (syshutdown == false)
            e.Cancel = true;
    }
    ça devrait marcher (j'ai jamais fais ça)

  7. #7
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 41
    Points : 40
    Points
    40
    Par défaut
    Merci beaucoup.

    Le code de Abelman résout parfaitement le problème.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Points : 125
    Points
    125
    Par défaut
    Bonjour a tous,

    J'ai le même pb ave cmon appli VB2005. Quelqu'un pourrait-il me traduire ce code C# en VB2005 pour résoudre mon problème car les convertisseurs présent sur le site ne le traduisent pas correctement apparemment car mon appli plante dès le démarrage une fois le code inséré.*

    Merci

    Ludo

  9. #9
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Fais voir ton code.
    Pour info c'est dans la FAQ VB.NET ici

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Points : 125
    Points
    125
    Par défaut
    oups pardon j'avais pas vu pourtant je peux vous dire que j'ai fouillé mais ca m'a échappé.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Points : 125
    Points
    125
    Par défaut
    mon code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
     
            e.Cancel = True
            Me.WindowState = FormWindowState.Minimized
            Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedToolWindow
     
        End Sub
    Et celui-ci empeche la fermeture de mon programme quand on ferme windows or moi je veux que lorsque l'utilisateur arrête ou redémarre Windows que celui-ci ferme mon programme proprement et ne reste pas bloqué.

    Merci

  12. #12
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Je demandais le code qui plante (issue de la traduction C#)

    Copie celui de la FAQ VBNET et ça va marcher

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Points : 125
    Points
    125
    Par défaut
    Oki

    Dès demain je teste ton code dispo dans la faq et je vous dis si ça fonctionne

    Encore merci !

    Ludo

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Points : 125
    Points
    125
    Par défaut
    Euh désolé mais en fait ce code ne fonctionne pas car il fait l'inverse de ce que je voulais mais en modifiant la condition dans la procédure Closing ça fonctionne à merveille.

    Merci bcp

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

Discussions similaires

  1. mon appli bloque linux : super galère!
    Par robux dans le forum Administration système
    Réponses: 1
    Dernier message: 16/02/2008, 10h13
  2. Drag&Drop sur l'icone de mon appli
    Par Laskar dans le forum Langage
    Réponses: 2
    Dernier message: 31/10/2004, 15h53
  3. Réponses: 7
    Dernier message: 04/06/2004, 15h20
  4. Réponses: 4
    Dernier message: 16/08/2003, 13h21
  5. Comment être sure que mon appli prenne le focus ?
    Par AmaX dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/12/2002, 15h00

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