Пользователь
Регистрация: 25.04.2011
Возраст: 47
Регион: 31
Сообщений: 36
|
AHK скрипт: Переход ноутбука в режим сна и через ххх время гибернация, нужна помощь.
Долго искал и не нашел. Задача у меня такая. Нужно чтобы ноутбук засыпал при переключении на питание от батареи через 60 секунд и перед сном нажимал стоп, Send, {Media_Stop}. Потом через 5 минут просыпался и уходил в гибернацию. В самой винде7 есть такая возможность, но если запущена навигация или какая еще программа, которую виндовс7 расценивает как мультимедийную, то у ноутбука бессонница. Есть куски скриптов которые следят за состоянием питания, отправляют в сон и гибернацию, но нехватает куска который бы пробудил компьютер из режима сна через заданное время. Пробовал усыплять ноут первыми двумя кусками, но в гибернацию он сам не уходит. Помогите собрать скрипт из этих кусков и дописать недостающий. Ещё как вариант можно программно создавать задачу в планировщике, но как это сделать не нашел.
Код:
кусок слежения за состоянием питания ноута
#SingleInstance force ; перезагрузить скрипт, если он уже запущен
#NoEnv ; запрещаем имена переменных как у переменных окружения
SendMode Input ; ускорренный ввод
#Persistent ; держать скрипт запущенным
SetTitleMatchMode 2 ; 2 - заголовок окна должен содержать значение, заданное в WinTitle
DetectHiddenWindows, On
SetTimer, GetPowerSource, 5000
return ; End of main program
GetPowerSource:
VarSetCapacity(powerStatus, 1+1+1+1+4+4)
success := DllCall("GetSystemPowerStatus", "UInt", &powerStatus)
acLineStatus:=ReadInteger(&powerstatus,0,1,false)
batteryFlag:=ReadInteger(&powerstatus,1,1,false)
batteryLifeTime:=ReadInteger(&powerstatus,4,4,fals e)
batteryFullLifeTime:=ReadInteger(&powerstatus,8,4, false)
output=AC Status: %acLineStatus%`nBattery Flag: %batteryFlag%`nBattery Life (percent): %batteryLifePercent%`nBattery Life (time): %batteryLifeTime%`nBattery Life (full time): %batteryFullLifeTime%
If %acLineStatus% = 0
{
sleep 10000
VarSetCapacity(powerStatus, 1+1+1+1+4+4)
success := DllCall("GetSystemPowerStatus", "UInt", &powerStatus)
acLineStatus:=ReadInteger(&powerstatus,0,1,false)
If %acLineStatus% = 0
{
Send, {Media_Stop}
ExitApp
}
else
Return
}
else
Return
ReadInteger( p_address, p_offset, p_size, p_hex=true )
{
value = 0
old_FormatInteger := a_FormatInteger
if ( p_hex )
SetFormat, integer, hex
else
SetFormat, integer, dec
loop, %p_size%
value := value+( *( ( p_address+p_offset )+( a_Index-1 ) ) << ( 8* ( a_Index-1 ) ) )
SetFormat, integer, %old_FormatInteger%
return, value
}
кусок отправки в режим сна
Suspend:
Gui, Submit, NoHide
if force
DllCall("PowrProf\SetSuspendState", "int", 0, "int", 1, "int", 0)
else
DllCall("PowrProf\SetSuspendState", "int", 0, "int", 0, "int", 0)
Return
кусок отправки в режим гибернации
Hibernate:
Gui, Submit, NoHide
if force
DllCall("PowrProf\SetSuspendState", "int", 1, "int", 1, "int", 0)
else
DllCall("PowrProf\SetSuspendState", "int", 1, "int", 0, "int", 0)
Return
|