PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Дополнительный софт (http://pccar.ru/forumdisplay.php?f=30)
-   -   AHK скрипт: Переход ноутбука в режим сна и через ххх время гибернация, нужна помощь. (http://pccar.ru/showthread.php?t=15243)

se13 14.06.2011 15:37

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


se13 05.07.2011 04:06

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

iron_man 08.07.2011 07:28

Цитата:

Сообщение от se13 (Сообщение 188969)
Есть мысль, но пока как сделать не знаю. Нужно программно включать и выключать задачу в планировщике. То есть. Скрипт перед тем как отправит комп спать, включает задачу, в которой прописанно например запустить скрипт который отправит комп в гибернацию, а для этого нужно разбудить комп. Не получается запустить задачу перед сном и соответственно выключить перед гибернацией. Есть какие мысли, или другие варианты?

попробуй эту прогу
http://www.compcar.ru/forum/showthread.php?t=7484
Единственное там осуществяется переход по нажатию кнопки питания (физически, не программно) :) Но в принципе могу изменить событие на смену источника питания :)

se13 08.07.2011 23:57

Цитата:

Сообщение от iron_man (Сообщение 189295)
попробуй эту прогу
http://www.compcar.ru/forum/showthread.php?t=7484
Единственное там осуществяется переход по нажатию кнопки питания (физически, не программно) :) Но в принципе могу изменить событие на смену источника питания :)

Пробовал эту прогу. Настольный работает не стабильно, иногда глючит. Ноут в машине всегда глючит. Методом научного тыка выяснил что это блютуз не успервает подгружаться в момент выхода компа из сна и перехода в гибернейт. Если просто мышкой усыпить комп, потом разбудить, поюдождать 30 секунд (или дождаться когда блютуз посинеет) и также мышкой нажать гибернейт, то всё прекрасно работает. Так вот. В конечном плане мне нужен только таймер пробуждения, всё остальное могу делать скриптом, но если можно подправить эту програмульку под мои нужды, то было бы просто супер. Или может кто подскажит есть ли в реестре винды7 параметр чтоб растянуть время от срабатывания таймера пробуждения, до отправки команды гибернейт. PS. Дрова переставлял не один раз и разных версий, текущие дррова IVT_BlueSoleil_8.0.356.0.

iron_man 10.07.2011 21:04

Цитата:

Сообщение от se13 (Сообщение 189387)
Пробовал эту прогу. Настольный работает не стабильно, иногда глючит. Ноут в машине всегда глючит. Методом научного тыка выяснил что это блютуз не успервает подгружаться в момент выхода компа из сна и перехода в гибернейт. Если просто мышкой усыпить комп, потом разбудить, поюдождать 30 секунд (или дождаться когда блютуз посинеет) и также мышкой нажать гибернейт, то всё прекрасно работает. Так вот. В конечном плане мне нужен только таймер пробуждения, всё остальное могу делать скриптом, но если можно подправить эту програмульку под мои нужды, то было бы просто супер. Или может кто подскажит есть ли в реестре винды7 параметр чтоб растянуть время от срабатывания таймера пробуждения, до отправки команды гибернейт. PS. Дрова переставлял не один раз и разных версий, текущие дррова IVT_BlueSoleil_8.0.356.0.

Завтра подправлю код, скину в той же теме прогу. Поставлю задержку на переход в гибернейт 30 секунд.


Часовой пояс GMT +4, время: 16:05.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot