Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

[RÉSOLU] Message à l'arrêt de Windows en VB6


Messages recommandés

Posté(e) (modifié)

Bonjour à tous et bonne année 2010 !

 

Il m'arrive trop souvent d'oublier d'arrêter mon HDD externe ou mon ampli (la Led est morte !) lorsque j'arrête Windows le soir. Jai donc écrit un tout petit programme en VB6 comme suit :

 

Public Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
MsgBox "Ne pas oublier d'arrêter l'ampli et/ou le disque dur externe !", vbExclamation
End
End Sub

 

La forme est invisible (form1.visible = vbNo

 

Comme on ne peut pas sous XP ni sous Vista (je ne sais pas sous Windows 7 que je n'ai pas) exécuter un programme à l'arrêt de Windows, je lance mon EXE au démarrage et il reste dormant jusqu'à ce que je décide d'arrêter Windows. Pas grave car pas d'I/O's, pas de CPU, juste un peu de mémoire. Lorsque je clique sur Arrêter Windows, son processus de fin désactive les tâches en cours, y compris la mienne. Dans ce cas, l'environnement Query_Unload est activé et j'ai mon message :

 

img-115150ynsuq.jpg

 

Le problème est que si j'ai bien ma MsgBox, elle disparaît au bout de quelques secondes car Windows arrête la tâche.

 

Question :

 

Y a-t-il un moyen pour que :

- soit le message reste un certain temps

- soit que l'arrêt de mon programme ne se fasse que si j'appuie sur le bouton OK

 

Merci de votre aide

 

Notpa01

Modifié par Notpa

Posté(e)

Salut Notpa01, (notes bien quand même :P )

 

Comme on ne peut pas sous XP ni sous Vista (je ne sais pas sous Windows 7 que je n'ai pas) exécuter un programme à l'arrêt de Windows

On peut le faire sur les 3 OS que tu cites, voir script d'ouverture/femeture de Windows..

 

Sinon, pour ton prog vb6, le problème viens du fait que ton msgbox fige ton programme et qu'au bout d'un certain temps sans réponse Windows force la fermeture. Tu peux essayer d'afficher une form plutot qu'un msgbox et de mettre cancel à 1 si UnloadMode indique que c'est le système qui demande la fermeture...

 

Y a longtemps que j'ai plus fait de Vb6 et je ne l'ai pas sous la main pour tester mais tu devrais t'en sortir avec ce ptit bout de code:

Public Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = vbAppWindows Then
	Form2.Show()
	  Cancel = 1
end if
End Sub

 

++

Posté(e)

Bonjour sebdraluorg,

 

As-tu une idée pour tester UnloadMode = vbAppWindows autre que de relancer Windows (c'est long de relancer à chaque fois !). J'ai essayé avec le Gestionnaire de Tâches mais il semble que le UploadMode n'a pas la valeur 2 (appWindows).

 

Merci !

 

Notpa01

Posté(e)

Ne cherche plus ! Avec UploadMode = 0, ça marche quand le fait un cancel de la tâche. Just pour tester. Je refais le test avec 2 comme tu l'as dit.

 

Merci !

Posté(e)

Re,

 

J'ai fait comme tu as dit :

 

Dans Form1 :

Public Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

If UnloadMode = vbAppWindows Then
	Form2.Show
	  Cancel = 1
End If

End Sub

 

Dans Form2 :

 

Private Sub Form_Load()
MsgBox "Ne pas oublier d'arrêter l'ampli et/ou le disque dur externe !", vbExclamation

End Sub

 

A l'arrêt de Windows, je n'ai que la Form1 (j'ai marqué Visible = vbYes), mais ni la Form2, ni la MsgBox ne s'affichent. Donc, j'en déduit que le UploadMode n'est pas valide. Dur à tester en dehors de l'environnement VB et uniquement lors de l'arrêt de Windows !

 

Merci pour ton aide.

 

Notpa01

Posté(e) (modifié)

Hello,

 

J'ai peut-être une autre solution. En cherchant sur le Web, j'ai trouvé un freeware : LastChance. Il permet de lancer un ou plusieurs programmes à l'arrêt de Windows et de bloquer le processus d'arrêt jusqu'à la fin du programme lancé (dans mon cas, cliquer sur le bouton OK). Mais ça peut-être utile pour, par exemple, lancer une sauvegarde.

 

Desc:

LastChance is a desktop utility that provides the facility to run programs when the machine is shutting down. Once the user chooses Shutdown from the Start menu, LastChance will intercept the shutdown request and optionally run the configured programs, waiting for them to finish before continuing the shutdown procedure.

 

Screen shot :

 

img-141053f6koh.gif

 

Un petit icône rond vert clignote dans le systray indiquant que LastChance est actif.

 

Testé sous Vista. Je testerai sous XP si OK sous Vista.

 

Je verrai ce soir si ça correspond à mes besoins.

 

Notpa01

Modifié par Notpa
Posté(e)

re,

 

Euh pour la form2 elle doit te servir a "simuler" la msgbox donc tu ne dois plus appeler msgbox! Tu mets par exemple le message dans un label sur ta form2...

Mais bon, le problème est ailleurs, en fait ta form1 ne reçoit pas le message car elle est invisible.

Pour contrer ça tu peux la mettre en borderStyle = none et lui donner une largeur et une hauteur de 0

 

Voici un petit exemple que je viens de réaliser et de tester sous XP.

 

++

Posté(e)

Hello sebdraluorg !

 

Merci pour ton petit programme. J'ai regardé, ça a l'air de tenir la route. Mais je ne vais pas utiliser VB6 pour intercepter le shutdown de Windows. J'ai testé avec succès le freeware LastChance.

 

LastChance est un utilitaire de bureau qui fournit la facilité d'exécuter des programmes lorsque la machine est occupée à s'éteindre. Une fois que l'utilisateur choisit d'éteindre à partir du menu Démarrer, LastChance intercepte la requête d'arrêt et exécute au choix les programmes configurés, attendant qu'ils se terminent avant de continuer la procédure d'arrêt.

 

L'avantage est qu'il peut lancer plusieurs programmes (un pense-bête, une sauvegarde, une déconnexion, etc) à l'arrêt de Windows. Si je veux lancer 3 programmes à ce moment là, en VB, je dois lancer les 3 programmes. Avec LastChance, il n'y a que ce dernier qui est lancé mais qui lance mes 3 programmes.

Il fait 0 I/Os, 0 CPU et juste 320K de mémoire.

 

En tous cas, merci pour ton aide et pour le temps que tu as passé pour moi.

 

Et bonne année 2010 !

 

Sujet résolu.

 

Notpa01

Posté(e)

Salut,

 

Parfait si cela te convient :P

Juste pour information ce que fait LastChance est tout à fait faisable aussi en vb6 ou autre...

 

Pas de soucis pour le temps perdu, à peine 5 minutes dans une VM :P

 

Bonne continuation

++

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...