Vous êtes actuellement hors ligne, en attente de reconnexion à Internet.
Se connecter

Votre navigateur n’est pas pris en charge

Vous devez mettre à jour votre navigateur pour utiliser le site.

Mettre à jour vers la dernière version d’Internet Explorer

Comment faire pour forcer un écran de veille pour fermer une fois démarré dans Windows NT, Windows 2000 et Windows Server 2003

IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.

La version anglaise de cet article est la suivante: 140723
Résumé
Les applications doivent parfois mettre fin à un écran de veille est déjà en cours d'exécution. Dans Microsoft Windows 95, un écran de veille a pu être arrêté facilement par la validation d'un message WM_CLOSE à la fenêtre d'économiseur d'écran actuellement actif comme dans cet exemple :
PostMessage (GetActiveWindow(), WM_CLOSE, 0, 0 L) ;
Microsoft Windows NT, introduit toutefois, le concept de postes de travail distincts, afin que les applications peuvent s'exécuter sur un et écrans de veille peuvent s'exécuter sur un autre. Écran de veille arrêt sous Windows NT, Windows 2000 et Windows Server 2003 ainsi un peu plus difficile.
Plus d'informations
Le processus d'obtention d'un handle vers la fenêtre d'économiseur d'écran actuellement actif est différent pour les systèmes d'exploitation qui sont ultérieures à Windows 95. Sur Windows NT, sur Microsoft Windows 2000 et sur Microsoft Windows Server 2003, l'écran de veille peut exécuter sur le bureau par défaut ou sur un bureau séparé, selon le paramètre défini dans les propriétés d'affichage :
  • Si vous sélectionnez la case à cocher À la reprise, protéger par mot de passe sur l'onglet Écran de veille de la boîte de dialogue Propriétés d'Affichage, l'écran de veille s'exécute sur son propre bureau.
  • Si vous désactivez la case à cocher qui est décrite dans le point précédent, l'écran de veille s'exécute sur le bureau par défaut.
Vous ne pouvez pas utiliser la fonction GetForegroundWindow() ou le FindWindow fonction pour déterminer si l'écran de veille est actif :
  • La fonction GetForegroundWindow() renvoie la valeur NULL, car l'écran de veille est en cours d'exécution sur un bureau différent à partir du bureau de l'application appelante est en cours d'exécution.
  • La fonction FindWindow ("WindowsScreenSaverClass", NULL) ne fonctionne pas soit.
Par conséquent, Microsoft vous recommande les éléments suivants :
  • Code pour faire disparaître l'écran de veille détermine d'abord si l'écran de veille s'exécute sur son propre bureau.
  • Si l'écran de veille s'exécute sur son propre bureau, le code ferme l'il écran de veille.
  • S'il n'y a aucun Bureau de l'écran de veille, le code utilise le bureau par défaut.


Pour ce faire, obtenir un handle vers bureau de l'écran de veille, d'énumérer les fenêtres du bureau et puis envoyez un message WM_CLOSE à la fenêtre d'écran de veille.

Le code suivant montre comment procéder. Notez que si un mot de passe d'économiseur d'écran est définie, le code suivant affiche la boîte de dialogue mot de passe, invite l'utilisateur un mot de passe et met fin à réellement l'application d'écran de veille.
BOOL CALLBACK KillScreenSaverFunc(HWND hwnd, LPARAM lParam) { 	if(IsWindowVisible(hwnd)) 		PostMessage(hwnd, WM_CLOSE, 0, 0); 	return TRUE; } HDESK hdesk; hdesk = OpenDesktop(TEXT("Screen-saver"), 0, FALSE, DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS); if (hdesk) { 	EnumDesktopWindows(hdesk, KillScreenSaverFunc, 0);	CloseDesktop(hdesk); } else { 	// Windows 2000 and later: 	// If there is no screen saver desktop, the screen saver 	// is on the default desktop. Close it by sending a 	// WM_CLOSE. PostMessage(GetForegroundWindow(), WM_CLOSE, 0, 0L); } 
Notez que l'arrêt d'un écran de veille est déjà en cours d'exécution comme illustré ci-dessus est totalement distinct de désactiver complètement, l'écran de veille afin qu'aucun écran de veille ne démarre après le laps de temps expire. Cela peut être effectuée facilement à l'aide :
SystemParametersInfo( SPI_SETSCREENSAVEACTIVE,                      FALSE,                      0,                      SPIF_SENDWININICHANGE                     );				
cette méthode fonctionne bien pour mettre fin à l'écran de veille en cours d'exécution. Toutefois, vous pouvez rencontrer le problème est que le système ne redémarre pas l'écran de veille, sauf si l'utilisateur déplace la souris ou appuie sur une touche. Si vous avez besoin de l'écran de veille pour démarrer à nouveau, vous devrez peut-être réinitialiser le délai d'attente. Pour ce faire, à l'aide de l'une des méthodes suivantes :
  • Appel de SystemParametersInfo (SPI_SETSCREENSAVEACTIVE, TRUE, 0, SPIF_SENDWININICHANGE).
  • À l'aide de SetCursorPos() pour simuler l'entrée d'utilisateur.
Ces deux méthodes provoquera le redémarrage du compteur de délai d'attente de l'écran de veille du système.
Désactiver Désactiver arrêt en cours d'exécution désactiver l'économiseur d'écran

Avertissement : cet article a été traduit automatiquement

Propriétés

ID d'article : 140723 - Dernière mise à jour : 02/22/2007 04:02:17 - Révision : 3.2

  • Microsoft Win32 Software Development Kit (SDK) 3.1
  • kbmt kbcode kbhowto kbscreensaver KB140723 KbMtfr
Commentaires
>ow.location.protocol) + "//c.microsoft.com/ms.js'><\/script>");