Готовые решения

Обсуждение программ nnCron и nnCron LITE

Re: ПОЧЕМУ-БЫ НЕ СОЗДАТЬ ТЕМУ *ветку *ГОТОВЫЕ РЕШЕНИЯ

Postby ascerdfg1 » Fri, 14 Sep 2012, 07:36

Автовоспроизведение Winamp при его загрузке и выгрузка при окончании воспроизведения списка воспроизведения:
Code: Select all
#( On_Amplifier_Winamp_&_close
VARIABLE lpt
VARIABLE wp1 \ в момент перехода с песни на песню винамп имеет статус "стоп"
VARIABLE wp2 \ и в этот момент винамп может опросится этим скриптом, что не верно закроет его.
             \ Для исправления этого введен двойной опрос состояния винамп.
SingleInstance
Action:
BEGIN
1000 PAUSE
WIN-EXIST: "Winamp v1.x"
IF
0 wp1 !
0 wp2 !
INTERVAL: 8:00-22:00
 IF 60 MIXER-VOLUME!
 ELSE 20 MIXER-VOLUME!
 THEN
SWHide
 START-APP: "mixer.exe s "YAMAHA":Звук:Громкость:65535"
\ START-APP: "mixer.exe s "Realtek HD Audio output":Звук:Громкость:65535"
0x37A DlPortReadPortUchar
CASE
   208 OF 0xD2 0x37A DlPortWritePortUchar DROP ENDOF \ включение усилка при включённой лампе (16 нога LPT-разъёма)
   204 OF 0xCE 0x37A DlPortWritePortUchar DROP ENDOF \ включение усилка при выключённой лампе
ENDCASE
 PAUSE: 1000
 WIN-EXIST: "Winamp v1.x"
  IF 104 0 1024 WIN-HWND SendMessageA \ узнаём статус Winamp
     DUP 0 =
         IF WINAMP-PLAY
         THEN
     DROP \ сбрасываем стек
  THEN
 PAUSE: 1000
BEGIN  \ закрытие "Winamp v1.x" если воспроизведение закончилось
PAUSE: 2000
WIN-EXIST: "Winamp v1.x"
 IF 104 0 1024 WIN-HWND SendMessageA
    DUP 0 =
        IF -1 wp1 !
        THEN
    DROP
 THEN
PAUSE: 2000
WIN-EXIST: "Winamp v1.x"
 IF 104 0 1024 WIN-HWND SendMessageA
    DUP 0 =
        IF 1 wp2 !
        THEN
    DROP
 THEN
wp1 @ wp2 @ *
 IF WIN-CLOSE: "Winamp v1.x"
 THEN
 WIN-EXIST: "Winamp v1.x" NOT
UNTIL
THEN
AGAIN
)#
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: ПОЧЕМУ-БЫ НЕ СОЗДАТЬ ТЕМУ *ветку *ГОТОВЫЕ РЕШЕНИЯ

Postby ascerdfg1 » Fri, 14 Sep 2012, 08:05

Плавное уменьшение громкости при проигрывании Winamp при отсутствии движений пользователя (ушёл гулять или заснул) и выгрузка Winamp при достижении громкости равной нулю.
Code: Select all
#( IDLE_Winamp_Close
VARIABLE zz \ для выхода из цикла понижения громкости если громкость = 0 или я шевелнулся
VARIABLE xx \ первоначальный уровень громкости
VARIABLE ww \ счетчик цикла
\ WatchProc: "winamp.exe"
SingleInstance
\ NoActive
Action:
BEGIN
  20 ww !
  PAUSE: 10000
  PROC-EXIST: "winamp.exe"
    IF
      INTERVAL: 6:00-22:00
        IF
        IDLE: 1500                  \ 25 минут
          IF
            MIXER-VOLUME@ xx !
            1 zz !
            BEGIN
              PAUSE: 1000 \ для того чтоб восстанавливалась громкость максимум через 1 секунду после активности юзера
              ww 1+! \ ww @ 1 + ww !
              ww @ 10 MOD 0= \ без "ww @" пишет "ошибка стека"
                 IF -1 MIXER+   \ уменьшение громкости на один процент через 10 секунд
                   MIXER-VOLUME@
                   zz !
                 THEN
              IDLE: 2 NOT           \ если я заметил что громкость падает я шевельнусь
                IF
                   BEGIN
                      PAUSE: 100
                      1 MIXER+   \ увеличение громкости на один процент через .2 секунд
                      PAUSE: 100
                      MIXER-VOLUME@ xx @ > \ если я громкостью поиграю с пульта, то возможно что этот цикл никогда не закончится, громкость будет всё время лезть вверх, т.к. MIXER-VOLUME@ будет больше XX к моменту запуска этого цикла
                   UNTIL
                   0 zz !
                THEN
              zz @
              0 =              \ цикл будет выполняться пока уровень громкости не станет равным нулю или я шевельнусь
            UNTIL
            MIXER-VOLUME@ 0=
              IF
                WIN-CLOSE: "Winamp v1.x"
                INTERVAL: 23:00-6:00
                  IF
                    POWEROFF
                  THEN
              THEN
        THEN
      ELSE
        IDLE: 600                  \ 10 минут (перед сном)
          IF MIXER-VOLUME@ xx !
            1 zz !
            BEGIN
              PAUSE: 1000 \ для того чтоб восстанавливалась громкость максимум через 1 секунду после активности юзера
              ww 1+! \ ww @ 1 + ww !
              ww @ 10 MOD 0= \ без "ww @" пишет "ошибка стека"
              IF
                -1 MIXER+   \ уменьшение громкости на один процент через 15 секунд
                PAUSE: 100
                MIXER-VOLUME@
                zz !
              THEN
              IDLE: 2 NOT           \ если я заметил что громкость падает я шевельнусь
                IF xx @ MIXER-VOLUME! \ и громкость восстановиться...
                  0 zz !
                THEN
              zz @
              0 =              \ цикл будет выполняться пока уровень громкости не станет равным нулю
            UNTIL
            MIXER-VOLUME@ 0=
              IF
                WIN-CLOSE: "Winamp v1.x"
                \ POWER-SUSPEND
              THEN
          THEN
      THEN
  THEN
AGAIN
)#
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: ПОЧЕМУ-БЫ НЕ СОЗДАТЬ ТЕМУ *ветку *ГОТОВЫЕ РЕШЕНИЯ

Postby ascerdfg1 » Fri, 14 Sep 2012, 08:18

Закрываем окно средней кнопкой мыши на заголовке окна или если нажим был не на заголовке окна - вставляем из буфера обмена. И как бонус (непонятно почему работает) если нажим на системном трее то выскакивает окно выбора завершения работы.
Code: Select all
#( middle-operation
SingleInstance
AsLoggedUser
NoLog
: KEYUP-WAIT   BEGIN DUP KEY-PRESSED? WHILE 100 PAUSE REPEAT DROP ; \ для ожидания отжатия, иначе закрывается несколько окон
Action:
 BEGIN
    PAUSE: 100
    VK_MBUTTON KEY-PRESSED? \ нажата ли средняя кнопка мыши?
     IF
      VK_MBUTTON KEYUP-WAIT \ ждать отжатия средней кнопки мыши
      MOUSE-POS 16 LSHIFT OR
      0 132 GetForegroundWindow SendMessageA
          \ MSG: "%0 esPICK%" \ тестировать какая область окна за что отвечает (вывод значения стека)
      2 = \ шелчок средней кнопкой мыши на заголовке окна
       IF
         WIN-CLOSE: "%GetForegroundWindow%" \ закрывает окно по которому я щёлкнул по заголовку этого окна средней кнопкой мыши
       ELSE \ вставляем содержимое буфера обмена
             MOUSE-LBCLK
             0x11 AKEYDN \ Ctrl нажимает
             0x56 AKEY \ однократно нажимает клавишу "V"
             0x11 AKEYUP \ Ctrl отпускает
       THEN
     THEN
 AGAIN
)#
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: ПОЧЕМУ-БЫ НЕ СОЗДАТЬ ТЕМУ *ветку *ГОТОВЫЕ РЕШЕНИЯ

Postby ascerdfg1 » Fri, 05 Oct 2012, 13:17

Чтоб весь день не убить на ютуб делаем прерывалку (работает под Фаирфоксом):
Code: Select all
#( u-tube_close
VARIABLE tube
SingleInstance
Action:
0 tube !
BEGIN
5000 PAUSE
WIN-ACTIVE: "*youtube*"
IF tube 1+!
THEN
tube @ 120 =
UNTIL
TMSG: "завязывай с ютубом" 2
1000 PAUSE
\ закрываем текущую вкладку фаирфокса:
0x11 AKEYDN \ Ctrl нажимает
0x57 AKEY \ однократно нажимает клавишу
0x11 AKEYUP \ Ctrl отпускает
BEGIN
5000 PAUSE
WIN-ACTIVE: "*youtube*"
IF
  TMSG: "Ты ещё не отдохнул от ютуба!" 1
1000 PAUSE
  0x11 AKEYDN \ Ctrl нажимает
  0x57 AKEY \ однократно нажимает клавишу
  0x11 AKEYUP \ Ctrl отпускает
THEN
tube 1+!
tube @ 225 =
UNTIL
)#
Last edited by ascerdfg1 on Sat, 06 Oct 2012, 12:37, edited 1 time in total.
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: ПОЧЕМУ-БЫ НЕ СОЗДАТЬ ТЕМУ *ветку *ГОТОВЫЕ РЕШЕНИЯ

Postby SeMa » Fri, 05 Oct 2012, 17:02

tube @ 1 + tube !
==
tube 1+!
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: ПОЧЕМУ-БЫ НЕ СОЗДАТЬ ТЕМУ *ветку *ГОТОВЫЕ РЕШЕНИЯ

Postby ascerdfg1 » Sat, 06 Oct 2012, 12:37

Спасибо, исправил.
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: ПОЧЕМУ-БЫ НЕ СОЗДАТЬ ТЕМУ *ветку *ГОТОВЫЕ РЕШЕНИЯ

Postby ascerdfg1 » Sun, 14 Oct 2012, 12:30

ascerdfg1 wrote:С наступающими холодами важно не упустить слить воду из бочки в гараже. Это напоминалка, которая качает архив погоды из инета (линк нужно поменять для вашего региона) и находит минимальную температуру. Если она ниже установленной в этой задаче: (-?[0-3]), то выдаёт напоминание.
Code: Select all
#( water_tank
Time: 3 * * 9-3 * * \ каждый час с сентября по март
 Rule: ONLINE?
SingleInstance
Action:
FILE-EXIST: "water_tank.txt" NOT \ если не слил воду
  IF 
           S" http://rp5.ru/archive.php?wmo_id=27710&lang=ru" HTTP-GET 0=
              IF
                 S" water_tank.html" FWRITE \ сохраняю инет-страницу в файл
              ELSE 2DROP THEN
          FILE-EXIST: "water_tank.html"
             IF
                S" water_tank.html" FILE
                S" /(</div></td><td class=\x22cl_rd\w{0,3}\x22 nowrap=\x22nowrap\x22><div class=\x22t_0 dfs\x22 style=\x22display: inline;\x22>)(-?[0-3])\./" RE-MATCH \ "\ ищем температуру воздуха, кавычки "\x22"
                 IF
                   QUERY: "Воду слил? t*=%$2%*C"
                      IF FILE-CREATE: "water_tank.txt" 
                      THEN
                ELSE
                 \ MSG: "не слей"
                THEN
              FILE-DELETE: "water_tank.html" \ обязательно, для дополнительной проверки что http-get сработал
           ELSE
              MSG: "water_tank.html не найден"
           THEN
  ELSE \ MSG: "он слил воду"
  THEN
)#

#( water_tank-del \ чтобы активизировать напоминалку в следующем году
Time: 6 * * 4 * * \ каждый час в апреле чтобы уж точно стёрся этот файл, потому что мы можем уехать, заболеть, сломать комп, но не включать комп целый месяц это маловероятно
Action:
 FILE-DELETE: "water_tank.txt"
)#

Не выводит минус, выводит в "QUERY: "Воду слил? t*=%$2%*C" ноль, хотя сегодня было -0.9. Почему?
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: ПОЧЕМУ-БЫ НЕ СОЗДАТЬ ТЕМУ *ветку *ГОТОВЫЕ РЕШЕНИЯ

Postby ask » Tue, 16 Oct 2012, 18:53

Зачитка из реестра интересующих значений и оформление их в виде переменных среды:

Code: Select all
<%
USER-CREATE USER_NAME_IN_REG 250 USER-ALLOT

USER-CREATE REG_ROOT         250 USER-ALLOT
USER-CREATE REG_KEY          250 USER-ALLOT

USER-CREATE REG_PARAM        250 USER-ALLOT
USER-CREATE REG_VALUE        250 USER-ALLOT
USER-CREATE ENV_NAME         250 USER-ALLOT
%>

#( ReadOneParam
NoLog
NoDel
RunOnce
Time: 32 11 2 6 * 2008
Action:

  S" %REG_ROOT COUNT%\%REG_KEY COUNT%" EVAL-SUBST REG-KEY-EXIST?
  IF
    S" %REG_ROOT COUNT%\%REG_KEY COUNT%\%REG_PARAM COUNT%" EVAL-SUBST REG_PARAM PLACE
    REG_VALUE GET-REG: "%REG_PARAM COUNT%"
   
    S" %ENV_NAME COUNT% = %REG_VALUE ASCIIZ>%" EVAL-SUBST CRON-LOG
    REG_VALUE ASCIIZ>   ENV_NAME COUNT         EVAL-SUBST SETENV THROW
  ELSE
    S" %ENV_NAME COUNT% = empty"               EVAL-SUBST CRON-LOG
    S" empty"           ENV_NAME COUNT         EVAL-SUBST SETENV THROW
  THEN
)#

#( GetSysFoldersFromRegistry
NoLog
NoDel
AsLoggedUser
SingleInstance
RunOnce
Time: 32 11 2 6 * 2008
Action:

  CRON-SERVICE?
  IF
    S" %USERNAME%"                              EVAL-SUBST NAME2SIDS USER_NAME_IN_REG PLACE
    S" HKEY_USERS\%USER_NAME_IN_REG COUNT%"     EVAL-SUBST           REG_ROOT         PLACE
  ELSE
    S" HKEY_CURRENT_USER"                       EVAL-SUBST           REG_ROOT         PLACE
  THEN
 
  S" Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" EVAL-SUBST REG_KEY PLACE
 
 
 
 
  S" AppData"                   EVAL-SUBST REG_PARAM PLACE
  S" USR_APPDATA"               EVAL-SUBST ENV_NAME  PLACE
  ReadOneParam                  RUN
 
  S" Local AppData"             EVAL-SUBST REG_PARAM PLACE
  S" USR_LOCAL_APPDATA"         EVAL-SUBST ENV_NAME  PLACE
  ReadOneParam                  RUN
 
  S" Cache"                     EVAL-SUBST REG_PARAM PLACE
  S" USR_INTERNET_CACHE"        EVAL-SUBST ENV_NAME  PLACE
  ReadOneParam                  RUN
 
  S" Cookies"                   EVAL-SUBST REG_PARAM PLACE
  S" USR_COOKIES"               EVAL-SUBST ENV_NAME  PLACE
  ReadOneParam                  RUN
 
  S" History"                   EVAL-SUBST REG_PARAM PLACE
  S" USR_HISTORY"               EVAL-SUBST ENV_NAME  PLACE
  ReadOneParam                  RUN
 
  S" Recent"                    EVAL-SUBST REG_PARAM PLACE
  S" USR_RECENT"                EVAL-SUBST ENV_NAME  PLACE
  ReadOneParam                  RUN
 
  S" Templates"                 EVAL-SUBST REG_PARAM PLACE
  S" USR_TEMPL"                 EVAL-SUBST ENV_NAME  PLACE
  ReadOneParam                  RUN
 
 
 
  S" Software\ReGet Software\ReGetDx" EVAL-SUBST REG_KEY PLACE
  S" Dir"                             EVAL-SUBST REG_PARAM PLACE
  S" REGET_DIR"                       EVAL-SUBST ENV_NAME  PLACE
  ReadOneParam                        RUN
 
  S" QueueFile"                       EVAL-SUBST REG_PARAM PLACE
  S" REGET_QUEUE"                     EVAL-SUBST ENV_NAME  PLACE
  ReadOneParam                        RUN
 

 
 
 
  S" HKEY_LOCAL_MACHINE"                                                EVAL-SUBST REG_ROOT  PLACE
  S" Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"  EVAL-SUBST REG_KEY PLACE
 
  S" Common AppData"            EVAL-SUBST REG_PARAM PLACE
  S" COM_APPDATA"               EVAL-SUBST ENV_NAME  PLACE
  ReadOneParam                  RUN
)#



В лог-файл выводится следующее:
Code: Select all
17:13:10 1948 USR_APPDATA = C:\Documents and Settings\User\Application Data
17:13:10 1948 USR_LOCAL_APPDATA = C:\Documents and Settings\User\Local Settings\Application Data
17:13:10 1948 USR_INTERNET_CACHE = A:\TMP\Temporary Internet Files
17:13:10 1948 USR_COOKIES = A:\TMP\Cookies
17:13:10 1948 USR_HISTORY = A:\TMP\History
17:13:10 1948 USR_RECENT = G:\Documents and Settings\User\Recent
17:13:10 1948 USR_TEMPL = B:\Шаблоны
17:13:10 1948 REGET_DIR = B:\Program Files\ReGet Software\ReGet Deluxe
17:13:10 1948 REGET_QUEUE = C:\Documents and Settings\User\Application Data\ReGet Software\Queue.wjr
17:13:10 1948 COM_APPDATA = C:\Documents and Settings\All Users\Application Data


Использовать можно так:
Code: Select all
MSG: "%ALLUSERSPROFILE%\Главное меню\Программы\Автозагрузка"
MSG: "%CommonProgramFiles%\Java\Java Update"
ask
 
Posts: 56
Joined: Sun, 11 Dec 2011, 09:38

Re: ПОЧЕМУ-БЫ НЕ СОЗДАТЬ ТЕМУ *ветку *ГОТОВЫЕ РЕШЕНИЯ

Postby ask » Tue, 16 Oct 2012, 18:58

Скрипт, пытающийся бороться с "блокировщиками Windows".
Он мониторит "болевые точки" при загрузке и далее, в процессе работы; и если обнаружит .EXE там, где его быть не должно, пытается "срубить" одноимённый процесс и удалить файл.

Code: Select all
<%
USER-CREATE ANTI_DIR        255 USER-ALLOT
USER-CREATE ANTI_S_COUNT     15 USER-ALLOT
USER-CREATE ANTI_SECT        32 USER-ALLOT

USER ANTI_COUNT
%>

#( AntiBlock
NoLog
NoDel
AsLoggedUser
SingleInstance
RunOnce
Time: 32 11 2 6 * 2008
Action:
SWHide   RealtimePriority

  FOR-FILES: "%ANTI_DIR COUNT%\*.exe"
    Если_кто_то_кое_где_у_нас_порой LAUNCH
   
    PROC-EXIST: "%FOUND-FILENAME%"
    IF
      KILL: "%FOUND-FILENAME%"
      PAUSE: 100
    THEN
   
    START-APPW: del /F /Q "%FOUND-FULLPATH%"
   
    FILE-EXIST: "%FOUND-FULLPATH%"
    IF
      S" Не получилось удалить вирус %FOUND-FULLPATH%" EVAL-SUBST CRON-LOG
     
      2 BalloonIcon !
        BALLOON: "Не получилось удалить вирус" "%FOUND-FULLPATH%"
      1 BalloonIcon !
    ELSE
      S" Удалён вирус %FOUND-FULLPATH%" EVAL-SUBST CRON-LOG
     
      2 BalloonIcon !
        BALLOON: "Удалён вирус" "%FOUND-FULLPATH%"
      1 BalloonIcon !
    THEN
  ;FOR-FILES 
)#

#( MultiAntiBlock
NoLog
NoDel
AsLoggedUser
SingleInstance
RunOnce
Time: 32 11 2 6 * 2008
Action:
 
  FILE-EXIST: "%ASKCRON_INI COUNT%"
  IF
    ASKCRON_INI COUNT           INI-FILENAME
    S" Антиблокировщик"         INI-SECTION
    S" Количество папок"        INI-GET-VALUE EVAL-SUBST ANTI_S_COUNT PLACE
   
    ANTI_S_COUNT COUNT S" default value" COMPARE 0= NOT   ANTI_S_COUNT COUNT S" " COMPARE 0= NOT    ANTI_S_COUNT COUNT S" 0" COMPARE 0= NOT    AND AND
    IF
      0 ANTI_COUNT !
     
      ANTI_S_COUNT COUNT S>NUM 0 DO
        ANTI_COUNT @ 1 + ANTI_COUNT !
        S" Антиблокировщик_%ANTI_COUNT @%" EVAL-SUBST ANTI_SECT PLACE
       
        ANTI_SECT COUNT  INI-SECTION
        S" Папка"        INI-GET-VALUE EVAL-SUBST ANTI_DIR PLACE
       
        AntiBlock RUN
      LOOP
    THEN
  THEN
)#

#( AntiBlockUserProfile
NoLog
NoDel
HyperActive
SingleInstance
AsLoggedUser
LoadProfile
WatchDir: "%USERPROFILE%"
Action:
SWHide   RealtimePriority

  S" %USERPROFILE%" EVAL-SUBST ANTI_DIR PLACE
  AntiBlock RUN
)#


#( AntiBlockAllUsersProfile
NoLog
NoDel
HyperActive
SingleInstance
WatchDir: "%ALLUSERSPROFILE%"
Action:
SWHide   RealtimePriority

  S" %ALLUSERSPROFILE%" EVAL-SUBST ANTI_DIR PLACE
  AntiBlock RUN
)#

#( AntiBlockUserAutoRun
NoLog
NoDel
HyperActive
SingleInstance
AsLoggedUser
LoadProfile
WatchDir: "%USERPROFILE%\Главное меню\Программы\Автозагрузка"
Action:
SWHide   RealtimePriority

  S" %USERPROFILE%\Главное меню\Программы\Автозагрузка" EVAL-SUBST ANTI_DIR PLACE
  AntiBlock RUN
)#

#( AntiBlockAllUsersAutoRun
NoLog
NoDel
HyperActive
SingleInstance
WatchDir: "%ALLUSERSPROFILE%\Главное меню\Программы\Автозагрузка"
Action:
SWHide   RealtimePriority

  S" %ALLUSERSPROFILE%\Главное меню\Программы\Автозагрузка" EVAL-SUBST ANTI_DIR PLACE
  AntiBlock RUN
)#

#( AntiBlockJava
NoLog
NoDel
HyperActive
SingleInstance
WatchDir: "%CommonProgramFiles%\Java\Java Update"
Action:
SWHide   RealtimePriority

  S" %CommonProgramFiles%\Java\Java Update" EVAL-SUBST ANTI_DIR PLACE
  AntiBlock RUN
)#


Для работы считываются следующие параметры файла "askCron.ini", расположенного в папке nnCron:
Code: Select all
[Антиблокировщик]
Количество папок=5
[Антиблокировщик_1]
Папка=%USERPROFILE%
[Антиблокировщик_2]
Папка=%ALLUSERSPROFILE%
[Антиблокировщик_3]
Папка=%USERPROFILE%\Главное меню\Программы\Автозагрузка
[Антиблокировщик_4]
Папка=%ALLUSERSPROFILE%\Главное меню\Программы\Автозагрузка
[Антиблокировщик_5]
Папка=%CommonProgramFiles%\Java\Java Update
ask
 
Posts: 56
Joined: Sun, 11 Dec 2011, 09:38

Re: ПОЧЕМУ-БЫ НЕ СОЗДАТЬ ТЕМУ *ветку *ГОТОВЫЕ РЕШЕНИЯ

Postby VoidVolker » Tue, 16 Oct 2012, 22:24

Для кода есть bb тег code — его нужно использовать для размещения кода. Поправил.

Code: Select all
S" %USERNAME%"                              EVAL-SUBST

=
Code: Select all
USERNAME



Code: Select all
S" HKEY_CURRENT_USER"                       EVAL-SUBST 

=
Code: Select all
S" HKEY_CURRENT_USER"
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: ПОЧЕМУ-БЫ НЕ СОЗДАТЬ ТЕМУ *ветку *ГОТОВЫЕ РЕШЕНИЯ

Postby ask » Wed, 17 Oct 2012, 11:28

Спасибо за исправления, поправлю у себя. Продолжу. Наверняка можно сделать изящнее, но уж как смог...
Все слышали про CCleaner и подобные утилиты, удаляющие "мусор" из системы. Тем же самым можно озаботить и nnCron, только он всё будет делать сам, без явного запуска. Например, в момент загрузки.
В этих файлах, лежащих в папке с nnCron, задаётся, какие папки и с какими параметрами должны очищаться:

"Мусор_системы.ini"
Code: Select all
[Мусор_системы]
Count=22

[Мусор_системы_1]
Path=%windir%\Temp
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=Yes

[Мусор_системы_2]
Path=%windir%\system32\config\systemprofile\Local Settings\Temp
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_системы_3]
Path=%windir%\$hf_mig$
Days=1
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=Yes

[Мусор_системы_4]
Path=%windir%\SoftwareDistribution\Download
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=Yes

[Мусор_системы_5]
Path=%windir%
Templ=*.log
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_системы_6]
Path=%windir%\system32\wbem\Logs
Templ=*.log
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_системы_7]
Path=%windir%\system32\wbem\Logs
Templ=*.lo_
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_системы_8]
Path=%windir%\Debug\UserMode
Templ=*.log
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_системы_9]
Path=%SystemRoot%\system32\dllcache
Templ=*.*
Days= 60
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=Yes

[Мусор_системы_10]
Path=%windir%\SoftwareDistribution
Templ=*.log
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_системы_11]
Path=%windir%\Debug
Templ=*.log
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_системы_12]
Path=%windir%\Debug
Templ=ntbtlog.txt
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_системы_13]
Path=%windir%\Prefetch
Templ=*.pf
Days=30
;Работаем с датой последней записи в файл
Mode=A
Recursive=No
WithDirs=No

[Мусор_системы_14]
Path=%COM_APPDATA%\Microsoft\Search\Data\Applications\Windows
Templ=*.log
Days= -1
;Работаем с датой последней записи в файл
Mode=A
Recursive=No
WithDirs=No

[Мусор_системы_15]
Path=%windir%\ing
Templ=*.log
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_системы_16]
Path=%windir%\inf
Templ=*.log
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_системы_17]
Path=%windir%\security\logs
Templ=*.log
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_системы_18]
Path=%windir%\security\logs
Templ=*.old
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_системы_19]
Path=%windir%\security\logs
Templ=*.old
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_системы_20]
Path=%windir%\Panther
Templ=*.log     
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_системы_21]
Path=%windir%\Logs\CBS
Templ=*.log     
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_системы_22]
Path=%windir%\Microsoft.net\Framework
Templ=*.log     
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=No


"Мусор_пользователя.ini"
Code: Select all
[Мусор_пользователя]
Count=36

[Мусор_пользователя_1]
Path=%COM_APPDATA%\Microsoft\Dr Watson
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_пользователя_2]
Path=%FOLDER-APP-DATA%\Macromedia\Flash Player\macromedia.com\support\flashplayer\sys
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=Yes

[Мусор_пользователя_3]
Path=%FOLDER-APP-DATA%\Sun\Java\Deployment\cache
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=Yes

[Мусор_пользователя_4]
Path=%FOLDER-APP-DATA%\Adobe\Flash Player\AssetCache
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=Yes

[Мусор_пользователя_5]
Path=%FOLDER-APP-DATA%\Microsoft\Web Server Extensions\Cache
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=Yes

[Мусор_пользователя_6]
Path=%FOLDER-APP-DATA%\OpenOffice.org\3\user\uno_packages\cache
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=Yes

[Мусор_пользователя_7]
Path=%FOLDER-APP-DATA%\BigHugeEngine\Reckoning\Cache
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=Yes

[Мусор_пользователя_8]
Path=%FOLDER-APP-DATA%\Google\GoogleEarth\webdata
Days=10
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=Yes

[Мусор_пользователя_9]
Path=%USR_LOCAL_APPDATA%\Google\GoogleEarth
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_пользователя_11]
Path=%USR_LOCAL_APPDATA%\Google\GoogleEarth\webdata
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=Yes

[Мусор_пользователя_12]
Path=%USR_LOCAL_APPDATA%\Opera\Opera\thumbnails
Days=30
;Работаем с датой последней записи в файл
Mode=A
Recursive=No
WithDirs=No

[Мусор_пользователя_13]
Path=%USR_LOCAL_APPDATA%\Opera\Opera\vps
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=Yes

[Мусор_пользователя_14]
Path=%USR_LOCAL_APPDATA%\Opera\Opera\pstorage
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=Yes

[Мусор_пользователя_15]
Path=%USR_LOCAL_APPDATA%\Opera\Opera\logs
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_пользователя_16]
Path=%USR_LOCAL_APPDATA%\Opera\Opera\icons
Days=30
;Работаем с датой последней записи в файл
Mode=A
Recursive=Yes
WithDirs=Yes

[Мусор_пользователя_17]
Path=%COM_APPDATA%\Microsoft\Microsoft antimalware\scans\history\results\resource
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_пользователя_18]
Path=%COM_APPDATA%\Microsoft\Microsoft Security Client\Support
Templ=*.log
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_пользователя_19]
Path=%COM_APPDATA%\Acronis\TrueImageHome\Logs
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_пользователя_20]
Path=%FOLDER-APP-DATA%\Microsoft\CryptnetUrlCache\Content
Days=30
;Работаем с датой последней записи в файл
Mode=A
Recursive=No
WithDirs=No

[Мусор_пользователя_21]
Path=%FOLDER-APP-DATA%\Microsoft\CryptnetUrlCache\MetaData
Days=30
;Работаем с датой последней записи в файл
Mode=A
Recursive=No
WithDirs=No

[Мусор_пользователя_22]
Path=%FOLDER-APP-DATA%\Microsoft\Office
Templ=*.tmp
Days=-1
;Работаем с датой последней записи в файл
Mode=A
Recursive=No
WithDirs=No

[Мусор_пользователя_23]
Path=%USR_RECENT%
Days=30
;Работаем с датой последней записи в файл
Mode=A
Recursive=No
WithDirs=No

[Мусор_пользователя_24]
Path=%FOLDER-APP-DATA%\Microsoft\Office\Recent
Days=30
;Работаем с датой последней записи в файл
Mode=A
Recursive=No
WithDirs=No

[Мусор_пользователя_25]
Path=%COM_APPDATA%\Avira\AntiVir Desktop\LOGFILES
Templ=*.log
Days=-1
;Работаем с датой последней записи в файл
Mode=A
Recursive=No
WithDirs=No

[Мусор_пользователя_26]
Path=%USERPROFILE%\Главное меню\Программы\Автозагрузка
Days= -1
Templ=*.exe
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_пользователя_27]
Path=%USERPROFILE%
Days= -1
Templ=*.exe
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_пользователя_28]
Path=%USR_LOCAL_APPDATA%\Adobe\Acrobat\7.0\Cache
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=Yes

[Мусор_пользователя_29]
Path=%COM_APPDATA%\Microsoft\Microsoft antimalware\Support
Templ=*.log
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=No
WithDirs=No

[Мусор_пользователя_30]
Path=%FOLDER-APP-DATA%\Macromedia\Flash Player\#SharedObjects
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=Yes

[Мусор_пользователя_31]
Path=%USR_LOCAL_APPDATA%\Opera\Opera\cache
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=Yes

[Мусор_пользователя_32]
Path=%USR_LOCAL_APPDATA%\Opera\Opera\widgets
Templ=*.tmp
Days= -1
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=No

[Мусор_пользователя_33]
Path=%USR_LOCAL_APPDATA%\Opera\Opera\icons\cache
Days = -1
;Работаем с датой последней записи в файл
Mode=A
Recursive=Yes
WithDirs=Yes

[Мусор_пользователя_34]
Path=%USR_LOCAL_APPDATA%\Microsoft\Windows\Explorer
Days = 10
Templ=*.db
;Работаем с датой последней записи в файл
Mode=A
Recursive=No
WithDirs=No

[Мусор_пользователя_35]
Path=%COM_APPDATA%\Avira\AntiVir Desktop\LOGFILES
Days = -1
Templ=*.log
;Работаем с датой последней записи в файл
Mode=A
Recursive=No
WithDirs=No

[Мусор_пользователя_36]
Path=%COM_APPDATA%\Avira\AntiVir Desktop\TEMP
Days = -1
Templ=*.tmp
;Работаем с датой последней записи в файл
Mode=A
Recursive=No
WithDirs=No


"Мусор_дополнительно.ini"
Code: Select all
[Мусор_дополнительно]
Count=1

[Мусор_дополнительно_1]
Path=C:\TEMP
Days=30
;Работаем с датой последней записи в файл
Mode=W
Recursive=Yes
WithDirs=Yes


А вот скрипт, обрабатывающий указанные в этих файлах папки:
Code: Select all
<%
USER-CREATE FLD_NAME 250 USER-ALLOT
USER-CREATE FLE_NAME 250 USER-ALLOT
%>

#( ClearFolder
NoLog
RunOnce
NoDel
Time: 40 21 20 12 * 2010

USER-CREATE O_COUNT         15 USER-ALLOT
USER-CREATE O_SECT          55 USER-ALLOT
USER-CREATE O_VAL1         255 USER-ALLOT
USER-CREATE O_VAL2          55 USER-ALLOT

USER-CREATE PURGE_MODE      15 USER-ALLOT
USER-CREATE PURGE_RECURSIVE 15 USER-ALLOT
USER-CREATE PURGE_WITHDIRS  15 USER-ALLOT
USER-CREATE FILE_TEMPL      64 USER-ALLOT
USER-CREATE PURGE_DIR      255 USER-ALLOT
USER-CREATE PURGE_TEMPL    255 USER-ALLOT

USER PURGE_O
USER PURGE_NUMBER

Action:

  S" %ModuleDirName%%FLD_NAME COUNT%.ini" EVAL-SUBST FLE_NAME PLACE
 
  FILE-EXIST: "%FLE_NAME COUNT%"
  IF
    S" Начало очистки '%FLD_NAME COUNT%'" EVAL-SUBST CRON-LOG
 
    FLE_NAME COUNT      INI-FILENAME
    FLD_NAME COUNT      INI-SECTION
    S" Count"           INI-GET-VALUE EVAL-SUBST O_COUNT PLACE
   
    \ Присваиваем переменной PURGE_O значение 0
    0 PURGE_O !
   
    O_COUNT COUNT S>NUM 0 DO
      PURGE_O @ 1 + PURGE_O !
      S" %FLD_NAME COUNT%_%PURGE_O @%" EVAL-SUBST O_SECT PLACE
     
      O_SECT COUNT  INI-SECTION
      S" Path"      INI-GET-VALUE EVAL-SUBST O_VAL1             PLACE
      S" Days"      INI-GET-VALUE EVAL-SUBST O_VAL2             PLACE
      S" Mode"      INI-GET-VALUE EVAL-SUBST PURGE_MODE         PLACE
      S" Recursive" INI-GET-VALUE EVAL-SUBST PURGE_RECURSIVE    PLACE
      S" WithDirs"  INI-GET-VALUE EVAL-SUBST PURGE_WITHDIRS     PLACE
      S" Templ"     INI-GET-VALUE EVAL-SUBST FILE_TEMPL         PLACE
     
      FILE_TEMPL COUNT S" " COMPARE 0= FILE_TEMPL COUNT S" default value" COMPARE 0= OR
      IF
        S" *.*" EVAL-SUBST FILE_TEMPL PLACE
      THEN
     
      O_VAL2 COUNT S>NUM PURGE_NUMBER !
      S" %O_VAL1 COUNT%\"                   EVAL-SUBST PURGE_DIR   PLACE
      S" %O_VAL1 COUNT%\%FILE_TEMPL COUNT%" EVAL-SUBST PURGE_TEMPL PLACE
     
      FILE-EXIST: "%PURGE_DIR COUNT%"
      IF
        PURGE_MODE COUNT S" W" COMPARE 0=
        IF
          \ По дате последней записи в файл
          PURGE_RECURSIVE COUNT S" Yes" COMPARE 0= PURGE_WITHDIRS COUNT S" Yes" COMPARE 0= AND
          IF
            RECURSIVE WITHDIRS SKIPERRORS
            PURGE_TEMPL COUNT PURGE_NUMBER @ PURGE-OLDW
          ELSE
            PURGE_RECURSIVE COUNT S" Yes" COMPARE 0=
            IF
              RECURSIVE SKIPERRORS
              PURGE_TEMPL COUNT PURGE_NUMBER @ PURGE-OLDW
            ELSE
              PURGE_TEMPL COUNT PURGE_NUMBER @ PURGE-OLDW
            THEN
          THEN
        ELSE
          PURGE_MODE COUNT S" A" COMPARE 0=
          IF
            \ По дате последнего доступа к файлу
            PURGE_RECURSIVE COUNT S" Yes" COMPARE 0= PURGE_WITHDIRS COUNT S" Yes" COMPARE 0= AND
            IF
              RECURSIVE WITHDIRS SKIPERRORS
              PURGE_TEMPL COUNT PURGE_NUMBER @ PURGE-OLDA
            ELSE
              PURGE_RECURSIVE COUNT S" Yes" COMPARE 0=
              IF
                RECURSIVE SKIPERRORS
                PURGE_TEMPL COUNT PURGE_NUMBER @ PURGE-OLDA
              ELSE
                PURGE_TEMPL COUNT PURGE_NUMBER @ PURGE-OLDA
              THEN
            THEN
          ELSE
            \ По дате создания файла
            PURGE_RECURSIVE COUNT S" Yes" COMPARE 0= PURGE_WITHDIRS COUNT S" Yes" COMPARE 0= AND
            IF
              RECURSIVE WITHDIRS SKIPERRORS
              PURGE_TEMPL COUNT PURGE_NUMBER @ PURGE-OLD
            ELSE
              PURGE_RECURSIVE COUNT S" Yes" COMPARE 0=
              IF
                RECURSIVE SKIPERRORS
                PURGE_TEMPL COUNT PURGE_NUMBER @ PURGE-OLD
              ELSE
                PURGE_TEMPL COUNT PURGE_NUMBER @ PURGE-OLD
              THEN
            THEN
          THEN
        THEN
      THEN
     
    LOOP
   
    S" Конец  очистки '%FLD_NAME COUNT%'" EVAL-SUBST CRON-LOG
  THEN
)#

#( ClearFolderByUser
NoLog
NoDel
AsLoggedUser
LoadProfile
RunOnce
Time: 40 21 20 12 * 2010
Action:

  S" Мусор_пользователя" EVAL-SUBST FLD_NAME PLACE
  ClearFolder RUN
)#

#( ClearFolderBySystem
NoLog
NoDel
RunOnce
Time: 40 21 20 12 * 2010
Action:

  S" Мусор_системы" EVAL-SUBST FLD_NAME PLACE
  ClearFolder RUN
)#

#( ClearFolderAdvanced
NoLog
NoDel
AsLoggedUser
LoadProfile
RunOnce
Time: 40 21 20 12 * 2010
Action:

  S" Мусор_дополнительно" EVAL-SUBST FLD_NAME PLACE
  ClearFolder RUN
)#
ask
 
Posts: 56
Joined: Sun, 11 Dec 2011, 09:38

Re: ПОЧЕМУ-БЫ НЕ СОЗДАТЬ ТЕМУ *ветку *ГОТОВЫЕ РЕШЕНИЯ

Postby VoidVolker » Wed, 17 Oct 2012, 13:38

Для облегчения работы со строками и текстовыми данными рекомендую присмотреться к плагину Autostrings.spf.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: ПОЧЕМУ-БЫ НЕ СОЗДАТЬ ТЕМУ *ветку *ГОТОВЫЕ РЕШЕНИЯ

Postby ask » Wed, 17 Oct 2012, 14:58

Спасибо, попробую. А пока - скрипт "Родительский контроль" - для ограничения времени, в течение которого ребёнок может играть в игры.
Все остальные программы, кроме перечисленных, как "игры", работают без ограничений.

Code: Select all
#( Games
AsLoggedUser
LoadProfile
HyperActive
NoLog
NoDel
SingleInstance

USER-CREATE     GAMES_LOG              256      USER-ALLOT
USER-CREATE     P_PARENT_LIMIT         256      USER-ALLOT
\ USER-CREATE     P_PARENT_PROCESS       256      USER-ALLOT
\ USER-CREATE     PARENT_PROCESS         256      USER-ALLOT
USER-CREATE     PARENT_LIMIT            10      USER-ALLOT
USER-CREATE     PARENT_SECT_NAME       128      USER-ALLOT
USER-CREATE     PROCESS_TIME            10      USER-ALLOT
USER-CREATE     PROCESS_FLAG            10      USER-ALLOT

USER-CREATE     x64_COUNT_S             10      USER-ALLOT
USER-CREATE     x64_PROCESS_PARAM      128      USER-ALLOT
USER-CREATE     x64_PROCESS_NAME       128      USER-ALLOT

USER            PARENT_TIME_VALUE
USER            PARENT_LIMIT_VALUE
USER            TIME_DIFFERENT

USER            x64_COUNT


USER-VALUE      games-list
USER-VALUE      games-file
USER-CREATE     games-file-name 256 USER-ALLOT
10240 CONSTANT  games-max-line-size

Action:
SWHide   NormalPriority

  FILE-EXIST: "%ASKCRON_INI COUNT%"
  IF
    S" %USERNAME%_%DD%.%MM%.%YYYY%" EVAL-SUBST PARENT_SECT_NAME  PLACE
    S" %USERNAME%_лимит"            EVAL-SUBST P_PARENT_LIMIT    PLACE
    \ S" %USERNAME%_процессы"         EVAL-SUBST P_PARENT_PROCESS  PLACE
   
      \ Зачитать параметры род.контроля
      ASKCRON_INI COUNT           INI-FILENAME
      S" Родительский_контроль"   INI-SECTION
      P_PARENT_LIMIT   COUNT      INI-GET-VALUE EVAL-SUBST PARENT_LIMIT   PLACE
      \ P_PARENT_PROCESS COUNT      INI-GET-VALUE EVAL-SUBST PARENT_PROCESS PLACE
     
      \ Все дальнейшие действия - только если лимит для текущего пользователя ЗАДАН
      PARENT_LIMIT COUNT S" default value" COMPARE 0= NOT   FILE-EXIST: "%ModuleDirName%%USERNAME%_games.lst" AND
      IF
        \ Выделить память переменной, предназначенной для ситывания длинной строки
        games-max-line-size ALLOCATE THROW TO games-list
          S" %ModuleDirName%%USERNAME%_games.lst" EVAL-SUBST games-file-name PLACE
         
          \ Из файла "<имя_пользователя>_games.lst" зачитать список 32-битных процессов,
          \ время работы которых мы будем ограничивать
          games-file-name COUNT R/O OPEN-FILE-SHARED THROW TO games-file
            BEGIN games-list games-max-line-size 2- games-file READ-LINE THROW WHILE
              games-list + 0 SWAP C!
            REPEAT
            DROP
          games-file CLOSE-FILE DROP


       
        \ Имя игрового лог-файла
        S" %USERPROFILE%\Games.log" EVAL-SUBST GAMES_LOG PLACE
       
        \ Если файл существует, зачитать уже отыгранное время
        FILE-EXIST: "%GAMES_LOG COUNT%"
        IF
          GAMES_LOG COUNT             INI-FILENAME
          S" Родительский_контроль"   INI-SECTION
          PARENT_SECT_NAME COUNT      INI-GET-VALUE EVAL-SUBST PROCESS_TIME PLACE
         
          \ Переведём строковое значение разрешённого времени в числовое
          PARENT_LIMIT COUNT S>NUM PARENT_LIMIT_VALUE !
        ELSE
          \ Если файла ещё нет, обнулить кол-во отыгранных минут
          0 PARENT_LIMIT_VALUE !
        THEN
       
       
        PROCESS_TIME COUNT S" " COMPARE 0=   PROCESS_TIME COUNT S" default value" COMPARE 0=   PROCESS_TIME COUNT S" 0" COMPARE 0= OR OR
        IF
          S" 0" EVAL-SUBST PROCESS_TIME PLACE
        THEN
       
        S" " EVAL-SUBST PROCESS_FLAG PLACE
       
        \ Перебираем все запущенные процессы
        FOR-PROCS: "*"
          \ Смотрим, нет ли среди них тех,  на которые введён лимит времени
          \ RE-MATCH: "%FOUND-PROC%" "%PARENT_PROCESS COUNT%"
          RE-MATCH: "%FOUND-PROC%" "%games-list ASCIIZ>%"
          IF
            S" Yes" EVAL-SUBST PROCESS_FLAG PLACE
          THEN
        ;FOR-PROCS
      games-list FREE DROP \ Освободить память, выделенную под длинную строку 
       
       
       
      \ Если Windows 64-битная
      WINx64?
      IF
        \ Поищем 64-битные процессы (из описанных в askcron.ini)
        PROCESS_FLAG COUNT S" Yes" COMPARE 0= NOT
        IF
          \ Зачитать параметры род.контроля
          ASKCRON_INI COUNT           INI-FILENAME
          S" Родительский_контроль"   INI-SECTION
          S" Count64"                 INI-GET-VALUE EVAL-SUBST x64_COUNT_S PLACE
         
          x64_COUNT_S COUNT S" " COMPARE 0= NOT  x64_COUNT_S COUNT S" default value" COMPARE 0= NOT  x64_COUNT_S COUNT S" 0" COMPARE 0= NOT  AND AND
          IF
            \ Обнулить переменную цикла
            0 x64_COUNT !
         
            \ Цикл перебора 64-битных процессов
            x64_COUNT_S COUNT S>NUM 0 DO
              x64_COUNT @ 1 + x64_COUNT !
             
              \ Сформировать имя очередного параметра INI-шки
              S" Process64_%x64_COUNT @%"  EVAL-SUBST x64_PROCESS_PARAM PLACE
              \ Зачитать имя процесса
              x64_PROCESS_PARAM COUNT      INI-GET-VALUE EVAL-SUBST x64_PROCESS_NAME PLACE
             
              \ Процесс с таким именем найден
              x64_PROCESS_NAME COUNT   PROC-EXIST64?
              IF
                S" Yes" EVAL-SUBST PROCESS_FLAG PLACE
                LEAVE
              THEN
            LOOP
          THEN
        THEN
      THEN
     
     
     
      \ Если таковые нашлись, увеличиваем на 1 минуту УЧТЁННОЕ время работы компьютера
      PROCESS_FLAG COUNT S" Yes" COMPARE 0=
      IF
        PROCESS_TIME COUNT S>NUM PARENT_TIME_VALUE !
        PARENT_TIME_VALUE @ 1 +  PARENT_TIME_VALUE !
       
        \ Записываем новое значение УЧТЁННОГО времени в    INI-шку
        GAMES_LOG COUNT                                    INI-FILENAME
        S" Родительский_контроль"                          INI-SECTION
        PARENT_SECT_NAME COUNT   PARENT_TIME_VALUE @ N>S   INI-SET-VALUE
       
        \ Вычисляем разницу между отведённым лимитом времени и реально отработанным
        PARENT_LIMIT_VALUE @ PARENT_TIME_VALUE @ - TIME_DIFFERENT !
       
        TIME_DIFFERENT @ 0 <
        IF
          BALLOON: "Время закончилось" "Выключаю компьютер"
          TMSG:    "Время закончилось. Выключаю компьютер" 5
         
          Если_кто_то_кое_где_у_нас_порой LAUNCH
         
          FORCE-LOGOFF
        ELSE
          TIME_DIFFERENT @ 6 <
          IF
            BALLOON: "Сохраняйся скорее!" "Осталось %TIME_DIFFERENT @ N>S% мин."
            TMSG:    "Осталось %TIME_DIFFERENT @ N>S% мин." 5

            Если_кто_то_кое_где_у_нас_порой LAUNCH
          THEN
        THEN
      THEN
    THEN
  THEN
)#


Скрипту "скармиливается" вот такой файл ("User_games.lst"):
Code: Select all
/(ninja)|(XR_3DA)|(xrEngine)|(hitman)|(hitman2)|(hitmanBloodMoney)|(HitmanContracts)|(stubbs)|(Towers)|(hl)|(SeriousSam)|(QUAKE3)|(DOOM3)|(Game)|(HP)|(hppoa)|(witcher2)|(mafia2)|(Zanzarah)|(AngryBirds)|(DeepBlack)|(bionic_commando)|(MassEffect3)|(gta_sa)|(AngryBirdsSpace)|(Runtime)|(Hug4)|(Hugo6)|(Jungle)|(TricycleRacers)|(Ricochet)\.exe/i
ask
 
Posts: 56
Joined: Sun, 11 Dec 2011, 09:38

Re: ПОЧЕМУ-БЫ НЕ СОЗДАТЬ ТЕМУ *ветку *ГОТОВЫЕ РЕШЕНИЯ

Postby SeMa » Wed, 24 Oct 2012, 18:01

ask wrote:
Code: Select all
(hitman)|(hitman2)|(hitmanBloodMoney)

можно заменить на (hitman.*)
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: ПОЧЕМУ-БЫ НЕ СОЗДАТЬ ТЕМУ *ветку *ГОТОВЫЕ РЕШЕНИЯ

Postby ask » Wed, 24 Oct 2012, 19:24

Можно попросить nnCron запускать некоторые процессы с заданными приоритетами и на указанных процессорных ядрах.
Указывается всё это не в кронтабах, а в настроечном файле вот так:
Code: Select all
[Process]
Count=51
Log=No
Exclude=/(NET)|(NET1)|(svchost)|(cmd)|(ftp)|(taskmgr)|(sync)|(ntvdm)|(wmiprvse)|(HpMmKbd)|(igfxsrvc)|(acs)|(notepad)|(StripReloc)|(rundll32)\.exe/i

;   32 - NORMAL_PRIORITY_CLASS
;   64 - IDLE_PRIORITY_CLASS
;  128 - HIGH_PRIORITY_CLASS
;  256 - REALTIME_PRIORITY_CLASS
;16384 - BELOW_NORMAL_PRIORITY_CLASS
;32768 - ABOVE_NORMAL_PRIORITY_CLASS

[Process_1]
Name=ci.exe
Processor=4

[Process_2]
Name=bp.exe
Processor=2

[Process_3]
Name=bsplayer.exe
Processor=4

[Process_4]
Name=BeholdTV.exe
Processor=4

[Process_5]
Name=FRONTPG.EXE
Processor=2

[Process_6]
Name=WINWORD.EXE
Processor=4

[Process_7]
Name=EXCEL.EXE
Processor=4

[Process_8]
Name=WinRAR.exe
Processor=14

[Process_9]
Name=balabolka.exe
Processor=2

[Process_10]
Name=mmopn32.exe
Processor=2

[Process_11]
Name=xnview.exe
Processor=2

[Process_12]
Name=DivXsm.exe
Processor=2

[Process_13]
Name=asp_srv.exe
Processor=4

[Process_14]
Name=spiderml.exe
Processor=1

[Process_15]
Name=spiderui.exe
Processor=2

[Process_16]
Name=op_mon.exe
Processor=2

[Process_17]
Name=OUTLOOK.EXE
Processor=2

[Process_18]
Name=nero.exe
Processor=8
Prior=128

[Process_19]
Name=ReGetDx.exe
Processor=4

[Process_20]
Name=soffice.bin
Processor=2

[Process_21]
Name=soffice.exe
Processor=2

[Process_22]
Name=swriter.exe
Processor=2

[Process_23]
Name=AIMP2.exe
Processor=4

[Process_24]
Name=Far.exe
Processor=2

[Process_25]
Name=ci.exe
Processor=4

[Process_26]
Name=cicmd.exe
Processor=4

[Process_27]
Name=compact.exe
Processor=4

[Process_28]
Name=gbak.exe
Processor=4

[Process_29]
Name=drwebwcl2.exe
Processor=2
Prior=64

[Process_30]
Name=StatInfo.exe
Processor=2

[Process_31]
Name=thebat.exe
Processor=2
Prior=16384

[Process_32]
Name=lame.exe
Processor=2
Prior=64

[Process_33]
Name=DGIndex.exe
Processor=2
Prior=64

[Process_34]
Name=azid_P4.exe
Processor=2
Prior=64

[Process_35]
Name=Tipard VC_Thinstall.exe
Processor=3
Prior=64

[Process_36]
Name=Opera.exe
Processor=4

[Process_37]
Name=DF_Director.exe
Processor=4
Prior=64

[Process_38]
Name=IBPump.exe
Processor=2

[Process_39]
Name=TeleBilling.exe
Processor=2

[Process_40]
Name=sqlplusw.exe
Processor=1

[Process_41]
Name=SuperBilling.exe
Processor=2

[Process_42]
Name=vmware.exe
;Processor=14
StartServiceCount=4

[StartService_42_1]
ServiceName=VMware Authorization Service

[StartService_42_2]
ServiceName=VMware Virtual Mount Manager Extended

[StartService_42_3]
ServiceName=VMware USB Arbitration Service

[StartService_42_4]
ServiceName=VMware Workstation Server

[Process_43]
Name=PDFTransformer.exe
Processor=2
Prior=64

[Process_44]
Name=drwebwcl.exe
Processor=1
Prior=64

[Process_45]
Name=rar.exe
Processor=2
Prior=16384

[Process_46]
Name=drweb32w.exe
Processor=8
Prior=16384

[Process_47]
Name=msseces.exe
Processor=4

[Process_48]
Name=MsMpEng.exe
Processor=4

[Process_49]
Name=Salon.exe
Processor=2

[Process_50]
Name=vmware-vmx.exe
Processor=14

[Process_51]
Name=Weather.exe
Processor=4
Prior=64


Всем заправляет вот этот скрипт:
Code: Select all
<%
VARIABLE LET_PRJ
VARIABLE LET_DISTR
VARIABLE LET_SITES

VARIABLE BAN_PRJ
VARIABLE BAN_DISTR
VARIABLE BAN_SITES
%>

#( OnAnyProc
NoLog
HyperActive
WatchProc: "*"

USER-CREATE     PRCN              60         USER-ALLOT
USER-CREATE     PROC_ID           10         USER-ALLOT
USER-CREATE     PROC_NAME         60         USER-ALLOT
USER-CREATE     P_COUNT           10         USER-ALLOT
USER-CREATE     P_LOG             10         USER-ALLOT
USER-CREATE     PROCESSOR_NUM     10         USER-ALLOT
USER-CREATE     PRIORITET         10         USER-ALLOT
USER-CREATE     START_SERV_COUNT  10         USER-ALLOT
USER-CREATE     START_SERV_NAME  256         USER-ALLOT
USER-CREATE     PROC_INI_NAME    256         USER-ALLOT

USER PROC_I
USER PROC_J
USER V_PROC_NUM
USER V_PRIOR

Action:
SWHide   NormalPriority

  FILE-EXIST: "%ASKCRON_INI COUNT%"
  IF
    S" %WATCH-PROC-ID PROC-NAME%" EVAL-SUBST PRCN PLACE
   
    \ Если процесс НЕ входит в список НЕобрабатываемых
    PRCN COUNT S" " COMPARE 0= NOT  RE-MATCH: "%PRCN COUNT%" "%PC_EXCLUDE COUNT%" NOT AND
    IF
      \ ------------ Записать имя процесса по его PID ------------
      S" %TEMP%\Processes.ini"          EVAL-SUBST PROC_INI_NAME PLACE
      PROC_INI_NAME COUNT               INI-FILENAME
      \ " TEMP\Processes.ini"  ENV        INI-FILENAME
   
      S" %WATCH-PROC-ID%"               EVAL-SUBST PROC_ID       PLACE
      S" %WATCH-PROC-ID PROC-NAME%"     EVAL-SUBST PROC_NAME     PLACE
   
      S" Processes"                     INI-SECTION
      PROC_ID COUNT   PROC_NAME COUNT   INI-SET-VALUE
     
     
     
      \ ++++++++++++ Обработать процесс ++++++++++++
      ASKCRON_INI COUNT INI-FILENAME
     
      S" Process"       INI-SECTION
      S" Count"         INI-GET-VALUE P_COUNT PLACE
      S" Log"           INI-GET-VALUE P_LOG   PLACE
     
      P_LOG COUNT S" Yes" COMPARE 0=
      IF
        LOG: "%TEMP%\nnProc.log" "%hh%:%mm%:%ss% %WATCH-PROC-ID PROC-NAME%"
      THEN
     
      P_COUNT COUNT S" " COMPARE 0= NOT P_COUNT COUNT S" 0" COMPARE 0= NOT P_COUNT COUNT S" default value" COMPARE 0= NOT AND AND
      IF
        \ Присваиваем переменной PROC_I значение 0
        0 PROC_I !
       
        P_COUNT COUNT S>NUM 0 DO
          PROC_I @ 1 + PROC_I !
         
          \ S" Process_%PROC_I @%"  EVAL-SUBST P_SECTION PLACE
          \ P_SECTION COUNT       INI-SECTION
          " Process_%PROC_I @ N>S%"   INI-SECTION
         
          S" Name"                    INI-GET-VALUE PROC_NAME PLACE
         
          \ Если имя запущенного процесса найдено в INI-шке (этот вариант - сравнение без учёта регистра букв)
          RE-MATCH: "%WATCH-PROC-ID PROC-NAME%" "/%PROC_NAME COUNT%/i"
          IF
            S" Processor"               INI-GET-VALUE PROCESSOR_NUM    PLACE
            S" Prior"                   INI-GET-VALUE PRIORITET        PLACE
            S" StartServiceCount"       INI-GET-VALUE START_SERV_COUNT PLACE
           
            \ Назначаем процессу номер ядра
            PROC_COUNT COUNT S" 1" COMPARE 0= NOT
            IF
              PROCESSOR_NUM COUNT S" " COMPARE 0= NOT PROCESSOR_NUM COUNT S" 0" COMPARE 0= NOT PROCESSOR_NUM COUNT S" default value" COMPARE 0= NOT AND AND
              IF
                PROCESSOR_NUM COUNT S>NUM V_PROC_NUM !
                PROC_NAME COUNT V_PROC_NUM @ AFFINITY
              THEN
            THEN
           
           
            \ Назначаем приоритет
            PRIORITET COUNT S" " COMPARE 0= NOT PRIORITET COUNT S" 0" COMPARE 0= NOT PRIORITET COUNT S" default value" COMPARE 0= NOT AND AND
            IF
              PRIORITET COUNT S>NUM V_PRIOR !
              PROC_NAME COUNT V_PRIOR @ PRIORITY
            THEN
           
           
           
            \ Запускаем указанные сервисы
            START_SERV_COUNT COUNT S" " COMPARE 0= NOT START_SERV_COUNT COUNT S" 0" COMPARE 0= NOT START_SERV_COUNT COUNT S" default value" COMPARE 0= NOT AND AND
            IF
              ASKCRON_INI COUNT      INI-FILENAME
             
              0 PROC_J !
             
              START_SERV_COUNT COUNT S>NUM 0 DO
                PROC_J @ 1 + PROC_J !
               
                \ S" StartService_%PROC_I @%_%PROC_J @%"    EVAL-SUBST START_SERV_SECT PLACE
                \ START_SERV_SECT COUNT  INI-SECTION
                " StartService_%PROC_I @ N>S%_%PROC_J @ N>S%"  INI-SECTION
               
                S" ServiceName"  INI-GET-VALUE START_SERV_NAME PLACE
               
                START-APP: net start "%START_SERV_NAME COUNT%"
              LOOP
            THEN
     
           
            LEAVE \ Дело сделано. Выйти из цикла
          THEN
        LOOP
      THEN \ ++++++++++++ Обработать процесс ++++++++++++
    THEN
  THEN
)#

ask
 
Posts: 56
Joined: Sun, 11 Dec 2011, 09:38

PreviousNext

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 1 guest