Stand-by-modus aussetzen

Wie vielleicht jeder schon einmal erlebt hat sorgen Windows Media Player und Co. dafür dass Computer nicht in den Ruhezustand wechseln. Ein C# Programm sorgt für sich genommen nicht dafür das dass Betriebssystem aktiv bleibt.
Hier präsentiere ich eine Möglichkeit den Stand-by-Modus auszusetzen. Dafür muss durch P/Invoke die Funktion SetThreadExecutionState() eingebunden werden.
Dafür ist folgende Einstellung interessant:

ES_SYSTEM_REQUIRED : Bedeutet, das System darf nicht abgeschaltet werden.

Eine Funktion mit diesem Status aufzurufen sorgt nur dafür das etwaige Timer zurückgesetzt werden, eine Dauerlösung ist das nicht.

Um jetzt eine permanentere Lösung zu generieren ist es nötig die Funktion entweder periodisch aufzurufen oder den Status per Oder mit ES_CONTINOUS zu verknüpfen.

Diese kleine Snippet zeigt wie man den Stand-by-Modus dauerhaft aussetzt:


namespace MyWindowsFormsApplication
{
public partial class MyForm : Form
    {
public enum EXECUTION_STATE : uint
        {
            ES_CONTINUOUS = 0x80000000,
            ES_DISPLAY_REQUIRED = 0x00000002,
            ES_SYSTEM_REQUIRED = 0x00000001
        }
        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
.
.
.

private void Form1_Load(object sender, EventArgs e)
        {
            SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_SYSTEM_REQUIRED);
        }
    }
}


Vergleich siehe MSDN

Wie immer viel Spaß beim tüfteln, und wer mehr Wissen will wendet sich an die ppedv.

Kommentare sind geschlossen