Interrompre l'arrêt de windows :O

benjamin3322 Messages postés 11 Date d'inscription mercredi 31 décembre 2008 Statut Membre Dernière intervention 17 décembre 2011 - 6 janv. 2011 à 01:28
benjamin3322 Messages postés 11 Date d'inscription mercredi 31 décembre 2008 Statut Membre Dernière intervention 17 décembre 2011 - 7 janv. 2011 à 20:16
Salut, j'ai fait un petit programme pour passer le temps et qui à l'arrêt de windows me prévient que mon disque externe et/ou clé usb est branché ... et en principe bloque l'arrêt de windows pour que je puisse éjecter le/les disque(s) ...

mon code fonctionne car il m'affiche le msgbox "test"


    Private Const WM_QUERYENDSESSION As Integer = &H11
    Private arretwin As Boolean = False
    Protected Overrides Sub WndProc(ByRef sw As System.Windows.Forms.Message)
        If sw.Msg = WM_QUERYENDSESSION Then
            arretwin = True
            ''Threading.Thread.Sleep(50000) => ne fonctionne pas 
            Process.Start("shutdown", "-a") 'il y un msgbox avec une erreur qui s'affiche mais le système s'éteint en 2 sec
            detection_diskdisk.Start()          
            msgbox("test") ' pas le temps de cliquer sur ok ...
        Else
            MyBase.WndProc(sw)
        End If
    End Sub


donc il détecte le message "WM_QUERYENDSESSION" mais tout les prossesus sont tués

je suis sous windows 7 et quand je fais des tests ... windows ferme tout en 2 secondes

voila merci de votre aide

3 réponses

benjamin3322 Messages postés 11 Date d'inscription mercredi 31 décembre 2008 Statut Membre Dernière intervention 17 décembre 2011
6 janv. 2011 à 23:43
Salut, je n'ai toujours pas trouvé de réponse à ma question ... même si j'ai trouvé plusieurs code il ne fonctionne pas chez moi sous windows 7

'-- new
Declare Function AbortSystemShutdown Lib "advapi32.dll" Alias "AbortSystemShutdownA" (ByVal lpMachineName As String) As Integer
'-- new

    Private Const WM_QUERYENDSESSION As Integer = &H11
    Private arretwin As Boolean = False
    Protected Overrides Sub WndProc(ByRef sw As System.Windows.Forms.Message)
        If sw.Msg = WM_QUERYENDSESSION Then
            arretwin = True
            ''Threading.Thread.Sleep(50000) => ne fonctionne pas
'-- new 
            AbortSystemShutdown("Nom-de-mon-PC")
'-- new
            detection_diskdiskdiskdisk.Start()          
            msgbox("test") 
        Else
            MyBase.WndProc(sw)
        End If
    End Sub


la fonction "AbortSystemShutdown" permet d'annuler l'opération de fermeture ou de redémarrage en cours d'exécution du système d'exploitation Windows.

mais ne fonctionne pas chez moi ... peut-être que je ne l'utilise pas correctement

merci de votre aide.
0
lediablo Messages postés 214 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 2 août 2012
7 janv. 2011 à 11:24
salut
Il faut pour cela insérer ce petit bout de code dans notre classe, ce qui permet de détecter une tentative de fermeture de session et de l'annuler :

 'Message Windows QueryEndSession 
    Private Const WM_QUERYENDSESSION As Integer = &H11 

    'flag indiquant si la session est en cours de fermeture 
    Private _systemShutdown As Boolean = False 


    'Redéfinition de la fonction virtuelle WndProc 
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 

        'Mise dans systemShutdown la présence du message fermeture Windows 
        If m.Msg = WM_QUERYENDSESSION Then 
            _systemShutdown = True 

        End If 
        MyBase.WndProc(m) 
    End Sub 

    'Handler evenement closing 
    Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing 
        'Si le message fermeture Windows a été envoyé, on l'annule ! 
        If _systemShutdown Then 

            e.Cancel = True 
            _systemShutdown = False 
            MessageBox.Show("Fermeture de session windows annulée") 

        End If 

    End Sub 




Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
0
benjamin3322 Messages postés 11 Date d'inscription mercredi 31 décembre 2008 Statut Membre Dernière intervention 17 décembre 2011
7 janv. 2011 à 20:16
Salut lediablo, ton code fonctionne car j'ai le message "Fermeture de session windows annulée" c'est super
car j'ai eu le temps de cliquer sur "ok" mais après windows s'éteint , je test sur windows Xp


Test xp: le système ne s'éteint pas mais le problème c'est que j'ai windows 7

c'est peut-être pas possible sous windows 7

je garde le code pour une version "XP" de mon programmes


voila merci de votre aide.
0
Rejoignez-nous