Nie wiem, czy istnieje lepsze rozwiązanie .NET, ale tutaj jest to, jak można używać tego API:
Wymagane usings:
using System.Runtime.InteropServices;
P/Invoke:
public const uint ES_CONTINUOUS = 0x80000000;
public const uint ES_SYSTEM_REQUIRED = 0x00000001;
public const uint ES_DISPLAY_REQUIRED = 0x00000002;
[DllImport("kernel32.dll", SetLastError = true)]
public static extern uint SetThreadExecutionState([In] uint esFlags);
A następnie wyłącz wygaszacz ekranu przez:
SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED);
Finnaly włączyć wygaszacz ekranu przez resetowanie stanu wykonania z powrotem do pierwotnej wartości:
SetThreadExecutionState(ES_CONTINUOUS);
Zauważ, że ja po prostu wybrał jedną z flag na chybił trafił w moim przykładzie. Musisz połączyć poprawne flagi, aby uzyskać konkretne pożądane zachowanie. Znajdziesz description of flags on MSDN.
Co, jeśli po prostu uniemożliwiono aktywację opcji wygaszacza ekranu/opcji zasilania (np. Wysłanie naciśnięcia klawisza do systemu operacyjnego co N sekund)? – fre0n
@icemanind: Zrozumiałeś to? –
Tak. Znalazłem całkiem niezłą klasę w C# tutaj: http://www.codeproject.com/KB/cs/ScreenSaverControl.aspx – Icemanind