Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрет скринсейвера, ждущего режима 
V
    Опции темы
Brain89
Дата 30.8.2011, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 18.1.2010

Репутация: 2
Всего: 2



Здравствуйте. Подскажите, как средствами .NET контролировать запуск скринсейвера в ОС Windows, а также не позволять компьютеру уходить в ждущий режим или гибернацию при выполнении программы.

Это сообщение отредактировал(а) Brain89 - 30.8.2011, 10:06
PM   Вверх
jonie
Дата 30.8.2011, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



надо у окошка WndProc перегрузить и в нём 
Код

....
  switch (uMsg)                  
  {
    case WM_SYSCOMMAND:
    {
      switch (wParam)
      {
        case SC_SCREENSAVE:  
          return 0;
        case SC_MONITORPOWER:
          return 0;      
      }
      break;      
    }
....

(на C# сами перепишите)

вот еще народ что пишет:
Цитата

The function is called SetThreadExecutionState (MSDN). It works for me, using the flags ES_SYSTEM_REQUIRED and ES_CONTINUOUS.

http://msdn.microsoft.com/en-us/library/aa373247.aspx

покопайте в общем - потом нам расскажите

UPD: вот еще почитайте http://forum.ixbt.com/topic.cgi?id=26:36022

Это сообщение отредактировал(а) jonie - 30.8.2011, 16:34


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Brain89
Дата 31.8.2011, 11:02 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 18.1.2010

Репутация: 2
Всего: 2



Посмотрел. Вот какие выводы:

1. Для предотвращения перехода в ждущий режим используем функцию SetThreadExecutionState (MSDN):

Код

public enum EXECUTION_STATE: uint
{
    ES_AWAYMODE_REQUIRED = 0x00000040,
    ES_CONTINUOUS = 0x80000000,
    ES_DISPLAY_REQUIRED = 0x00000002,
    ES_SYSTEM_REQUIRED = 0x00000001,
    ES_USER_PRESENT = 0x00000004
}
***
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]        
static extern uint SetThreadExecutionState(EXECUTION_STATE esFlags);
***
// Функция запрещает переход в режим энергосбережения
private void NoSleep()
{
    SetThreadExecutionState(EXECUTION_STATE.ES_DISPLAY_REQUIRED | EXECUTION_STATE.ES_SYSTEM_REQUIRED | EXECUTION_STATE.ES_CONTINUOUS);
}


Функцию NoSleep необходимо запускать периодически, не реже, чем значение  ES_CONTINUOUS. Подробнее: в MSDN или тут

2. Для предотвращения запуска скринсейвера можно использовать два пути:
Первый: отслеживать оконное событие (так, как это указано у jonie). Подробнее про обработку оконных событий под .NET смотреть здесь. 
Второй: устанавливать значение запуска скринсейвера, используя user32.dll. Код можно посмотреть здесь.


Спасибо jonie за указанное направление поиска.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0447 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.