2010-02-17 12 views
5

Piszę aplikację w języku C#, która odtwarza film. Muszę dowiedzieć się, jak wyłączyć wygaszacz ekranu i opcje zasilania za pomocą C#.Wyłączanie wygaszacza ekranu i opcji zasilania w języku C#

Wiem, że Windows SDK API ma funkcję o nazwie SetThreadExecutionState(), której można użyć do wykonania tej czynności, jednak nie wiem, czy istnieje lepszy sposób na jej wykonanie. Jeśli nie, w jaki sposób włączyć tę funkcję do C#?

+0

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

+0

@icemanind: Zrozumiałeś to? –

+0

Tak. Znalazłem całkiem niezłą klasę w C# tutaj: http://www.codeproject.com/KB/cs/ScreenSaverControl.aspx – Icemanind

Odpowiedz

7

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.

+0

http://stackoverflow.com/questions/241222/need-to-disable-the-screen-saver-screen-locking-in-windows-c-net – user1005462

+2

SetThreadExecutionState (EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_DISPLAY_REQUIRED | EXECUTION_STATE.ES_SYSTEM_ REQUIRED); - działa idealnie na win10 – user1005462

Powiązane problemy