Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.04.2017, 14:47
pirsddd pirsddd вне форума
Прохожий
 
Регистрация: 01.04.2011
Сообщения: 31
Версия Delphi: 7 mini
Репутация: 10
По умолчанию Как запретить автоматическое отключение дисплея?

Здравствуйте.
Как запретить автоматическое отключение дисплея? Т. е. пока программа работает, дисплей должен не отключатся. Программу закрыли - дисплей может отключатся. Или как запретить автоматический переход в режим сна "Connected Standby"?
СПАСИБО.
Ответить с цитированием
  #2  
Старый 14.04.2017, 00:05
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Собсно физическое отключение - никак, забыли в виндовс драйвер блокировки кнопки "пауэр" для гляделки приложить Видимо речь здесь об отключении хранителя экрана идёт, вот пример из DRKB как его блокировать на время исполнения программы
Код:
...
private
  procedure AppMessage(var Msg: TMsg; var handled: Boolean);
end;
...
implementation
...
procedure TForm1.AppMessage(var Msg: TMsg; var handled: Boolean);
begin
  if (Msg.Message = WM_SYSCOMMAND) and (Msg.wParam = SC_SCREENSAVE) then
    Handled := True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := AppMessage;
end;

{ Note: The Screensaver is only disabled during the lifespan of 
your application.}
Ответить с цитированием
  #3  
Старый 14.04.2017, 16:14
pirsddd pirsddd вне форума
Прохожий
 
Регистрация: 01.04.2011
Сообщения: 31
Версия Delphi: 7 mini
Репутация: 10
По умолчанию

Нужно не для стационарного компа, а для планшета. На нем автоматическое отключение дисплея и автоматический переход в режим сна "Connected Standby" одно и тоже. Автоматическое значит не кнопкой повер, а по истечении времени устанавливаемого в настройках винды.
Ответить с цитированием
  #4  
Старый 14.04.2017, 16:57
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Понятно, пестни значит умолкают при заморозке для этого и нужно глушить скринсейвер, но можно и радикально-не программно отключить режим Connected Standby: регэдитом из-под админа на ветке HKLM -> SYSTEM -> CurrentControlSet -> Control -> Power - параметр CsEnabled сменить с 1 на 0
Ответить с цитированием
  #5  
Старый 16.04.2017, 14:37
pirsddd pirsddd вне форума
Прохожий
 
Регистрация: 01.04.2011
Сообщения: 31
Версия Delphi: 7 mini
Репутация: 10
По умолчанию

Если отключить CsEnabled в реестре, то спящего режима нет вообще, дисплей автоматически отключается, но может случайно включится, т.к. тачскрин продолжает работать.
Такой метод не подходит, потому что надо перезагружаться при изменении CsEnabled. А постоянно отключенный CS с какими-то недостатками.
Ответить с цитированием
  #6  
Старый 17.04.2017, 10:20
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от pirsddd
...дисплей автоматически отключается, но может случайно включится, т.к. тачскрин продолжает работать...
Да у вас в настройках проблема, тач не должен работать во сне, лишь с кнопки оживает машинке, или настройте или сбросьте до фабрички, напр. у сурфейс про 5 для этого нужно зажать пауэр до включения, а затем громкость(минус) до логотипа, ну и выбрать Troubleshoot, а дальше Reset your PC, данные слетят, но система восстановится
Ответить с цитированием
  #7  
Старый 18.04.2017, 13:26
pirsddd pirsddd вне форума
Прохожий
 
Регистрация: 01.04.2011
Сообщения: 31
Версия Delphi: 7 mini
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
тач не должен работать во сне
Спящего режима нет вообще, ни кнопки ни настроек в винде, только дисплей отключается.
Надо что-то типа такого, только для блокировки режима сна CS, а не S1, S2, S3, S4:
Код:
type
TForm1 = class(TForm)
private
procedure WMPowerBroadcast(var Message: TMessage); message WM_POWERBROADCAST;
...
end;

...

const
PBT_APMQUERYSUSPEND = 0;

procedure TForm1.WMPowerBroadcast(var Message: TMessage);
begin
if Message.Wparam = PBT_APMQUERYSUSPEND then
Message.Result := BROADCAST_QUERY_DENY;
end;
Ответить с цитированием
  #8  
Старый 19.04.2017, 16:17
pirsddd pirsddd вне форума
Прохожий
 
Регистрация: 01.04.2011
Сообщения: 31
Версия Delphi: 7 mini
Репутация: 10
По умолчанию

Получилось.
Код:
const
  POWER_REQUEST_CONTEXT_VERSION = 0;
  POWER_REQUEST_CONTEXT_SIMPLE_STRING = 1;
  POWER_REQUEST_CONTEXT_DETAILED_STRING = 2;

type
  PREASON_CONTEXT = record
    Version: ULONG;
    Flags: DWORD;
    SimpleReasonString: PWChar;
  end;

  POWER_REQUEST_TYPE = (PowerRequestDisplayRequired,
                        PowerRequestSystemRequired,
                        PowerRequestAwayModeRequired,
                        PowerRequestExecutionRequired);

function PowerCreateRequest(const Context: PREASON_CONTEXT): THandle; stdcall; external kernel32 name 'PowerCreateRequest';
function PowerSetRequest(PowerRequest: THandle; RequestType: POWER_REQUEST_TYPE): BOOL; stdcall; external kernel32 name 'PowerSetRequest';
function PowerClearRequest(PowerRequest: THandle; RequestType: POWER_REQUEST_TYPE): BOOL; stdcall; external kernel32 name 'PowerClearRequest';

var
  PowerRequest: THandle;

procedure TForm1.FormCreate(Sender: TObject);
var
  PowerRequestContext: PREASON_CONTEXT;
begin
  PowerRequestContext.Version := POWER_REQUEST_CONTEXT_VERSION;
  PowerRequestContext.Flags := POWER_REQUEST_CONTEXT_SIMPLE_STRING;
  PowerRequestContext.SimpleReasonString := 'Continuous measurement';
  PowerRequest := PowerCreateRequest(PowerRequestContext);
  PowerSetRequest(PowerRequest, PowerRequestDisplayRequired);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  PowerClearRequest(PowerRequest, PowerRequestDisplayRequired);
  CloseHandle(PowerRequest);
end;
Ответить с цитированием
  #9  
Старый 19.04.2017, 17:02
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от pirsddd
Получилось.
Даже интересно стало, а какой у вас всёж виндовс-планшет-то, часом не Dell? На мелкомяконьком сурфейсе про вариант с экранной заставкой работает: пока выполняется код, скрин не тухнет, а вот ваш кусок на нём не срабатывает, всёравно засыпает, правда без ошибок, молча
Ответить с цитированием
  #10  
Старый 21.04.2017, 11:17
pirsddd pirsddd вне форума
Прохожий
 
Регистрация: 01.04.2011
Сообщения: 31
Версия Delphi: 7 mini
Репутация: 10
По умолчанию

У меня Onda v820w ch Windows 10, по умолчанию включен CS. Возможно у вас он выключен или есть в настройках сна различия на Win 8 и 10, также биос должен его поддерживать.
Пробовал кроме PowerRequestDisplayRequired другие System, AwayMode и Execution, экран тухнет и в сон вроде не уходит. Конечно лучше чтоб экран тух, но при этом и звук исчезает в MPC-HC.
Много раз было, что ставлю на закачку торрент или файл в браузере, или видео конвертироваться, прихожу, задача не выполнена, спит. Надоело в параметрах питания время ухода в сон подкручивать. Написал программку продления бодрствования в один клик NoSleep.rar.

Последний раз редактировалось pirsddd, 21.04.2017 в 17:29.
Ответить с цитированием
Этот пользователь сказал Спасибо pirsddd за это полезное сообщение:
gumel (24.04.2020)
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:59.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter