Обсуждение программ nnCron и nnCron LITE
by VoidVolker » Mon, 30 Sep 2013, 15:48
Нет, работать лучше не будет, ибо у кода есть только два состояния: работает или нет. Это обычное упрощение кода для более легкого понимания.
-

VoidVolker
- Site Admin
-
- Posts: 2907
- Joined: Tue, 25 Apr 2006, 17:56
by Driverz » Wed, 02 Oct 2013, 08:54
перелопатил весь код. для проверки "живности" звука использовал WINAMP плеер. вот из этого что получилось: - Code: Select all
<% TRUE VALUE Switch %>
#( -=Switch=- : Winamp S" Winamp*" PROC-EXIST? Switch AND IF EXIT ELSE Switch IF SWHide ShowNoActivate START-APPW: nircmd.exe mutesysvolume 0 START-APPW: nircmd.exe setsysvolume 65535 ShowMinimized START-APP: C:\Program Files (x86)\Winamp\winamp.exe BEGIN S" Winamp*" PROC-EXIST? 100 PAUSE UNTIL WINAMP-PLAY S" -=Звук ON=-, дата будильника:%new_wake_date%, день недели:%WDay@%" CRON-LOG ELSE SWHide ShowNoActivate START-APPW: nircmd.exe mutesysvolume 1 S" Winamp*" PROC-EXIST? IF S" Winamp*" KILL THEN S" -=Звук OFF=-, дата будильника:%new_wake_date%, день недели:%WDay@%" CRON-LOG THEN THEN ; NoLog SingleInstance Action: \ проверяем дни молчания DATE-INTERVAL: 03.11.2013-04.11.2013 \ 5 ноября DATE-INTERVAL: 01.01.2014-08.01.2014 OR \ Н.Г. DATE-INTERVAL: 23.02.2014-24.02.2014 OR \ 23 февраля DATE-INTERVAL: 08.03.2014-10.03.2014 OR \ 8 марта DATE-INTERVAL: 01.05.2014-05.05.2014 OR \ 1 мая DATE-INTERVAL: 09.05.2014-12.05.2014 OR \ 9 мая DATE-INTERVAL: 12.06.2014-12.06.2014 OR \ 12 июня DATE-INTERVAL: 04.11.2014-04.11.2014 OR \ 5 ноября IF FALSE TO Switch WinAmp EXIT THEN \ проверяем рабочее время будней WDay@ 6 < INTERVAL: 08:30-17:35 AND WDay@ 6 = INTERVAL: 10:00-14:05 AND OR \ проверяем рабочие субботы CUR-DATE 2010 11 13 YMD>DATE = INTERVAL: 08:30-17:35 AND OR CUR-DATE 2011 03 05 YMD>DATE = INTERVAL: 08:30-17:35 AND OR IF TRUE TO Switch WinAmp EXIT THEN Switch GetIdleTime 600000 > AND \ если кто-то работал последние десять минут, не выключаем IF TQUERY: "Выключить?" 60 Yes \ здесь последняя попытка поймать выключение IF FALSE TO Switch WinAmp EXIT ELSE THINT: "Отмена выключения" 30 THEN THEN )# nircmd.exe делаем общедоступным для Win8 (кладем в c:\windows) будильник оставил так как есть с ориентиром на WatchSuspend. единственно что, ввел DATE-INTERVAL на случай если пробудить ПК в период праздников и потом усыпить его, то есть желание проснуться в первый рабочий день, а не на сл день после усыпления. - Code: Select all
#( -=Выставляем_будильник=- 0 VALUE new_wake_date WatchSuspend Action: CUR-DATE CASE \ проверка с последнего дня перед периодом выходных по первый рабочий день DATE-INTERVAL: 04.11.2013-04.11.2013 OF 2013 11 05 ENDOF \ 5 ноября 2013 DATE-INTERVAL: 31.12.2012-08.01.2014 OF 2014 01 09 ENDOF \ Н.Г. DATE-INTERVAL: 22.02.2014-23.02.2014 OF 2014 02 24 ENDOF \ 23 февраля DATE-INTERVAL: 07.03.2014-10.03.2014 OF 2014 03 11 ENDOF \ 8 марта DATE-INTERVAL: 30.04.2014-04.05.2014 OF 2014 05 05 ENDOF \ 1 мая DATE-INTERVAL: 08.05.2014-11.05.2014 OF 2014 05 12 ENDOF \ 9 мая DATE-INTERVAL: 11.06.2014-15.06.2014 OF 2014 06 16 ENDOF \ 12 июня DATE-INTERVAL: 01.11.2014-04.11.2014 OF 2014 11 05 ENDOF \ 5 ноября DUP OF 0 0 0 ENDOF \ совпадение не найдено ENDCASE YMD>DATE TO new_wake_date new_wake_date IF \ выбираем схему настройки new_wake_date DATE>YMD 08 30 WakeAtDate ELSE WDay@ 5 < IF WakeAt: "08:30" ELSE WDay@ 5 = IF WakeAtWd: "10:00" ELSE WakeAtWd: "08:30" 1 THEN THEN THEN ES_CONT-SYSREQ-DISPREQ ResetSuspendTimer )#
пришлось ввести пустышку для отслеживания GetIdleTime, ибо почему-то в моей Win8(x64) <% InitIdleHook %> ввел ПК в полный ступор (все окна отказались откликаться/зависон), может, ГУРУ по этому поводу что подскажут? - Code: Select all
<% NoActive Rule: IDLE: 180000 Action: %>
Уважаемые, ГУРУ, подскажите, может как-то можно оптимизировать задачу -=Switch=- ?
Last edited by Driverz on Fri, 04 Oct 2013, 16:12, edited 7 times in total.
-
Driverz
-
- Posts: 125
- Joined: Fri, 06 Mar 2009, 13:06
by Morituruz » Wed, 02 Oct 2013, 10:20
Driverz wrote:<% InitIdleHook %> ввел ПК в полный ступор
Подтверждаю на Win2003 x64, вешает все окна от процессов с x64 архитектурой (32-битные окна работают вроде).
-

Morituruz
-
- Posts: 728
- Joined: Sun, 14 Oct 2007, 01:51
by SeMa » Wed, 02 Oct 2013, 15:36
Driverz wrote:- Code: Select all
#( -=Выставляем_будильник=- 0 VALUE new_wake_date WatchSuspend Action: CUR-DATE CASE \ проверка с последнего дня перед периодом выходных по первый рабочий день ...
отсюда? Писал для случая без внезапного появления на работе  . Зачем в задаче - Code: Select all
ES_SYSTEM_REQUIRED ResetSuspendTimer ES_DISPLAY_REQUIRED ResetSuspendTimer ES_CONTINUOUS ResetSuspendTimer
? Это три разных функции (см. плагин rstimer.spf). Чтобы выполнить эти функции одновременно, нужно создать новую константу (я у себя подправил плагин): - Code: Select all
0x80000003 CONSTANT ES_CONT-SYSREQ-DISPREQ
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
-

SeMa
-
- Posts: 637
- Joined: Fri, 15 Apr 2005, 12:49
- Location: Украина
by Driverz » Wed, 02 Oct 2013, 16:05
SeMa wrote:отсюда?
нет. чуток попозднее разработка. а по-простому для чего же нужны?: - Code: Select all
ES_SYSTEM_REQUIRED ResetSuspendTimer ES_DISPLAY_REQUIRED ResetSuspendTimer ES_CONTINUOUS ResetSuspendTimer
-
Driverz
-
- Posts: 125
- Joined: Fri, 06 Mar 2009, 13:06
by SeMa » Wed, 02 Oct 2013, 16:18
Driverz wrote:а по-простому для чего же нужны?:
Сейчас уже не помню, насколько долго экспериментировал до того, как слепил - Code: Select all
0x80000001 CONSTANT ES_CONT-SYSREQ
В тексте плагина есть описание (на английском). А смысл: Обнуляет system suspend timer. (Это может пригодиться, например, для того, чтобы компьютер не погружался снова в sleep mode через пять минут после автоматического пробуждения, если отсутствует пользовательская активность).
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
-

SeMa
-
- Posts: 637
- Joined: Fri, 15 Apr 2005, 12:49
- Location: Украина
by Driverz » Wed, 02 Oct 2013, 19:08
SeMa wrote:- Code: Select all
0x80000001 CONSTANT ES_CONT-SYSREQ
на сайте нашел только последний rstimer.spf. в нем нет нового определения. где можно взять новый rstimer.spf?и как и где в новом rstimer.spf нужно определять конструкцию вместо: - Code: Select all
ES_SYSTEM_REQUIRED ResetSuspendTimer ES_DISPLAY_REQUIRED ResetSuspendTimer ES_CONTINUOUS ResetSuspendTimer
-
Driverz
-
- Posts: 125
- Joined: Fri, 06 Mar 2009, 13:06
by SeMa » Thu, 03 Oct 2013, 10:41
Driverz wrote:SeMa wrote:на сайте нашел только последний ...
А его нового и нет. Я себе сам "обновил": - Code: Select all
\ File: rstimer.spf \ Author: Oleg Romanovich (2:450/173) \ Description: Prevent resume 5-minutes sleep mode after automatically wake-up
\ If windows wakes-up automatically (for example, timer wake-up), \ it resume sleep or hibernate mode after about 5 minutes, when the user \ activity not detected and no scheduling tasks are running. \ Periodically (once for 2-5 minutes) calling ResetSuspendTimer prevent \ this situation.
\ Usage: <Param> ResetSuspendTimer \ Param: ES_SYSTEM_REQUIRED Informs the system that the thread is \ performing some operation that is not \ normally detected as activity by the \ system. \ ES_DISPLAY_REQUIRED Informs the system that the thread is \ performing some operation that is not \ normally detected as display activity \ by the system. \ ES_CONTINUOUS Informs the system that the state being \ set should remain in effect until the \ next call that uses ES_CONTINUOUS and \ one of the other state flags is cleared.
\ Example: ES_SYSTEM_REQUIRED ResetSuspendTimer
0x00000001 CONSTANT ES_SYSTEM_REQUIRED 0x00000002 CONSTANT ES_DISPLAY_REQUIRED 0x80000000 CONSTANT ES_CONTINUOUS 0x80000003 CONSTANT ES_CONT-SYSREQ-DISPREQ \ all of above (additor: SeMa) 0x80000001 CONSTANT ES_CONT-SYSREQ \ (additor: SeMa)
WINAPI: SetThreadExecutionState KERNEL32.DLL WINAPI: IsSystemResumeAutomatic KERNEL32.DLL
: ResetSuspendTimer { param -- } IsSystemResumeAutomatic IF param SetThreadExecutionState DROP THEN ;
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
-

SeMa
-
- Posts: 637
- Joined: Fri, 15 Apr 2005, 12:49
- Location: Украина
by Driverz » Thu, 03 Oct 2013, 11:11
изменил плагин. перезагрузил nncron. вместо: - Code: Select all
ES_SYSTEM_REQUIRED ResetSuspendTimer ES_DISPLAY_REQUIRED ResetSuspendTimer ES_CONTINUOUS ResetSuspendTimer
написал: - Code: Select all
ES_CONT-SYSREQ-DISPREQ ResetSuspendTimer
так?
-
Driverz
-
- Posts: 125
- Joined: Fri, 06 Mar 2009, 13:06
by SeMa » Thu, 03 Oct 2013, 17:40
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
-

SeMa
-
- Posts: 637
- Joined: Fri, 15 Apr 2005, 12:49
- Location: Украина
by Driverz » Fri, 04 Oct 2013, 16:08
Гуру, неужели нельзя оптимизировать задачу? Может быть можно как-то избавиться от WinAmp вообще? Чувствую, что нужно как-то воропятить с флагами, но испорчен в молодости языками высокого уровня и не могу адекватно воспринимать конструкции форта.
-
Driverz
-
- Posts: 125
- Joined: Fri, 06 Mar 2009, 13:06
by VoidVolker » Fri, 04 Oct 2013, 18:39
Задачу нужно запускать в какое-то определенное время? А что мешает использовать спецификацию времени? - Code: Select all
Time: <Minutes> <Hours> <Days> <Months> <WeekDays> <Years>
-

VoidVolker
- Site Admin
-
- Posts: 2907
- Joined: Tue, 25 Apr 2006, 17:56
by Driverz » Mon, 07 Oct 2013, 08:20
VoidVolker wrote:Задачу нужно запускать в какое-то определенное время?
в чём и дело-то, что не в определенное, а периодически. думал проверять /10 минут, но остановился на ежеминутной проверке, так будет надежнее.
-
Driverz
-
- Posts: 125
- Joined: Fri, 06 Mar 2009, 13:06
by VoidVolker » Mon, 07 Oct 2013, 09:52
Можно же задать любые даты и диапазоны дат. В какое время надо запускать?
-

VoidVolker
- Site Admin
-
- Posts: 2907
- Joined: Tue, 25 Apr 2006, 17:56
by Driverz » Mon, 07 Oct 2013, 10:52
крон-формат запуска я вроде изучил. тут фишка в том, что ПК может быть перезагружен в любой момент. значит надо проверять "тишина/звук" после загрузки. nncron может быть выведен из непотопляемого режима, тоже надо проверить, и так далее, множество нюансов проверки режима "тишина/звук", поэтому я остановился на поминутной проверке. вроде всё работает. а как ВЫ, уважаемый, VoidVolker выразились: у кода есть только два состояния: работает или нет (с). вот я и остановился на этом, но что-то мне подсказывает, что если работает - не трогай.
-
Driverz
-
- Posts: 125
- Joined: Fri, 06 Mar 2009, 13:06
Return to nnCron forum (Russian)
Who is online
Users browsing this forum: No registered users and 1 guest
|
|