Ru-Board.club
← Вернуться в раздел «Программы»

» nnCron-Планировщик с поддержкой скриптового языка

Автор: Stygis
Дата сообщения: 28.06.2006 15:31
OOD
nnCron-> Доп.информация-> Неотложная помощь по Форту-> Как организовать несложный файловый ввод/вывод? и А какие еще есть "пpодвинутые" сpедства pаботы со стpоками?
А потом что-нить типа

Код: CREATE strTest 256 ALLOT
S" <найденный текст>" strTest PLACE
WatchFile: "test.exe -k %strTest COUNT%"
Автор: OOD
Дата сообщения: 28.06.2006 16:08
Stygis
Ну вот читает по строчно без проблем:
а вот как найти именно, то что нужно?! или же из всего проверенного циклом сравнить через уловие:

Код:
#( reed
NoActive
Action:
VARIABLE list-file
CREATE list-contents 258 ALLOT
Action:
S" test.txt" R/O OPEN-FILE-SHARED THROW list-file !
BEGIN list-contents 1+ 255 list-file @ READ-LINE THROW WHILE
list-contents C!
MSG: "%list-contents COUNT%"
REPEAT
DROP
list-file @ CLOSE-FILE DROP
)#
Автор: Stygis
Дата сообщения: 28.06.2006 18:04
OOD
Я же сказал:
nnCron-> Доп.информация-> Неотложная помощь по Форту-> А какие еще есть "пpодвинутые" сpедства pаботы со стpоками? Там есть функция поиска подстроки
Автор: unreal666
Дата сообщения: 28.06.2006 19:21
Stygis
Как уничтожить созданные переменные и массивы? А то лень искать в справке, сейчас другое пытаюсь сделать.
Автор: Stygis
Дата сообщения: 28.06.2006 23:00
unreal666
Фих знает.... Не нашел. Ни в справке, ни в словарике SPF'а. Есть ERASE ( addr u -- ), но это забивает память нулями.
Не пробовал проверять - при завершении задачи переменная сама не удаляется?
Автор: magnetics
Дата сообщения: 30.06.2006 09:29
Подскажите пожалуйста
как сделать чтобы nnCron при появлении файлов в определенной папке
запускал соответствующую программу и открывал в ней эти файлы
Сейчас у меня программа запускается а вот файлы не открывает

Настроенно так: Время - по событию
При изменении каталога
Действие - Запустить приложение или открыть документ
Путь к приложению указан
Может что то надо в строку Параметры написать?
Автор: Stygis
Дата сообщения: 30.06.2006 10:37
magnetics
А что за файлы? Если какой-нить doc, то можно, наверное, попробовать в действии указать не путь к приложению, а путь к файлу....
Или попробовать указать путь к приложению - "<ля-ля-ля\ля>.exe Документ.ext"
Автор: magnetics
Дата сообщения: 30.06.2006 12:12
файлы PDF, открыватся должны в Adobe Acrobat
Только имена файлов каждый раз разные
Сейчас запускается сам Акробат а файлы не открывает
Автор: obtim
Дата сообщения: 30.06.2006 12:46
Подскажите пожалуйста
как сделать чтобы nnCron запускал встроенный дефрагментатор виндов для указанного диска?
Автор: Stygis
Дата сообщения: 30.06.2006 14:42
magnetics
Т.е. когда файл в папке появляется, чтоб он сразу открывался?

Добавлено:
obtim

Код: "C:\WINDOWS\system32\mmc.exe" "C:\WINDOWS\system32\dfrg.msc" <буква диска>
Автор: OOD
Дата сообщения: 30.06.2006 16:27
подскажите как организовать несложный файловый ввод/вывод?

нужно найти в текстовом файле test.txt примерно такого содержания

Код:
xxx
sss
zzz
Автор: Stygis
Дата сообщения: 30.06.2006 18:10
OOD
Ну грю же... читай помощь
Вот моя [more=задачка]#( Watch_GK_Finish
NoActive
CREATE strPath 256 ALLOT
S" H:\DVD\Projects\DD_VTS_06_PGC1\DD_GKnot.log" strPath PLACE
WatchFile: "%strPath COUNT%"

VARIABLE position
\ Hовое слово - ищем в одной стpоке совпадение
\ с дpугой стpокой и (если находим) возвpащаем
\ начальную позицию этого совпадения.
\ Позиции начинаются с 1. Если подстpока не
\ найдена - 0. Можно позиции и с 0 считать, а
\ возвpащать -1, если не найдена
: StringGetPos { a1 u1 a2 u2 -- pos}
a1 u1 a2 u2 SEARCH IF DROP a1 - 1+ ELSE 2DROP 0 THEN ;

\ Построчно (в цикле) считываем файл
\ test.txt в переменную list-contents и
\ выводим каждую строчку на экран.
USER-VALUE list-file
USER-VALUE list-contents
\ максимальная длина строки (в символах)
10240 CONSTANT max-line-size

CREATE str2 256 ALLOT
Action:
\ Зарезервировали достаточное количество памяти
\ и записали ее адрес в list-contents
max-line-size ALLOCATE THROW TO list-contents
S" %strPath COUNT%" EVAL-SUBST R/O OPEN-FILE-SHARED THROW TO list-file

BEGIN list-contents max-line-size 2- list-file READ-LINE THROW WHILE
\ вариант 1 начало
\ На стеке осталось число прочитанных символов.
\ Прибавляем его к адресу зарезервированной памяти
\ и дописываем 0, чтобы получить zero-terminated string
list-contents + 0 SWAP C!

\ проверка на наличие строки окончания кодирования
list-contents ASCIIZ> S" Total Encoding Time: " StringGetPos
\ вариант 1 конец

\ или
\ вариант 2 начало
\ \ проверка на наличие строки окончания кодирования
\ list-contents SWAP S" Total Encoding Time: " StringGetPos
\ вариант 2 конец
0>

IF
MSG: "!!"
TQUERY: "Усыпляем комп?" 10 Yes
IF
POWER-HIBERNATE
\ MSG: "!!"
CUR-NODE CF-ACTIVE CLR-CRON-FLAG
THEN
THEN

REPEAT


DROP
list-file CLOSE-FILE DROP
list-file FREE DROP
\ MSG: "Конец задачи"
)#[/more], все сделано прямо по помощи Следим за файлом, когда в нем появляется надпись "Total Encoding Time: ", гибернатим комп. Подредактируй и юзай
Автор: OOD
Дата сообщения: 30.06.2006 18:23
Stygis
класс - респект за такое исполнение , просто тяжело с других языков сразу переключиться на иной синтаксис знаю смысл, а вот с синтаксисом тяжко пока, спасибо за пример, сейчас попробую что либо сделать
Автор: Stygis
Дата сообщения: 30.06.2006 21:12
OOD
Да ниче сложного в принципе Скачай книжку по Форту (в помощи, кажется, ссылка была) и прочитай пару-тройку первых глав. После этого понятно, скорее всего, будет
Автор: unreal666
Дата сообщения: 30.06.2006 22:57
Как в консоли вывести значения этих разных строк?
Т.е. допустим я ввел:
S" xxx" или
C" xxx" или
Z" xxx"

И как вот эти xxx вывести на консоль ? (для каждой из них)
Автор: magnetics
Дата сообщения: 30.06.2006 23:30
Stygis

Да, как только файлы появляются, чтобы они сразу в Акробате открывались
Автор: Stygis
Дата сообщения: 30.06.2006 23:31
unreal666

Код: S" xxx" TYPE
Автор: unreal666
Дата сообщения: 30.06.2006 23:39

Цитата:
S" xxx" TYPE

Сенкс. Просто я ступил.
Вместо

S" xxx"
TYPE

я пытался делать

S" xxx"
. . TYPE

Т.е. сначала снимал со стека, а потом пытался брать со стека хрен хнает что. Недоспал наверно.
Автор: Stygis
Дата сообщения: 01.07.2006 00:37
unreal666
Кста, если ты в консоли будешь делать в две команды:

Код: 1. S" xxx" <Enter>
2. TYPE <Enter>
Автор: unreal666
Дата сообщения: 01.07.2006 02:33

Цитата:
то результат будет различаться
Это так, для общего развития (наводка от Tez'а)

Я с такой фигней уже сталкивался. Как я понял, это из-за того, что буфер консоли сдвинут всего лишь на 3 байта назад от начала хранения символьной строки.
Автор: daMIR
Дата сообщения: 01.07.2006 18:06
Не могу написать задачу для "кликанья" по ярлыку. В ФАКе есть просто примеры задач, без пояснений. Простая вставка пути до ярлыка в ФАКовскую задачу ни к чему не привела.
И подвпрос: можно ли "кликнуть" на ярлык который находится на панели быстрого запуска?
Автор: Epifanov
Дата сообщения: 01.07.2006 19:48
daMIR
Если честно, я особой проблемы в этом не вижу:
В "свойствах ярлыка" есть строчка "объект", вот оттуда все в задачу и нужно скопировать.

За исключением отдельных клинических случаев, должно работать.
Автор: unreal666
Дата сообщения: 01.07.2006 19:56
daMIR

Ты подробнее напиши, что тебе надо и с помощью чего хочешь это реализовать. А то непонятны ни цель, ни способ каким ты это пытаешься делать.

Цитата:
И подвпрос: можно ли "кликнуть" на ярлык который находится на панели быстрого запуска?

Что значит "кликнуть", с помошью команд для мыши что ли? А чего ты не хочешь просто запустить прогу, на которую ссылается ярлык.
Автор: daMIR
Дата сообщения: 01.07.2006 20:22
Epifanov
Путь до ярлыка у меня есть, мне нужна сама команда с подробными разьяснениями.
unreal666

Цитата:
А то непонятны ни цель, ни способ каким ты это пытаешься делать

Цель- запустить приложение через ярлык
Способ- любой

Цитата:
Что значит "кликнуть", с помошью команд для мыши что ли?

Нет, не через эмуляцию мыши, а указанием какой-нить команды. Или как через макросы, если таковые есть.
Автор: unreal666
Дата сообщения: 01.07.2006 22:51
daMIR
Код задачи, которая у тебя не работает, приведи.
Автор: daMIR
Дата сообщения: 01.07.2006 23:38
unreal666
Я думал стандартные задачи нет смысла приводить... [more=Вот цитата: ]

...как запускать программы с помощью ярлыков/шорткатов (*.lnk)?

Если не нужна авторизация, то так:

#( test_shortcut
NoActive
Action:
5 0 0 Z" c:\temp\cmd.exe.lnk" Z" open" 0 ShellExecuteA DROP
5 0 0 Z" c:\temp\notepad.exe.lnk" Z" open" 0 ShellExecuteA DROP
)#
Для успешной авторизации задачу придется немного усложнить:

#( test_shortcut_authorized
NoActive
AsLoggedUser
Action:
START-APP: tm.exe 5 0 0 Z" c:\temp\cmd.exe.lnk" Z" open" 0 ShellExecuteA HALT
START-APP: tm.exe 5 0 0 Z" c:\temp\notepad.exe.lnk" Z" open" 0 ShellExecuteA HALT
)#
Есть еще один вариант запуска шорткатов с авторизацией (с использованием JScript). Обратите внимание на "прямые" слеши в пути к шорткату:

#( test_shortcut_authorized1
NoActive
AsLoggedUser
Action:
<JScript>
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run("c:/temp/cmd.exe.lnk");
WshShell.Run("c:/temp/notepad.exe.lnk");
</SCRIPT>
)#
[/more]
Ни одна задача не работает
Автор: OOD
Дата сообщения: 02.07.2006 00:01
В nnCron есть возможность запускать задачи\скрипты из внешних бат файлов
из хелпа :[more]
Запуск задачи в качестве отдельного скрипта

Задачу можно вынести в отдельный файл, после чего запускать этот файл как скрипт (или батч-файл). Чтобы запустить задачу-скрипт, введите в командной строке:

nncron.exe -runfile script_filename
Чтобы запуск задачи-скрипта был успешным, скрипт должен содержать форт-слово main

Пример:

\ --- start of script file ----
: main
MSG: "Hello, WORLD!"
SEND-KEYS-DELAY: 100 100
SEND-KEYS: "$r{DELAY 1000}ping localhost -t{ENTER}"
5000 PAUSE
SEND-KEYS: "^c"
;
\ --- end of script file ------


--------------------------------------------------------------------------------

Примечание: запуская задачу вручную, помните, что тем самым вы принудительно отменяете все условия запуска (Time:, Rule:, Watch*), определенные в задаче. Указание "выполнить задачу вручную" имеет безусловный приоритет над всеми остальными условиями! Если же вы хотите создать задачу, которая бы проверяла определенные условия даже при "ручном" запуске, перенесите условие внутрь раздела Action:. Например, вместо

#( test_rule
Rule: PROC-EXIST: "notepad.exe"
Action:
MSG: "Notepad exists!"
)#
напишите:

#( test_rule1
Action:
PROC-EXIST: "notepad.exe"
IF
MSG: "Notepad exists!"
THEN
)#
[/more]

Так же есть возможность из одной задачи запустить активировать другую.
[more]
...как программно применить к задаче опцию NoActive или, наоборот, отменить ее действие?

Изнутри самой задачи:

\ активизируем
CUR-NODE CF-ACTIVE SET-CRON-FLAG
\ деактивизируем
CUR-NODE CF-ACTIVE CLR-CRON-FLAG
Из другой задачи:

\ активизируем
<task_name> @ CF-ACTIVE SET-CRON-FLAG
\ деактивизируем
<task_name> @ CF-ACTIVE CLR-CRON-FLAG
Обратите внимание, что программно оперируя опцией NoActive вы не вносите физических изменений в кронтаб-файл. Это означает, что вы меняете статус активности задачи только до следующего перечитывания кронтабов.

С помощью следующих слов вы можете проверить - установлена ли у задачи опция NoActive:

\ проверяем активность изнутри самой задачи:
CF-ACTIVE?
IF
\ ...
THEN
\ проверяем активность из другой задачи:
<task_name> @ CRON-FLAGS @ CF-ACTIVE AND?
IF
\ ...
THEN

[/more]

Но нельзя из внешнего файла изменить сво-во опредленной задачи на ACTIVE т.е. с бат.файла поставить сво-во скрипта ACTIVE и де актив....

Как вариант я думаю можно написать на каждый скрипт по скрипту, который будет активировать , де активировать 1-й скрипт... а уже этот скрипт (Активатор-Де активатор) запускать из бат файла, но это не удобно - придеться писать по скрипту на каждый скрипт , может быть можно сразу на прямую из бат файла активировать, де активировать скрипт?

Автор: unreal666
Дата сообщения: 04.07.2006 13:04
daMIR
Поэкспериментировал со всеми 3-мя вариантами. Нифига не получается.
Попробовал с этими вариантами открыть обычный текстовый файл. Открываетя блокнотом, хотя в системе стоит другой редактор для открытия текстовых файлов. Получается что при всех этих вариантах незагружается профиль.
Кстати, даже если создать скрипт js с таким же содержимым, как в примере задачи, то все равно также работает.
Автор: daMIR
Дата сообщения: 04.07.2006 13:54

Цитата:
Поэкспериментировал со всеми 3-мя вариантами. Нифига не получается.

Во-во! И это из хелпа. Видимо придется идти на офф форум.


Цитата:
Кстати, даже если создать скрипт js с таким же содержимым, как в примере задачи, то все равно также работает.

Не понял, поподробнее. Отдельный js работает?
Автор: unreal666
Дата сообщения: 04.07.2006 14:30
daMIR
Создал js-файл с содержиммым

Код: var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run("g:/1.txt");

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: Как писать кириллицей, а НЕ латиницей (транслитом)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.