1 (изменено: seriousstas, 2015-11-21 01:09:38)

Тема: AHK: задержка "ухода в СОН"

Есть ли способ , используя этот
http://forum.script-coding.com/viewtopic.php?id=2655
принцип - задержать уход системы win8.1 и win10 в СОН (гибернацию) ,
а перед этим закрыть нужные программы ?

2 (изменено: OmTatSat, 2015-11-23 12:52:38)

Re: AHK: задержка "ухода в СОН"

Там написано, при выходе...
Я бы смотрел в сторону таймера. Например в "Электропитание" выставлено уходить в сон через 15 минут, в скрипте указал бы через 14 минут начать закрытие нужных программ, чтобы к 15ой минуте они уже были закрыты. Правда не уверен, что комп пропустит всплеск закрытий прог как бездействие пользователя, чтобы уйти в сон через оставшуюся 1 минуту от 15, заместо заходить на новый 15 минутный круг подсчёта бездействия.
В принципе наверное можно использовать планировщик windows как таймер, который будет запускать только скрипт закрытия, без таймера.

3 (изменено: seriousstas, 2015-11-23 02:01:59)

Re: AHK: задержка "ухода в СОН"

OmTatSat
У меня немного другая задача .
Есть CarPC . Необходимо закрывать некоторые "тяжелые" программы при ВХОДЕ (при нажатии на физическую кнопку) ,
и запускать снова при выходе . Пробовал Autoit - овский скрипт , всё работает, но иногда программы не успевают
выгрузится , что приводит к глюкам . Нужна банальная задержка на 3-5 сек после подачи команды на сон.

4 (изменено: OmTatSat, 2015-11-23 19:14:41)

Re: AHK: задержка "ухода в СОН"

Попробуйте поправить этот код под свои нужды

;#NoTrayIcon
#Persistent
SetTimer, RunBeforeShutdown, Off
Gui,+LastFound
hwnd:=WinExist()
DllCall("ShutdownBlockReasonCreate","Uint",hwnd,"Str",A_ScriptFullPath " is still running")
OnMessage(0x11, "WM_QUERYENDSESSION")
Return

WM_QUERYENDSESSION(wParam, lParam)
  {
    static sdtry = 0
    ENDSESSION_Logoff = 0x80000000
    If (lParam & ENDSESSION_Logoff) ; User is logging off.
      EventType = Logoff
    Else     ; System is either shutting down or restarting. and
      EventType = Shutdown
    If (EventType = "Shutdown" and sdtry = 0)
     {
       sdtry = 1
       SetTimer, RunBeforeShutdown, On
       Return false ; Tell the OS to Abort the Shutdown/Logoff.
     }
    Else If (EventType = "Shutdown" and sdtry = 1)
      Return true
  }


runBeforeShutdown:
  SetTimer, RunBeforeShutdown, Off
  ;-------your code below
MsgBox, 262148, System Hibernation in 20 seconds, Your HTPC is about to be Hibernated.`nAllow it?, %Secs%
IfMsgBox, Yes
{
   ;hibernate = 1
   DllCall("PowrProf\SetSuspendState", "int", 1, "int", 0, "int", 0)
   ;hibernate = 0 
   Return
}
IfMsgBox, Timeout
{
   ;hibernate = 1
   DllCall("PowrProf\SetSuspendState", "int", 1, "int", 0, "int", 0)
   ;hibernate = 0
   Return
}
IfMsgBox No
;{
   ;hibernate = 0
   return
;}
  ;-------
  ;Shutdown, 1 ; your choice what to do
  DllCall("ShutdownBlockReasonDestroy","Uint",hwnd)
Return

5

Re: AHK: задержка "ухода в СОН"

В момент выключения появляется MsgBox, и останавливает уход в сон?

#Persistent
DllCall("kernel32.dll\SetProcessShutdownParameters", "UInt", 0x4FF, "UInt", 0)
OnMessage(0x11, "WM_QUERYENDSESSION")
return

WM_QUERYENDSESSION(wParam, lParam)
{ 
	ENDSESSION_LOGOFF = 0x80000000
	MsgBox %  lParam "`n" wParam "`nENDSESSION_LOGOFF: " (lParam & ENDSESSION_LOGOFF)  
	return false  ; Tell the OS to abort the shutdown/logoff.
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: задержка "ухода в СОН"

Источник https://autohotkey.com/board/topic/56513-win7-adaptation-of-intercept-hibernation-script/page-3

7

Re: AHK: задержка "ухода в СОН"

serzh82saratov да

8

Re: AHK: задержка "ухода в СОН"

Думаю можно убрать msgbox вставить свой код, sleep, потом в режим сна отправить.

9

Re: AHK: задержка "ухода в СОН"

вставить свой код, sleep

Ну тогда уже не sleep, а код для закрытия и ожидания завершения процессов.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10

Re: AHK: задержка "ухода в СОН"

Под своим кодом подразумевал код закрытия, на счёт ожидания, естественно как вы посоветовали лучше и правильно.

11

Re: AHK: задержка "ухода в СОН"

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

12

Re: AHK: задержка "ухода в СОН"

Можно ли поймать момент ухода в настоящий сон, который не гибернация?
Т.е. записать момент ухода в сон и момент возвращения из сна?

13 (изменено: Malcev, 2016-09-08 21:17:34)

Re: AHK: задержка "ухода в СОН"

Можно читать события из windows system logs.

14 (изменено: stealzy, 2016-09-12 13:19:39)

Re: AHK: задержка "ухода в СОН"

Приходила такая мысль, но как-то нет очевидного пути для чтения. Думал, может система рассылает какое-нибудь шировещательное сообщение при уходе в сон и можно задействовать OnMessage().

Что удалось выяснить про журнал:
при уходе в сон, в журнале "Система" появляется запись Kernel-Power с кодом 42;
при выходе - Power-Troubleshooter с кодом 1.
Файл журнала не текстовый, поэтому просто прочитать его не выйдет.

* Встроенная утилита wevtutil, с помощью которой можно прочитать последние N событий в конкретном журнале, или экспортировать журнал в текстовый или xml формат. К сожалению функционал какой-либо фильтрации отсутствует.
Команда ниже покажет записи журнала Система в текстовом формате, начиная с последних, в кол-ве 5 штук.

wevtutil qe system /f:text /rd:true /c:5

* Консольная Dumpel.exe от MS для чтения журнала. ссылка для скачивания.

"C:\Program Files (x86)\Resource Kit\dumpel.exe" -f dumpel.txt -l system -d 1 -m "Microsoft-Windows-Power-Troubleshooter" -e 1

* Можно использовать PowerShell, но он потребует махинаций от пользователя для разрешения на запуск скриптов ps,

Get-WinEvent -Path C:\Windows\System32\winevt\Logs\System.evtx
Get-WinEvent -FilterHashtable @{Path="C:\Windows\System32\winevt\Logs\System.evtx";ProviderName="Microsoft-Windows-Power-Troubleshooter";ID=1}

* Можно зарегистрировать триггер на событие журнала, вызывающий скрипт.

15

Re: AHK: задержка "ухода в СОН"

Конечно, не хочется включать exe файл в скрипт для распространения.

Можно читать с помощью wevtutil:
https://technet.microsoft.com/ru-ru/lib … s.10).aspx

16

Re: AHK: задержка "ухода в СОН"

Спасибо, нашел сейчас https://autohotkey.com/boards/viewtopic.php?t=9658, кажется оно.

17

Re: AHK: задержка "ухода в СОН"

Спасибо , буду пробовать ! Но есть одно "НО"
вопрос в шапке относится к win8.1 и win10 .
На 7-ке уход в сон можно задержать , в последних осях это 2 сек ..

18 (изменено: Malcev, 2016-09-16 15:00:21)

Re: AHK: задержка "ухода в СОН"

seriousstas, а разве в 5 посте не решается ваша проблема?
stealzy

* Встроенная утилита wevtutil, с помощью которой можно прочитать последние N событий в конкретном журнале, или экспортировать журнал в текстовый или xml формат. К сожалению функционал какой-либо фильтрации отсутствует.

Почему отсутствует?

wevtutil qe System /q:*[System[(EventID=42)]]

19

Re: AHK: задержка "ухода в СОН"

Malcev, здорово, где вы нашли описание команды?
По вашей ссылке выдает [/q:<Query>], а сама структура <Query> не описывается.

20

Re: AHK: задержка "ухода в СОН"

Я не помню уже. Давно было. Наверное гуглил.

21 (изменено: stealzy, 2016-09-18 23:53:32)

Re: AHK: задержка "ухода в СОН"

Есть интересная WinAPI функция NotifyChangeEventLog, которая позволяет программе получать уведомление о записи в определенный журнал.
В момент записи события в журнал объект под указателем hEvent устанавлиается в сигнальное состояние.
Там пишут, что надо использовать функцию CreateEvent для создания такого объекта.
Может кто знает, как вызвать функцию Autohotkey при изменении hEvent?

SourceName := "Application"
hEventLog := DllCall("advapi32.dll\OpenEventLog", Str, "", Str, SourceName, Ptr)
hEvent := DllCall( "CreateEvent", UInt,0, Int,true, Int,false, UInt,0 ) ; насчет параметров не уверен
DllCall("advapi32.dll\NotifyChangeEventLog", Ptr, hEventLog, Ptr, hEvent)
; Теперь надо как-то отслеживать hEvent, как я понимаю
; RegisterCallback("MyFuncForEventLogProc", "Fast")
MyFuncForEventLogProc() {
	MsgBox Новая запись в журнал
}

22

Re: AHK: задержка "ухода в СОН"

Если специальные API-функции для отслеживания сигнальных состояний — WaitForSingleObject, WaitForMultipleObjects и т.п.

23

Re: AHK: задержка "ухода в СОН"

Эти функции приостанавливают поток до освобождения объекта, как понимаю.
Нашел обсуждение AHK: асинхронный вызов Wait-функции, буду пробовать.