Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2012, 05:38   #1
ProX_Alex
Пользователь
 
Регистрация: 06.04.2012
Сообщений: 29
Вопрос Как предотвратить отключение экрана.

Собственно вопрос в названии темы. Нужно сделать так, как например в проигрывателях когда смотришь фильм, то экран не тухнет. Как это реализовать на c#.

Последний раз редактировалось Аватар; 10.06.2019 в 08:45.
ProX_Alex вне форума Ответить с цитированием
Старый 24.08.2012, 10:51   #2
Grandman
 
Регистрация: 20.08.2012
Сообщений: 7
По умолчанию Класс для работы с ScreenSaver. На основе Win api.

Попробуй поработать с этим классом. Возможно это именно то что тебе нужно.

Код:
public static class ScreenSaver
	{
		// Signatures for unmanaged calls
		[DllImport( "user32.dll", CharSet = CharSet.Auto )]
		private static extern bool SystemParametersInfo( int uAction, int uParam, ref int lpvParam, int flags );

		[DllImport( "user32.dll", CharSet = CharSet.Auto )]
		private static extern bool SystemParametersInfo( int uAction, int uParam, ref bool lpvParam, int flags );

		[DllImport( "user32.dll", CharSet = CharSet.Auto )]
		private static extern int PostMessage( IntPtr hWnd, int wMsg, int wParam, int lParam );

		[DllImport( "user32.dll", CharSet = CharSet.Auto )]
		private static extern IntPtr OpenDesktop( string hDesktop, int Flags, bool Inherit, uint DesiredAccess );

		[DllImport( "user32.dll", CharSet = CharSet.Auto )]
		private static extern bool CloseDesktop( IntPtr hDesktop );

		[DllImport( "user32.dll", CharSet = CharSet.Auto )]
		private static extern bool EnumDesktopWindows( IntPtr hDesktop, EnumDesktopWindowsProc callback, IntPtr lParam );

		[DllImport( "user32.dll", CharSet = CharSet.Auto )]
		private static extern bool IsWindowVisible( IntPtr hWnd );

		[DllImport( "user32.dll", CharSet = CharSet.Auto )]
		public static extern IntPtr GetForegroundWindow( );

		// Callbacks
		private delegate bool EnumDesktopWindowsProc( IntPtr hDesktop, IntPtr lParam );

		// Constants
		private const int SPI_GETSCREENSAVERACTIVE = 16;
		private const int SPI_SETSCREENSAVERACTIVE = 17;
		private const int SPI_GETSCREENSAVERTIMEOUT = 14;
		private const int SPI_SETSCREENSAVERTIMEOUT = 15;
		private const int SPI_GETSCREENSAVERRUNNING = 114;
		private const int SPIF_SENDWININICHANGE = 2;

		private const uint DESKTOP_WRITEOBJECTS = 0x0080;
		private const uint DESKTOP_READOBJECTS = 0x0001;
		private const int WM_CLOSE = 16;


		// Returns TRUE if the screen saver is active (enabled, but not necessarily running).
		public static bool GetScreenSaverActive( )
		{
			bool isActive = false;

			SystemParametersInfo( SPI_GETSCREENSAVERACTIVE, 0, ref isActive, 0 );
			return isActive;
		}

		// Pass in TRUE(1) to activate or FALSE(0) to deactivate the screen saver.
		public static void SetScreenSaverActive( int Active )
		{
			int nullVar = 0;

			SystemParametersInfo( SPI_SETSCREENSAVERACTIVE, Active, ref nullVar, SPIF_SENDWININICHANGE );
		}

		// Returns the screen saver timeout setting, in seconds
		public static Int32 GetScreenSaverTimeout( )
		{
			Int32 value = 0;

			SystemParametersInfo( SPI_GETSCREENSAVERTIMEOUT, 0, ref value, 0 );
			return value;
		}

		// Pass in the number of seconds to set the screen saver timeout value.
		public static void SetScreenSaverTimeout( Int32 Value )
		{
			int nullVar = 0;

			SystemParametersInfo( SPI_SETSCREENSAVERTIMEOUT, Value, ref nullVar, SPIF_SENDWININICHANGE );
		}

		// Returns TRUE if the screen saver is actually running
		public static bool GetScreenSaverRunning( )
		{
			bool isRunning = false;

			SystemParametersInfo( SPI_GETSCREENSAVERRUNNING, 0, ref isRunning, 0 );
			return isRunning;
		}

		// From Microsoft's Knowledge Base article #140723: http://support.microsoft.com/kb/140723
		// "How to force a screen saver to close once started in Windows NT, Windows 2000, and Windows Server 2003"

		public static void KillScreenSaver( )
		{
			IntPtr hDesktop = OpenDesktop( "Screen-saver", 0, false, DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS );
			if( hDesktop != IntPtr.Zero )
			{
				EnumDesktopWindows( hDesktop, new EnumDesktopWindowsProc( KillScreenSaverFunc ), IntPtr.Zero );
				CloseDesktop( hDesktop );
			}
			else
			{
				PostMessage( GetForegroundWindow( ), WM_CLOSE, 0, 0 );
			}
		}

		private static bool KillScreenSaverFunc( IntPtr hWnd, IntPtr lParam )
		{
			if( IsWindowVisible( hWnd ) )
				PostMessage( hWnd, WM_CLOSE, 0, 0 );
			return true;
		}
	}
Grandman вне форума Ответить с цитированием
Старый 24.08.2012, 17:15   #3
ProX_Alex
Пользователь
 
Регистрация: 06.04.2012
Сообщений: 29
Вопрос

Цитата:
Сообщение от Grandman Посмотреть сообщение
Попробуй поработать с этим классом. Возможно это именно то что тебе нужно.
Спасибо.
Это чуть чуть не то, тут описана работа с скрин сэйвером. А меня интересует именно отключение дисплея(Наверное чуть чуть не точно выразился в теме, извиняюсь) для сохранения энергии (по умолчанию в виндах стоит время на 30 мин.) Многие люди, например я, в ноутбуках эту опцию используют для сохранения батареи, и выставляю таймер на 1 минуту. Т.е. если не дёргать мышь, и не тыкать клаву в течении минуты, дисплей полностью отключается. Так вот, когда слушаешь музыку или смотришь фильм(windows media playerom и др.) Отключение не происходит, винда понимает что комп не простаивает, а просто люди смотрят фильм. Вот это мне надо, чтобы винда не вырубала моник.
ProX_Alex вне форума Ответить с цитированием
Старый 09.06.2019, 16:57   #4
Haberman
Форумчанин
 
Регистрация: 01.05.2018
Сообщений: 104
По умолчанию

На всем форуме нет человека который знает как это сделать??
Haberman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отключение предупреждения crazyman_77 Microsoft Office Excel 5 23.01.2011 00:54
WPF пропуск кадров. Есть ли способ предотвратить? Casper-SC Общие вопросы .NET 0 09.06.2010 20:16
[Delphi] Как предотвратить столкновение обьектов Kolhan Помощь студентам 2 03.05.2009 14:17
Отключение клавиатуры Lonix Общие вопросы Delphi 4 04.09.2007 17:48