1 (изменено: mih, 2011-10-21 05:51:49)

Тема: AHK: Можно ли надёжно отключить монитор?

Есть способ отключения монитора, описанный в Справке, и в "Коллекции". Причём в "Коллекции" дан вариант скрипта, по которому якобы "монитор включается только клавишей ESC, и не включается ни от шевеления мышью, ни от нажатия других клавиш". (Непонятно, что по задумке должно заставлять систему так себя вести — цикл с паузой 400 ms?)

Проблема в том, что у меня монитор всегда включается от любого шевеления и нажатия любой клавиши клавиатуры, и никак эту ситуацию не могу изменить. Команду посылаю и одиночную, и в цикле. Получается так, что приведённая в примерах команда  включения монитора в моём случае — вообще никогда не потребуется. Если во варианте с циклом я вообще убираю sleep, — это только грузит процессор, но одно из десяти нажатий (условно) — всё равно включает монитор.

М. б., есть настройка в системе, о которой я не знаю?  Есть такое: "разрешить клавиатуре выход из ждущего реж.", но здесь это никакого влияния не имеет. В настройках видеокарты ничего не нашёл. BlockInput — не помогает. Как бы это победить и заставить монитор включаться только от предназначенной для этого команды?

2

Re: AHK: Можно ли надёжно отключить монитор?

Я эту проблему почти решил. См. мою тему про перехват мыши.

3 (изменено: mih, 2011-10-21 05:43:17)

Re: AHK: Можно ли надёжно отключить монитор?

А я свой вопрос и написал по ассоциации с той темой. Но там то — нажатия и движения всё равно поступают в систему; эти хуки разве блокируют их?

4 (изменено: D_Pavel, 2011-10-21 08:02:13)

Re: AHK: Можно ли надёжно отключить монитор?

не блокируют, но при любом движении мыши я сделал посылку команды на гашение монитора, и он не успевает загореться. Проверял на офисном компе, работает. Но на компе в машине почему-то иногда не срабатывает, монитор загорается иногда на кочках, и при движении мышью снова гаснет. Возможно загорается не от мыши, а от другого устройства, на которое я не ставил хук.

Еще есть идея перехватывать сообщение которое система посылает окнам при пробуждении монитора, и в этот момент гасить монитор. Только я пока не знаю что это за сообщение и как его перехватить.

5 (изменено: mih, 2011-10-21 10:13:58)

Re: AHK: Можно ли надёжно отключить монитор?

D_Pavel пишет:

...не от мыши, а от другого устройства, на которое я не ставил хук.

"Программисты тоже шутят"?
Нет — это именно она — мышь; я писал выше, что пускал скрипт из Коллекции без задержки — просто циклилась команда гашения — и монитор включался; не сразу, — надо мышью повозить или на клавиши понажимать. Этот вариант ненадёжен.

6

Re: AHK: Можно ли надёжно отключить монитор?

mix пишет:

эти хуки разве блокируют их?

Естественно, можно и заблокировать, если функция-обработчик вернёт 1:

   OnExit, Exit
   hHookMouse := DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
      , Int, WH_MOUSE_LL := 14
      , Int, RegisterCallback("LowLevelMouseProc", "Fast")
      , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
      , UInt, 0, Ptr)
   Return

Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookMouse)
   ExitApp

LowLevelMouseProc(nCode, wParam, lParam)
{
   Return nCode < 0 ? DllCall("CallNextHookEx", Ptr, 0, Int, nCode, UInt, wParam, UInt, lParam) : 1
}

Esc::ExitApp
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Можно ли надёжно отключить монитор?

Не совсем блокирует, монитор все равно просыпается.

8 (изменено: mih, 2011-10-21 18:56:04)

Re: AHK: Можно ли надёжно отключить монитор?

Да, так блокируется и клавиатура, и мышь; но, похоже, требуется блокировка на более низком уровне — монитор продолжает включаться от любого нажатия-движения.

-------
И, кроме этого, остаётся всё-же вопрос — отчего у некоторых такой проблемы нет, и монитор включается только по команде? Настройки системы, версия системы, или что-то ещё?

9

Re: AHK: Можно ли надёжно отключить монитор?

У кого например такой проблемы нет? Я не встречал.

10 (изменено: mih, 2011-10-23 02:49:31)

Re: AHK: Можно ли надёжно отключить монитор?

Да, насчёт этого — я, скорее всего, ошибся (раньше что-то читал и сложилось такое представление).
Но всё-же:

А вот ... вариант, в котором после выключения, монитор включается только клавишей ESC, и не включается ни от шевеления мышью, ни от нажатия других клавиш.

Якобы цикл, да ещё со sleep 400 обеспечивает это. Это либо ошибка в Коллекции (что явная ересь, и мысль эту отбрасываем), либо у человека другие система-настройка системы.

11

Re: AHK: Можно ли надёжно отключить монитор?

Этот скрипт из коллекции даже если и был бы действенный, я бы его не советовал использовать. Очень не оптимальный. Надо искать более красивое решение, без циклов.

12 (изменено: mih, 2011-10-23 02:52:25)

Re: AHK: Можно ли надёжно отключить монитор?

Выяснил, что если приоритет скрипта с циклом повысить до Realtime (Process, Priority ,,R) и использовать "sleep 1", то монитор от случайных нажатий-движений не включается.

13

Re: AHK: Можно ли надёжно отключить монитор?

Зато процессор пашет впустую

14 (изменено: mih, 2011-10-23 18:18:59)

Re: AHK: Можно ли надёжно отключить монитор?

— Диалектика-с.
Странно, конечно, ему говорят: Sleep, Sleep, Sleep ... — а он пашет и пашет.