Salut !

J'ai trouvé un code permettant la mise en veille sur http://codewindev.com.free.fr//fichesource.php?P1=100 mais il était incomplet et se déclenchait pour tous les événements de la gestion de l'alimentation.

Voici donc du code pour gérer la mise en veille depuis par exemple la fenêtre principale de votre projet.

A mettre dans le code d'initialisation de la fenêtre principale du projet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
// --- Gestion de la mise en veille
CONSTANTE
	WM_POWERBROADCAST=0x0218  
	BROADCAST_QUERY_DENY=0x424D5144
	PBT_APMSUSPEND=0x4
FIN
iEvenementMiseEnVeille est un entier
SI PAS gbBDDLocale ALORS
	iEvenementMiseEnVeille = Evénement(MiseEnVeille, "*.*", WM_POWERBROADCAST)
FIN
// --- Fin de gestion de la mise en veille
A mettre par exemple dans une procédure locale à votre fenêtre principale :
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
 
PROCEDURE MiseEnVeille(pEnumMessage, wParam, pLParam)
SI wParam = PBT_APMSUSPEND ALORS
	DélaiAvantFermeture(300)
 
	SI OKAnnuler("L'ordinateur va passer en veille.", "Cliquez sur Annuler pour empêcher l'application de se fermer.") = Annuler ALORS
		// A noter que ce code ne s'exécute jamais : il n'a pas le temps. C'est donc le bouton OK qui est validé (voir le "SINON")
		DélaiAvantFermeture(0)
		RENVOYER BROADCAST_QUERY_DENY
	SINON // Ce code s'exécute apparemment systématiquement
		DélaiAvantFermeture(0)
		// Faire ici ce que vous voulez. Moi, par exemple, je force la fermeture de mon programme car il accède à des bases SQL et je sais qu'il va planter au retour de la mise en veille...
		FinProgramme()
 
		RENVOYER Vrai
	FIN
FIN
J'espère que ça pourra aider les gens qui en ont besoin !

A+

Fabrice, Toulouse