Diese blog post beschreibt, wie verhindert werden kann, dass ein PC unter Verwendung von in den Ruhezustand versetzt wird. Der Code sieht wie folgt aus:
public partial class Window1 : Window
{
private uint m_previousExecutionState;
public Window1()
{
InitializeComponent();
// Set new state to prevent system sleep (note: still allows screen saver)
m_previousExecutionState = NativeMethods.SetThreadExecutionState(
NativeMethods.ES_CONTINUOUS | NativeMethods.ES_SYSTEM_REQUIRED);
if (0 == m_previousExecutionState)
{
MessageBox.Show("Call to SetThreadExecutionState failed unexpectedly.",
Title, MessageBoxButton.OK, MessageBoxImage.Error);
// No way to recover; fail gracefully
Close();
}
}
protected override void OnClosed(System.EventArgs e)
{
base.OnClosed(e);
// Restore previous state
if (0 == NativeMethods.SetThreadExecutionState(m_previousExecutionState))
{
// No way to recover; already exiting
}
}
}
internal static class NativeMethods
{
// Import SetThreadExecutionState Win32 API and necessary flags
[DllImport("kernel32.dll")]
public static extern uint SetThreadExecutionState(uint esFlags);
public const uint ES_CONTINUOUS = 0x80000000;
public const uint ES_SYSTEM_REQUIRED = 0x00000001;
}
Wenn Sie die Anwendung in der Post beschrieben mögen, gibt es eine aktualisierte Version here.
Ich empfehle Ihnen, den Benutzer manuell die Energieeinstellungen zu setzen. Wir hatten Leute, die Daten verloren haben und am nächsten Tag keinen Computer mehr auf dem Sprung hatten, als eine Anwendung plötzlich dachte, ihre Lebensdauer sei so wichtig, dass sie über Nacht die Batterie vollständig entleerte. Wenn es sogar die kleinste Möglichkeit gibt, dass jemand das Schließen der Anwendung vergisst/ignoriert, ist es sehr wichtig, dass Sie den Gefallen nicht zurückgeben, indem Sie den Computer nutzlos machen. –