Fermeture de Windows + Help !

cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 12 mars 2006 à 21:33
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 13 mars 2006 à 10:18
Bonjour à tous,

J'ai besoin de pouvoir détecter dans mon programme quand windows est en cours de fermeture afin de pouvoir quitter mon appli car je fais dans l'évement Closing : e.Cancel = true ;

J'ai donc essayé le code qu'avais trouvé MorpionMx :


protected override void WndProc(ref Message m)


{





const int SC_CLOSE = 61536;


const int WM_SYSCOMMAND = 0x0112;





if(m.Msg WM_SYSCOMMAND && (int)m.WParam SC_CLOSE)


{


Application::Exit() ;

}





base.WndProc(ref m);


}

Mais je n'arrive pas a m'en servir quand windows se ferme mon programme reste où il est en est et bloque la fermeture de windows.

Quelqun aurait t'il une idée sur le sujet ?

Par avance, merci.

3 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
12 mars 2006 à 21:56
Salut,

La classe SystemEvents contient notamment l'event SessionEnding :-)

/*
coq
MVP Visual C#
*/
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
13 mars 2006 à 09:28
j'utilise le Code de Mx différemment :

crée un booléen comme ceci dans ton formulaire :
private bool isWindowsClosing = false;

protected override void WndProc(ref Message m)
{

const int SC_CLOSE = 61536;
const int WM_SYSCOMMAND = 0x0112;
this.isWindowsClosing (m.Msg WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE);
base.WndProc(ref m);
}

et dans le Form_Closing tu fais :

e.Cancel = !this.isWindowsClosing;

Sinon, en .net 2.0 tu as le paramètre SystemEvents


Sébastien FERRAND (
blog)
[Microsoft MVP Visual C#]
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
13 mars 2006 à 10:18
J'ai essayé le code de sebmadate dans un premier temps, ca a l'air de marcher, pour tester je dois redemarrer mon pc ce qui prend au moins 10 min, y'aurais pas une autre solution ?
En faite dans Form1 j'appelle une form qui est la page qui permet de se loguer : (fs)

if (close == false)
{
if (MessageBox::Show(QUITTER,NOM_LOGICIEL, MessageBoxButtons::YesNo, MessageBoxIcon::Question) == DialogResult::Yes)
this.DialogResult = DialogResult.Abort ;
else
e.Cancel = true ;
}

En faite quand cette form est quitter elle prend DialogResult = Abort ce qui fait que dans Form1 :

if (fs->ShowDialog() == DialogResult::Abort)
{
Application::Exit() ;
}
else
{ // le programme continu.....

Dans ce cas je crains que le code ne me permette pas de fermer l'appli lors d'un redemarrage de windows.

Qq aurait t'il une idée ?
Par avance, merci.
0
Rejoignez-nous