Nécessité de désactiver l’économiseur d’écran / le locking d’écran dans Windows C # /. Net

Pour une application particulière, il faut que l’économiseur d’écran soit désactivé pendant son exécution. L’opérateur POURRAIT l’éteindre manuellement, puis le rallumer plus tard, mais la solution la plus simple consiste simplement à garder l’économiseur d’écran à distance pendant l’exécution de l’application.

Comment puis-je faire cela? J’ai trouvé le code permettant de désactiver l’économiseur d’écran avec SPI_SETSCREENSAVEACTIVE, mais je ne pense pas que ce soit ce que je souhaite.

theoldnewthing a votre réponse: utilisez SetThreadExecutionState(ES_DISPLAY_REQUIRED) .

Ceci est utilisé par les lecteurs vidéo et PowerPoint.

 [FlagsAtsortingbute] public enum EXECUTION_STATE : uint { ES_SYSTEM_REQUIRED = 0x00000001, ES_DISPLAY_REQUIRED = 0x00000002, // Legacy flag, should not be used. // ES_USER_PRESENT = 0x00000004, ES_AWAYMODE_REQUIRED = 0x00000040, ES_CONTINUOUS = 0x80000000, } public static class SleepUtil { [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags); } public void PreventSleep() { if (SleepUtil.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_DISPLAY_REQUIRED | EXECUTION_STATE.ES_SYSTEM_REQUIRED | EXECUTION_STATE.ES_AWAYMODE_REQUIRED) == 0) //Away mode for Windows >= Vista SleepUtil.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_DISPLAY_REQUIRED | EXECUTION_STATE.ES_SYSTEM_REQUIRED); //Windows < Vista, forget away mode } 

Crédit: P / Invoke , point mort

SystemParametersInfo avec SPI_SETSCREENSAVEACTIVE est le moyen normal de procéder. Cependant, cela ne désactive pas le locking de l’écran.

 SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_DISPLAY_REQUIRED | EXECUTION_STATE.ES_SYSTEM_REQUIRED); 

Ce n’est pas utile sur XP.

En fait, cette fonction n’est pas compatible entre les différentes versions de Windows (bien que cela fonctionne plutôt bien sous Windows Vista ou supérieur) … Sous Windows XP / 2003, cette fonction doit être appelée avec ES_USER_PRESENT | ES_CONTINUOUS (les deux doivent être appelés) … Ceci réinitialisera périodiquement les timers système et d’affichage … Dans les autres versions de Windows, il est recommandé d’utiliser ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED | ES_CONTINUOUS | ES_AWAYMODE_REQUIRED …

essayez de faire de votre formulaire la valeur la plus vraie, cela fonctionne pour moi, l’écran de veille n’est jamais arrivé même après le temps d’inactivité …