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

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

Postby _Pavelik » Fri, 29 Dec 2006, 09:00

Короче иногда нужно знать который час когда в какуюнить игрушку заиграешься, и как всегда часов под рукой нет, а игрушку приходиться сворачивать что бы время посмотреть. Я нашел простой выход ... использовать встроенный динамик.
Code: Select all
##############################################################################
# Пищание встроенного динамика каждый час

#( CLASSIC-TASK-#-Beeper
\ NoActive
Time: 0 * * * * *
Action:
      Hour@                       
      CASE
        00 OF BEEP: 950 200 ENDOF

        03 OF BEEP: 950 200 ENDOF

        06 OF BEEP: 950 200 ENDOF

        09 OF BEEP: 950 200 ENDOF

        12 OF BEEP: 950 200 ENDOF

        15 OF BEEP: 950 200 ENDOF

        18 OF BEEP: 950 200 ENDOF

        21 OF BEEP: 950 200 ENDOF

        DUP OF BEEP: 450 2200 ENDOF
       
      ENDCASE
)#
_Pavelik
 
Posts: 8
Joined: Sun, 05 Nov 2006, 14:09

Postby _Pavelik » Fri, 29 Dec 2006, 09:20

Мне всегда хотелось что бы комп выключался сам, уходил в ждущий режим сам, при этом просиматривал что за проги запущены, либо дефрагментацию делал сам, и при этом вел логи. Посидев несколько часов за компом я родил вот это:

Code: Select all
<%
: raport.log S" D:\scripts\raport.log"; \ переменная, в которой лежит путь к журналу событий
VARIABLE SaveMonFlg   \ Бездействие системы более 10 мин. ведет к изменению этой переменной

VARIABLE Mon_flag  \ при вкл. юзером ждущего режима и после выхода из него,
              \ что предотвращает повторный запуск скрипта!
VARIABLE ProcExist
%>
#############################################################################################
#   Срабатывает при бездействии
#   системы более 10 мин.
#   Далее вырубает монитор.(not proc-exist: wmplayer.exe, setup.exe, mplayer.exe,La.exe)
#   5, 10, 25 (числа месяца) Запускает дефрагментацию.( запускается задача CLASSIC-TASK-#-defrag
#   при этом требуется установкак программы Diskeeper)
#   Выключает комп с 1:00 до 5:00.
#   Включает ждущий режим с 7:00 до 23:00 (not proc-exist: imapi.exe, , DefragNTFS.exe, sfc.exe, ezcddax.exe)
#   
   
#( CLASSIC-TASK-#-Power_saving
600 CONSTANT IdleTime
Rule:      
    IdleTime IDLE DUP 0=
    IF
         SaveMonFlg OFF        
    ProcExist OFF   
         RE-ALL: "LA.exe|wmplayer.exe|mplayerc.exe|setup.exe|winrar.exe" "(/\w+\.exe/)"
             PROC-EXIST: "%$1%"
          IF
               ProcExist ON
            THEN
         ;RE-ALL
    THEN
    ProcExist @ 0=
    AND
    SaveMonFlg @ 0=
    AND
    Mon_flag @ 0=  \ данную переменную меняют задачи: CLASSIC-TASK-#-On_suspend CLASSIC-TASK-#-On_exit_suspend
    AND
Action:
\  -----------------------------------
    SaveMonFlg ON
\ Вырубает монитор после 10 мин бездействия пользователя           
    MONITOR-LOW
 


    PROC-EXIST: imapi.exe 0=   
    PROC-EXIST: sfc.exe 0=
    AND
    PROC-EXIST: ezcddax.exe 0=
    AND
    IF   
\  ***********************************
\  -----------------------------------       
   FILE-EXIST: "%flag.tmp%" NOT       \  Выполняется только 5-го 15-го 25-го чисел любого месяца
   IF
      a OFF
   ELSE
      a ON      
   THEN
   
      Day@
      CASE
          5 OF a @ 0= IF CLASSIC-TASK-#-defrag RUN THEN ENDOF
         15 OF a @ 0= IF CLASSIC-TASK-#-defrag RUN THEN ENDOF
         25 OF a @ 0= IF CLASSIC-TASK-#-defrag RUN THEN ENDOF         
         DUP OF a @ IF FILE-DELETE: "%flag.tmp%" THEN ENDOF
      ENDCASE


PAUSE: 3000
\  -----------------------------------
\ Вырубает машину после полуночи
    Hour@ 1 >
    Hour@ 1 =
    OR
    Hour@ 7 <                    
    AND
    PROC-EXIST: DfrgNTFS.exe 0=
    AND   
    IF

        LOG: "%raport.log%" "Комп выключен в: %hh%:%mm% %DD%.%MM%.%YY%"
      FORCE-POWEROFF
    ELSE

\ Врубает ждущий режим время:7-23ч.
      
      Hour@ 23 <
      Hour@ 7 >
      AND      
                PROC-EXIST: DfrgNTFS.exe 0=
           AND   
      IF
            LOG: "%raport.log%" "Ждущий режим влючен автоматически в: %hh%:%mm% %DD%.%MM%.%YY%"
\            POWER-FORCE
            POWER-SUSPEND
         
                THEN
    THEN
\  -----------------------------------
\  ***********************************
    THEN   \ Если есть след из количества процессов: imapi.exe sfc.exe ezcddax.exe
)#

##############################################################################
# Дополняет скрипт CLASSIC-TASK-#-Power_saving
# Меняет значение переменной так что бы скипт не сработал
# когда машина будет введена в ждущий режим пользователем, то есть переменная Mon_flag
# принимает значение TRUE что в свою очередб запрещает запуск
# скрипта CLASSIC-TASK-#-Power_saving

#( CLASSIC-TASK-#-On_suspend
NoActive
WatchSuspend
Action:
   Mon_flag ON
)#
##############################################################################
# Дополняет скрипт CLASSIC-TASK-#-Power_saving
# При выходе из ждущего режима значение переменной меняется,
# что бы дать возможность скрипту  запускаться самому, то есть значение FALSE

#( CLASSIC-TASK-#-On_exit_suspend
NoActive
Time: START-TIME
Also
WatchResume
Action:
   PAUSE: 20000
   Mon_flag OFF
)#

Можь кому-нить пригодиться
_Pavelik
 
Posts: 8
Joined: Sun, 05 Nov 2006, 14:09

Postby EridaN » Fri, 29 Dec 2006, 18:24

Нужная тема.
User avatar
EridaN
 
Posts: 4
Joined: Wed, 16 Nov 2005, 15:18

Postby VladimirK » Sat, 30 Dec 2006, 11:28

Задача "Расширение буфера обмена".
Автор Dmitry Gaivoronsky. Я учавствовал в отладке.
Работает в оконных редакторах (notepad, synpad, ...).
:!: В редакторе ФАР'а работает не верно.

Code: Select all
#( ManyBuffers
\ Расширение буфера обмена
\ добавляется 10 дополнительных буферов
\ Ctrl+Alt+N - запомнить выделенное в приложении в буфер N
\ Alt+N      - вставить в приложение (где N = 1,2,3,4,5,6,7,8,9,0 на цифровой
\              клавиатуре).

: ?GFREE   ?DUP IF GLOBAL FREE LOCAL THROW THEN ;
: GALLOC   GLOBAL ALLOCATE LOCAL THROW ;

: vtWATCH@ ( -- w )  vTask DUP IF vtWATCH @ THEN ;
: wVK@      ( -- par )  vtWATCH@ DUP IF WATCH-PAR1 @ THEN ;
: wMod@     ( -- par )  vtWATCH@ DUP IF WATCH-PAR2 @ THEN ;

VARIABLE cb-saved_a
VARIABLE cb-saved_u
VARIABLE vkinp            \ код введенной клавиши
VARIABLE teknode

0                      \ структура для каждого добавочного клипборда:
  1 CELLS -- hotkeyVK  \   код хоткей-клавиши
  1 CELLS -- mhotkey   \   мнемоника клавиши (для вывода в справке задачи OpisBuffers)
  1 CELLS -- clip_a    \   адрес буфера
  1 CELLS -- clip_u    \   длина буфера
CONSTANT /ClipRec      \ длина получившейся структуры

VARIABLE ClipList      \ список всех добавочных клипбордов

: S+/RUN { a1 u1 a2 u2 \ t -- }       \ сложить две строки и исполнить
  a1 u1 a2 u2 S+  ( -- a u )  OVER -> t   EVALUATE   t FREE THROW   ;

: AddClip  { hkey_a hkey_u \ curnode -- }
  /ClipRec GALLOC   TO curnode               \ создасм структуру для клипборда
  curnode ClipList AddNode                   \ цепляем ес к списку
  hkey_a hkey_u S>ZALLOC                     \ мнемонику в нуль-строку
  curnode mhotkey !                          \ адрес сохраняем в структуре
  hkey_a hkey_u get-hot-key NIP    ( -- VK ) \ вычисляем код кнопки
  curnode hotkeyVK !                         \ сохраняем его в структуре
  \     навешиваем watch'и
  S" WatchHotKey: ^@"  hkey_a hkey_u  S+/RUN    \ watch для сохр.
  S" WatchHotKey:  @"  hkey_a hkey_u  S+/RUN    \ watch для извл.
;
: AddClip:  get-string AddClip  ; IMMEDIATE   \ делаем из постфикса префикс

\ поехали!
AddClip: {NUMPAD0}
AddClip: {NUMPAD1}
AddClip: {NUMPAD2}
AddClip: {NUMPAD3}
AddClip: {NUMPAD4}
AddClip: {NUMPAD5}
AddClip: {NUMPAD6}
AddClip: {NUMPAD7}
AddClip: {NUMPAD8}
AddClip: {NUMPAD9}

Action:
  vtWATCH@ 0= IF      \ watch'а не было, выходим
    THINT: "Manybuffers: ручной запуск отклонсн" 5
    EXIT
  THEN

  wVK@  vkinp !

  \ запоминаем первоначальное соделжимое буфера
  CLIPBOARD DUP cb-saved_u !
  DUP ALLOCATE THROW DUP cb-saved_a ! SWAP MOVE

  wMod@ 3 = IF  \ Ctrl+Alt+Hotkey, сохраняем данные в соотв. клипборд

    300 PAUSE

    \ заполняем буфер внешними данными
    SEND-KEYS: "^(c)"

    \ выясняем какой WatchHotKey сработал
    [NONAME
      NodeValue teknode !         \ запоминаем знчение NodeValue (текущий адрес структуры)
      teknode @ hotkeyVK @  vkinp @ - 0=
      IF    \ нашел
        \ === запоминаем новое содержимое буфера ===                    \ стек:
        teknode @ clip_a @  ?GFREE   \ освободили старый участок памяти    --
        CLIPBOARD                   \ взяли клипборд                      -- a u
        DUP teknode @ clip_u !      \ запомнили его размер                -- a u
        DUP GLOBAL ALLOCATE LOCAL THROW  \ выделили новый участок памяти  -- a u a2
        DUP teknode @ clip_a !      \ запомнили его адрес                 -- a u a2
        SWAP MOVE                   \ перенесли туда содержимое клипборда --
         
        DoListEXIT
      THEN

    NONAME]  ClipList DoList

  THEN

  wMod@ 1 = IF  \ Alt+Hotkey, извлекаем данные из соотв. клипборда

    \ выясняем какой WatchHotKey сработал
    [NONAME
      NodeValue teknode !
      teknode @ hotkeyVK @  vkinp @ - 0=
      IF        \ Нашел
        \ заносим в буфер ранее запомненное значение
        teknode @ clip_a @ teknode @ clip_u @ CLIPBOARD!
         
        DoListEXIT
      THEN
    NONAME]  ClipList DoList

      300 PAUSE

    \ записываем буфер во вне
    SEND-KEYS: "^v"

  THEN

  \ восстанавливаем первоначальное содержимое буфера
  cb-saved_a @ cb-saved_u @ TO CLIPBOARD
  cb-saved_a @ FREE THROW    \ для надежности

)#

#( OpisBuffers
\ справка на экран о содержимом дополнительных буферов обмена

VARIABLE saved_a    \ для запом.адреса
VARIABLE saved_u    \ для запом.длины строки
VARIABLE tek_tmp

  WatchHotKey: "^@(s)"
Action:
    \ формируем перечень содержимого буферов
    S" "   \ создали пустую строку
    saved_u !  \ запоминаем длину суммарной строки
    saved_a !  \ запом. адрес начала суммарной строки

    [NONAME
      NodeValue tek_tmp !
      tek_tmp @ mhotkey @ ASCIIZ>              \ мнемоника клавиши
      S"  - "     \ разделитель
      tek_tmp @ clip_a @ tek_tmp @ clip_u @ 20 MIN   \ содержимое буфера (20 симв.)
      S" %crlf%" EVAL-SUBST     \ перевод строки
      saved_a @  saved_u @       \ накопительная строка
      S+ S+ S+ S+                      \ накапливаем
      saved_u !  saved_a !       \ запоминаем
    NONAME]  ClipList DoList

    MSG: "%saved_a @  saved_u @%"
)#
VladimirK
 
Posts: 1
Joined: Fri, 29 Dec 2006, 16:11

Postby Dark_Jones » Tue, 02 Jan 2007, 22:58

VladimirK wrote:Задача "Расширение буфера обмена".
Автор Dmitry Gaivoronsky. Я учавствовал в отладке.
Работает в оконных редакторах (notepad, synpad, ...).
:!: В редакторе ФАР'а работает не верно.


Что-то некорректно работает. Выделил участок текста и понажимал Ctrl+Alt+NUM-цифры, выскочила ошибка:

00:40:58 3908 TASK: ManyBuffers
00:41:01 2232 ManyBuffers: Внутренняя ошибка. Параметр задан неверно.

И при просмотре содержимого буферов пишется (копировал только в 4ый буфер):

{NUMPAD3}-
{NUMPAD4}-#(ManyBuffers)
|P
{NUMPAD5}-
Dark_Jones
 
Posts: 414
Joined: Thu, 09 Nov 2006, 00:43
Location: Russia, S.Peterburg

Postby Fornit » Thu, 04 Jan 2007, 05:19

Господа-товарищи, помогите мне с переводом миллисекунд в нормальное время, очень прошу!

GetIdleTime дает кол-во миллисекунд, как его в лог записать в стандартном формате hh:mm:ss?

Объясните, почему это не работает:
Code: Select all
<%
: Ticks2Time ( ms -- hr min sec sec-total ) 1000 /MOD SWAP 500 > IF 1+ THEN
DUP 3600 > IF DUP 3600 /MOD SWAP ROT SWAP ELSE 0 SWAP DUP THEN 60 /MOD SWAP
ROT ;
%>


#( TestIdleTime
Time: * * * * * *
Action:
   LOG: "C:\idle.txt" "%DD%/%MM%/%YY% %hh%:%mm% Idle time is %GetIdleTime
Ticks2Time%"
)#


Как размер файла вывести в лог?

Code: Select all
#( ttt2
Action:
  LOG: "C:\le.txt" "%FILE-SIZE: "C:\pagefile.sys"%"
)#


Не работает!

P.S. Допер:

Code: Select all
#( ttt2
Action:
  FILE-SIZE: "C:\hiberfil.sys" fsize 2!
  LOG: "C:\le.txt" "%size 2@ <# #S #>%"
)#
User avatar
Fornit
 
Posts: 32
Joined: Fri, 28 Apr 2006, 22:04

Postby mSX » Sat, 13 Jan 2007, 17:21

Вот написал скриптец для получения списка новых файлов из папки на FTP сервере, мот кому пригодится или какие-нибудь дополнения появятся.

Code: Select all
#( test

: freeFileList { addr -- } \ чистит список
  addr DUP @
  BEGIN ?DUP WHILE \ для всего списка выполняем выполняем очистку
    DUP @ SWAP
    DUP NodeValue FREE THROW \ очистка данных записи
    FREE THROW \ очистка самой записи
  REPEAT
  FREE THROW \ очистка списка
;

: readFileToFileList { filePath readBufferSize xacceptAddr \ listFile readBuffer -- addr } \ прочитать каждую строку файла в список, если она удовлетворяет условию; на вершине - адрес списка
  CELL ALLOCATE THROW >R \ выделить память под список и положить адрес на вершину стека возвратов
  readBufferSize ALLOCATE THROW TO readBuffer \ выделить память для чтения
  filePath ASCIIZ> R/O OPEN-FILE-SHARED THROW TO listFile \ открыть файл
  BEGIN
    readBuffer readBufferSize 2- listFile READ-LINE THROW
  WHILE
    \ На стеке осталось число прочитанных символов.
    \ Прибавляем его к адресу зарезервированной памяти и дописываем 0,
    \ чтобы получить zero-terminated string
    readBuffer + 0 SWAP C!
    \ Проверяем совпадения и выбираем только нужные строки
    readBuffer xacceptAddr EXECUTE
    IF
      \ копируем буфер и добавляем строку его в список
      readBuffer ASCIIZ> S>ZALLOC R@ AddNode
    THEN
  REPEAT
  DROP \ Чистим стек
  listFile CLOSE-FILE DROP \ Закрываем файл
  listFile FREE DROP \ Чистим файловую переменную
  readBuffer FREE THROW \ Чистим буфер для чтения
  R> \ Ложим список на вершину стека
;

: writeFileListToFile { filePath list -- } \ записывает список в файл
  filePath ASCIIZ> FCREATE \ создаем файл
  list
  BEGIN \ для всего списка выполняем запись его елементов в файл
    @ ?DUP
  WHILE
    DUP NodeValue ASCIIZ> filePath ASCIIZ> FAPPEND \ пишем елемент списка в файл
    S" %crlf%" EVAL-SUBST filePath ASCIIZ> FAPPEND \ добавляем перевод строки
  REPEAT
;

: getAddedNodes { lhsList rhsList nodesMatchCondition \ valueExists -- newList } \ ищет в rhsList записи, которых нет в lhsList по условию
  CELL ALLOCATE THROW >R \ выделяем память для результирующего списка на вершине стека возвратов
  rhsList \ ложим список, в котором могут быть новые записи на вершину стека
  BEGIN @ ?DUP WHILE \ начинаем по нему итерировать
    DUP NodeValue >R \ ложим значение текущей записи из rhsList на вершину стека возвратов
    lhsList \ ложим список, в котором будем смотреть на вершину стека
    FALSE TO valueExists \ ставим флаг, что элемент не найден
    BEGIN \ начинаем итерировать по lhsList, пока список не закончился или елемент не будет найден
   @ DUP \ получаем и дублируем текущий элемент из lhsList
        valueExists DUP \ смотрим найден ли элемент
   IF \ если найден, то
     \ удаляем текущий элемент из lhsList, ставим отрицание для valueExists
     \ и применяем оператор AND к текущему элементу из lhsList и valueExists
     NIP NOT AND
   ELSE \ если не найден
     DROP \ удаляем valueExists
     DUP NOT \ проверяем не нулевой ли текущий элемент из lhsList, и
     IF \ если текущий элемент из lhsList нулевой, то
       DROP \ удаляем его
     THEN
   THEN
    WHILE
      \ производим сравнение текущих елементов lshList и rhsList
      DUP NodeValue R@ SWAP nodesMatchCondition EXECUTE TO valueExists \ результат сравнения записываем в valueExists
    REPEAT
    valueExists NOT \ проверяем, есть ли в двух списках одинаковые элементы
    IF \ если елемент не найден в lhsList, то он - новый
      2R@ SWAP AddNode \ и мы добавляем его в результирующий список
    THEN
    RDROP \ удаляем текущий эл-т rhsList
  REPEAT
  R> \ возвращаем список новых элементов
;

: getDeletedNodes { lhsList rhsList nodesMatchCondition -- newList }
  rhsList lhsList nodesMatchCondition getAddedNodes
;

10240 CONSTANT MAX_FILE_LINE_LENGTH \ максимальный размер строки файла;
: getLinkListByPath { linkPath ftpUser ftpPwd pathToWget acceptLineCondition -- list x } \ на вершине стека TRUE, если произошла ошибка
  pathToWget ASCIIZ> EXIST? NOT \ проверяем правильно ли задан путь к wget-у
  IF \ если нет
    TRUE \ возвращаем TRUE, чтобы проверить ошибку
  ELSE \ если wget найден
    SWHide NormalPriority \ запускаем скрытым
    linkPath ASCIIZ> ftpPwd ASCIIZ> ftpUser ASCIIZ> pathToWget ASCIIZ> \ ложим все на стек
    S" %QUOTE%%1 esPICKS%%QUOTE% --ftp-user=%3 esPICKS% --ftp-password=%5 esPICKS% --output-file=%QUOTE%%FOLDER-TEMP%\%TempFile%%QUOTE% --spider -r -nd -nv %QUOTE%%7 esPICKS%%QUOTE%" EVAL-SUBST START-APPW \ ждем завершения после старта
    S" %FOLDER-TEMP%\%PrevTempFile%" EVAL-SUBST EXIST? \ проверим, создал ли wget список ссылок
    IF \ если файл создан
      S" %FOLDER-TEMP%\%PrevTempFile%" EVAL-SUBST DROP MAX_FILE_LINE_LENGTH acceptLineCondition readFileToFileList \ читаем его в список
      S" %FOLDER-TEMP%\%PrevTempFile%" EVAL-SUBST DELETE-FILE DROP \ после чего удаляем файл
      FALSE \ и возвращаем FALSE
    ELSE
      TRUE \ если файл не создан - возвращаем TRUE
    THEN
  THEN
;

\ $1 - полный путь к файлу; $3 - размер файла; $4 - название файла
S" /(ftp://\S*(.*%QUOTE%.listing%QUOTE%)?!).*\[(\d+)\].*%QUOTE%(.*)%QUOTE%/" EVAL-SUBST DROP CONSTANT ACCEPTED_FILE_LINE_REGEXP
: lineValuesMatch { lhsValue rhsValue -- match } \ сравнивает части заданных строк (полные пути к файлу) - на стеке TRUE или FALSE
  lhsValue ASCIIZ> ACCEPTED_FILE_LINE_REGEXP ASCIIZ> RE-MATCH \ вычисляем первое рег. выражение
  IF \ если строка ему удовлетворяет, то
    S" %$1%" EVAL-SUBST \ заносим первый полный путь к файлу в стек
    rhsValue ASCIIZ> ACCEPTED_FILE_LINE_REGEXP ASCIIZ> RE-MATCH \ и вычисляем второе рег. выр-е
    IF \ если др. строка удовлетворяет второму рег. выр-ю
      S" %$1%" EVAL-SUBST \ заносим второй полный путь к файлу в стек
      COMPARE 0 = \ и сравниваем две строки на совпадение
    ELSE
      2DROP FALSE \ если др. строка не удовлетворяет второму рег. выр-ю, то удаляем первую строку и заносим в стек FALSE
    THEN
  ELSE
    FALSE \ если первая строка не удовлетворяет первому рег. выр-ю, то возвращаем FALSE
  THEN
;

: acceptFileLine { strAddr -- match } \ проверяет, подходит ли нам строка
  strAddr ASCIIZ> ACCEPTED_FILE_LINE_REGEXP ASCIIZ> RE-MATCH
;

: newFilesMessageBox { list -- } \ выводит диалог о доступности новых файлов
  \ выводим сообщение о доступности новых файлов
  262212 S" Доступны новые файлы!" DROP S" Доступны новые файлы.%crlf%Хотите их посмотреть?" EVAL-SUBST DROP 0 MessageBoxA
  6 = \ проверяем была ли нажата кнопка "yes"
  IF \ если да, то
    S" %FOLDER-TEMP%\%TempFile%" EVAL-SUBST DROP list writeFileListToFile \ пишем список добавленных файлов во временный файл
    ShowNormal NormalPriority
    S" notepad %FOLDER-TEMP%\%PrevTempFile%" EVAL-SUBST START-APPW \ отображаем его и ждем пока пользователь не закроет окно
    S" %FOLDER-TEMP%\%PrevTempFile%" EVAL-SUBST DELETE-FILE DROP \ после закрытия окна удаляем временный файл
  THEN
;

: processFtp { linkPath ftpUser ftpPwd pathToWget acceptLineCondition valuesMatch oldFtpFilePath -- } \ обработка заданного ftp адреса
  linkPath ftpUser ftpPwd pathToWget acceptLineCondition getLinkListByPath THROW >R \ получаем новый список файлов в список, который будет на вершине стека возвратов
  R@ @ \ начинаем проверку на пустоту нового списка
  IF \ если новый список не пуст
    oldFtpFilePath ASCIIZ> EXIST? \ проверяем, есть ли файл со старым списком
    IF \ если файл со старым списком есть
      oldFtpFilePath MAX_FILE_LINE_LENGTH acceptLineCondition readFileToFileList \ читаем файл со старым списком в список
      DUP R@ valuesMatch getAddedNodes >R \ получаем список добавленных файлов
      R@ @ \ начинаем проверку, не пуст ли список добавленных файлов
      IF \ если список добавленных файлов не пуст
   2R@ DROP oldFtpFilePath SWAP writeFileListToFile \ записываем новый список заместо старого списка
        R@ newFilesMessageBox \ показываем диалог о доступности новых файлов
      THEN
      R> freeFileList \ удаляем список добавленных файлов
      freeFileList \ удаляем список со старыми файлами
    ELSE \ если файла со старым списком нет, то
      oldFtpFilePath R@ writeFileListToFile \ создаем и пишем в него список добавленных файлов
      R@ newFilesMessageBox \ показываем диалог о доступности новых файлов
    THEN
  THEN
  R> freeFileList \ удаляем список с новыми файлами
;

NoActive

Action:

Z" ftp://10.162.3.55/Films/2005/"
Z" anonymous"
Z" abc@def.ghi"
Z" H:\soft\Internet\Downloaders\Wget for Win 1.10.2\wget.exe"
['] acceptFileLine
['] lineValuesMatch
Z" E:\10.162.3.55.txt"
processFtp

)#
mSX
 
Posts: 2
Joined: Sat, 13 Jan 2007, 17:10

Postby mSX » Sun, 14 Jan 2007, 01:05

Похоже какой-то баг с EVAL-SUBST или я что-то не понимаю.
В слове writeFileListToFile заместо
Code: Select all
S" %crlf%" EVAL-SUBST filePath ASCIIZ> FAPPEND

следует использовать
Code: Select all
crlf filePath ASCIIZ> FAPPEND

иначе в файл будет писаться не вся информация, у меня например писалось около 20 Kb, даже, если файл должен был быть около 2 Mb.
mSX
 
Posts: 2
Joined: Sat, 13 Jan 2007, 17:10

создайте скрипт

Postby leomaks » Mon, 22 Jan 2007, 11:18

ОЧЕНЬ надо скрипт:

при потере bluetooth устройства (nokia pc suite во всплывающем окне говорит что устройство отключено) блокировать комп.
а при его нахождении/подключении - разблокировать комп (введя пароль)

или
как проследить появление всплывающего окна с определенным тесктом
leomaks
 
Posts: 9
Joined: Wed, 07 Dec 2005, 10:20

Postby Fornit » Wed, 24 Jan 2007, 04:51

А кто может написать такой скрипт?
По горячей клавише в текущем каталоге записать в файл имена всех файлов с расширениями avi, ogm, mkv, а после имени каждого файла записать OK или ERROR в зависимости от результатов проверки на CRC, которое написано в самом имени файла в скобках (круглых или квадратных). Если CRC нет, написать прочерк.
User avatar
Fornit
 
Posts: 32
Joined: Fri, 28 Apr 2006, 22:04

Postby VoidVolker » Wed, 24 Jan 2007, 20:19

leomaks Fornit
Флудим?!:evil: Ветка называется "Готовые решения", а не "Решение проблем". Fornit - легко, но только в отдельную тему.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Postby VoidVolker » Fri, 02 Mar 2007, 22:44

Че-то не постит никто ниче интересного... Ну да ладно - сам запостю. 8) Набросал вот новое слово SEND-STRING - отпраляет активному окну буквы, цифры, символы, печатает в общем, но независимо от раскладки клавиатуры, так что теперь можно больше об о раскладке не думать и печать строки со всеми символами и как русскими так и англицкими буквами.
Добавляем в свободное место в кронтабе вот этот код:
Code: Select all
<%
\ Жмет нампад-цифру
: xnkdu DUP specKeyDN specKeyUP ;   ( x+96 -- )

\ Жмет нампад-цифру по ANSCII коду цифры по адресу addr
: ankdu  C@ 48 + xnkdu ;   ( addr -- )

\ Печатает одиночный символ
: SEND-SMB   { \ a -- }   ( хxx -- )
18 specKeyDN
96 xnkdu  N>S  SWAP TO a  0 DO  a I + ankdu  LOOP
18 specKeyUP
;

\ Печатает кавычки
: SND-QUOTE 18 specKeyDN 96 xnkdu 96 xnkdu 99 xnkdu 100 xnkdu  18 specKeyUP ;

\ Берет со стека строку символов и отправляет эти символы активному окну независимо от раскладки клавиатуры
\ Здесь используется одна не очень широко известная возможность винды:
\ зажав альт и набирая на нампаде код символа - активное окно получит этот символ,
\ как если бы на клавиатуре была нажата соответствующая кнопка :)
\ Является универсальным за счет использования локальных переменных, длина строки не ограничена
: SEND-STRING { a u -- }
u 0 DO  a I + C@ SEND-SMB  LOOP
;
%>


Применять так:
Code: Select all
#( TEST-SND-STR
NoActive
Action:
S" notepad.exe" START-APP
1500 PAUSE
SND-QUOTE
S" Мульти-Test отправки символов • ±°•·¤¬¶§~!№;%:?*()-_+=&^$#@ ;)" SEND-STRING 
SND-QUOTE
)#

Как говорится - наслаждайся. :D
Last edited by VoidVolker on Mon, 26 Mar 2007, 20:55, edited 3 times in total.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Postby VoidVolker » Fri, 16 Mar 2007, 22:54

Вот еще пару таксов из области "мелочи програмиста" :D .
Здесь главное не реализация, а сама идея.
Часто нужно активировать/деактивировать кучу тасков слежения(процессорное время все-таки не резиновое), но у меня при попытке активации/деактивации более одного таска, они фактически продолжают не работать/работать, вот я и подумал - а что мешает активировать/деактивировать кронтаб?
Работает так: создаем нужное количество кронтабов, и просто нумеруем их начиная с 1 ( nncron1.tab, nncron2.tab ... и т.д.), указываем в первой строчке номер кронтаба после решетки и одного пробела: # 1 , # 2 . Затем помещаем туда группы задач слежения, а в кронтаб nncron0.tab кидаем задачи слежения активные по-умолчанию, если таковые имеются - иначе его оставляем пустым и подключаем кронтаб nncron0.tab в настройках.
Теперь в любой момент можно подключить другой кронтаб словом x ACT-TAB , где х - номер кронтаба

Code: Select all
<%
\ Для 9 кронтабов
: TabID
PAD 3 S" nncron0.tab" FREAD DROP 2+ 1
;

\ Для 99 кронтабов
\ однозначный номер в кронтабе указывать так: # 01 , # 02 , # 03 ... # 09
\ : TabID
\ PAD 4 S" nncron0.tab" FREAD DROP 2+ 2 S>NUM N>S
\ ;

: Deact-Tab0
S" nncron0.tab" S" nncron" TabID S+ S" .tab" S+ FRENAME
;

\ Активирует кронтаб под номером x
: ACT-TAB   ( x -- )
Deact-Tab0
S" nncron" ROT N>S S+ S" .tab" S+ S" nncron0.tab" FRENAME
reload-crontab
;
%>

Вот этот таск печатает в консоли WORDS-LIKE "выделенный текст"
Т.е. просто выделяем слово, жмем хот-кей - и видим результат работы WORDS-LIKE
Code: Select all
<%
: WcopySTR
0 1 69 162 keybd_event DROP
0 1 69 67 keybd_event DROP
0 3 69 67 keybd_event DROP
0 3 69 162 keybd_event DROP
;

: WpastSTR
0 1 69 162 keybd_event DROP
0 1 69 86 keybd_event DROP
0 3 69 86 keybd_event DROP
0 3 69 162 keybd_event DROP
;
%>

#( FIND-Word
\  NoActive
WatchHotKey: "{F1}"
Action:
WcopySTR
S" nnCron console*" WIN-ACTIVATE
\  S" tm.exe -ini nncron.ini  Console localhost 2002" START-APP
100 PAUSE
S" WORDS-LIKE " CLIPBOARD S+ SEND-STRING
S" {ENTER}" SEND-KEYS
)#


Возвращает код выделеного символа, или фрагмента текста - через пробел.
Code: Select all
#( ReturnSmbCode
\  NoActive
WatchHotKey: "{F2}"
VARIABLE clpaddr
Action:
WcopySTR
S" " S"  "
CLIPBOARD SWAP clpaddr ! 0 DO
clpaddr @ I + C@ N>S S+ S"  " S+
LOOP
BALLOON
)#
Last edited by VoidVolker on Tue, 20 Mar 2007, 12:06, edited 2 times in total.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Postby VoidVolker » Tue, 20 Mar 2007, 02:08

Фот еще одна маленькая фишка:
Code: Select all
\ Регистрация в реестре нового расширения - .FEX
\ Теперь при клике на файле .FEX будет выполнятся содержимое этого файла от имени текущего залогиненого пользователя, файл должен содержать слово main ( : main ... ..полезный код.. ... ; )
: Reg.FEX
S" HKEY_CLASSES_ROOT\.fex\@"  S" ForthEXecute" REG-SZ
S" HKEY_CLASSES_ROOT\ForthEXecute\@"  S" Forth script EXecute" REG-SZ
S" HKEY_CLASSES_ROOT\ForthEXecute\DefaultIcon\@"  S" shell32.dll,217" REG-SZ
S" HKEY_CLASSES_ROOT\ForthEXecute\shell\open\command\@" QUOTE ModuleDirName S+ S" nncron.exe" S+ QUOTE S+ S"  -wp -runfile " S+ QUOTE S+ S" %1" S+ QUOTE S+ REG-SZ
S" HKEY_CLASSES_ROOT\ForthEXecute\shell\edit\command\@" QUOTE
Editor @ ASCIIZ>      \ Путь к редактору, по умолчанию - значение  Editor: "filename"  файла nncron.ini
S+ QUOTE S+ S"  " S+ QUOTE S+ S" %1" S+ QUOTE S+ REG-SZ
;
: DelReg.FEX
S" HKEY_CLASSES_ROOT\.fex" REG-DELETE-KEY
S" HKEY_CLASSES_ROOT\ForthEXecute" REG-DELETE-KEY
;

: RUNF ( a u -- )      \ Запускает файл на исполнение, файл должен содержать слово main ( : main ... ..полезный код.. ... ; )
S" nncron.exe -wp -runfile " 2SWAP S+ START-APP   \  -wp Не подгружать плагины при запуске, что значительно сокращает время старта
;

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

Postby VoidVolker » Sat, 24 Mar 2007, 12:41

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

PreviousNext

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: Bing [Bot] and 1 guest