Standby und Screensaver unterdrücken

    • C#
    • .NET (FX) 4.0

    Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

      Standby und Screensaver unterdrücken

      Moin Leute,
      in einem älteren Quelltext fand ich eine Passage, wo während einer Messwertaufnahme der Bildschirmschoner nicht zuschlagen sollte.
      Da dieses Problem für den einen oder anderen von Euch interessant sein könnte, möchte ich hier die unter Win7 und Win10 getestete Lösung vorstellen.
      Zunächst: Der Bildschirmschoner muss aktiviert sein. Ist er nicht aktiv, passiert nichts.
      Die statische Klasse der API-Deklarationen:
      API

      C#-Quellcode

      1. static class WinApi
      2. {
      3. [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
      4. public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE flags);
      5. [Flags]
      6. public enum EXECUTION_STATE : uint
      7. {
      8. ES_AWAYMODE_REQUIRED = 0x00000040,
      9. ES_CONTINUOUS = 0x80000000,
      10. ES_DISPLAY_REQUIRED = 0x00000002,
      11. ES_SYSTEM_REQUIRED = 0x00000001
      12. }
      13. }
      Die Aufrufe sind dann ganz easy:
      GUI

      C#-Quellcode

      1. // Screensaver verhindern
      2. WinApi.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_SYSTEM_REQUIRED | EXECUTION_STATE.ES_DISPLAY_REQUIRED);

      C#-Quellcode

      1. // Screensaver erlauben
      2. WinApi.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS);

      Die Funktion WinApi.SetThreadExecutionState() gibt den aktuellen Zustand zurück, so kann man sich überzeugen, dass die Einstellung angekommen ist.
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!
      Falls lediglich verhindert werden soll, dass das System in den Ruhezustand geht (egal, ob Standby oder Sleep), also der Screensaver angehen kann, aber der Rechner weiterläuft, kann dies mit dem Enum-Parameter ES_DISPLAY_REQUIRED geschaltet werden.
      Der Bildschirm bleibt an (z.B. beim Ansehen eines Videos):

      C#-Quellcode

      1. // Screensaver verhindern
      2. WinApi.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_SYSTEM_REQUIRED | EXECUTION_STATE.ES_DISPLAY_REQUIRED);

      Der Screensaver kann angehen (z.B. bei einem längeren Download (ist mir bei der Mediathek aufgefallen):

      C#-Quellcode

      1. // Screensaver erlauben, Standby verhindern
      2. WinApi.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_SYSTEM_REQUIRED);

      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()