Разное (Служебные ключевые слова)



CD-TRAY-EJECT: <drv_letter>
CD-TRAY-CLOSE: <drv_letter>

Oткрыть/закрыть лоток указанного CD-ROM драйва.

См. также: WatchDrive: <drv_letter>, WatchDriveRemove: <drv_letter>, IS-CD-PRESENT: <drv_letter>


IS-CD-PRESENT: <drv_letter>

Возвращает флаг TRUE (-1) если в указанном CD-ROM драйве находится диск и флаг FALSE (0), если указанный CD-ROM драйв пуст.

Пример:

#( test_cd_present
WatchShutdown Action: IS-CD-PRESENT: "d" IF ERR-MSG: "Remove disk from CD-ROM drive!" THEN )#

Существует вариант этого слова с постфиксным расположением параметров. В периоде исполнения (например, в консоли ):

CHAR D IS-CD-PRESENT

В периоде компиляции (например, в теле задач):

[CHAR] D IS-CD-PRESENT

См. также: WatchDrive: <drv_letter>, WatchDriveRemove: <drv_letter>, CD-TRAY-EJECT: <drv_letter>, CD-TRAY-CLOSE: <drv_letter>


PAUSE: <time_in_ms>
PAUSE: <hh:mm>

Позволяет приостановить выполнение задания на указанный промежуток времени.

Примеры:

#( test_pause
Time: 30 7 * * * *
Action:
    START-APP: d:\tools\vmtdial\vmtdial.exe -h
\ ждем три секунды PAUSE: 3000 WIN-CLOSE: "*VMT Dialer*" )#
#( test_pause1 WatchFile: "c:\xxx.sem" Action: PAUSE: "00:30" \ ... выполняем работу через 30 минут после \ появления файл-флага )#

Существует постфиксный вариант слова PAUSE, но в этом случае время указывается только в миллисекундах.

Пример:

\ пауза на пять секунд
5000 PAUSE
\ пауза на минуту
60000 PAUSE

NAME2SIDS ( a u -- a u )

Принимает в качестве аргумента строку с именем пользователя и возвращает SID-строку (Security Identifier, идентификатор безопасности: уникальное числовое значение, которое идентифицирует пользователя или группу пользователей). Используется, например, для доступа к пользовательским веткам системного реестра Windows (HKEY_USERS).

S" VKondakoff" NAME2SIDS

Слово NAME2SIDS используется только в Win2000/XP.


LOG: "filename" "message"

Добавляет message в лог-файл filename.

Существует вариант этого слова с постфиксным расположением параметров:

S" message" S" filename" LOG

S" message" CRON-LOG

Выводит сообщение в общий лог nnCron, заданный в переменной nncron.ini Cronlog:. Строка, передаваемая слову CRON-LOG в качестве параметра может содержать предопределенные переменные nnCron.

Пример:

S" test message" CRON-LOG
S" message from %USERNAME%" CRON-LOG

CLIPBOARD: "text"

Помещает text в буфер обмена.

Существует также постфиксный вариант этого слова:

S" text" CLIPBOARD!

См. также описание слов CLIPBOARD и WatchClipboard:.


FREE-SPACE: <drv_letter>

Возвращает количество свободного места (в килобайтах) на указанном диске.

Пример:

\ возвращает 'TRUE', если свободного места 
\ на диске 'c:' осталось меньше 10 мегабайт
\ и 'FALSE', если свободного места на диске 
\ 'c:' осталось больше 10 мегабайт
FREE-SPACE: C 10000 < 

Существует вариант этого слова с постфиксным расположением параметров:

\ для использования в консоли:
CHAR <drv_letter> FREE-SPACE
\ для использования в кронтабах:
[CHAR] <drv_letter> FREE-SPACE
\ или
%CHAR <drv_letter> FREE-SPACE%

HIDE-ICON
SHOW-ICON

Скрывает иконку nnCron в системном трее, если она видима/ отображает иконку nnCron в системном трее, если она скрыта

Команда HIDE-ICON выполняется с некоторой задержкой.


CUR-TASK-NAME ( -- a u )

При использовании внутри определения задачи, это слово возвращает строку с именем текущей задачи.

Пример:

#( test_taskname
NoActive
Action:
    MSG: "Current task name: %CUR-TASK-NAME%"
)#

ENABLE-CRON
DISABLE-CRON

Слово DISABLE-CRON переводит nnCron в режим остановки. Слово ENABLE-CRON, напротив, восстанавливает нормальный режим работы.

Важно отметить, что в режиме остановки задача, из которой nnCron был "усыплен", останется единственной работающей задачей (за исключением задач с опцией HyperActive). Это даст вам возможность программно "разбудить" nnCron из этой же задачи.

Пример:

#( test_suspend
\ при появлении флага disable.flg переводим 
\ nnCron в режим остановки на десять минут
WatchFile: "C:\TEMP\disable.flg"
Action:
    BEEP: 250 500
    DISABLE-CRON
    PAUSE: 00:10
    ENABLE-CRON
)# 

DISABLE-CRON?

Возвращает флаг TRUE (-1) если nnCron находится в режиме остановки и флаг FALSE (0), если nnCron находится в нормальном рабочем режиме. Испольуя это слово, вы, например, можете запускать задачу только в режиме остановки.

Пример:

#( test_suspend?
RunOnce NoDel HyperActive Rule: DISABLE-CRON? Action: MSG: "nnCron is disabled!" )#

GetLastError

Вызов функции Win32 API GetLastError(). Возвращает номер ошибки только что отработавшей команды, если в процессе ее работы произошел сбой и 0 если ошибки не произошло.

Слово GetLastError работает со следующими командами: START-APP:, START-APPW:, FILE-CREATE: (-COPY:, -MOVE:, -RENAME:, -CROP:, -WRITE:, -APPEND:), DIR-CREATE: (-DELETE:) и др.

Пример:

#( test_error
NoActive
Action:
    FILE-CREATE: "c:\xxx\test.sem"
    GetLastError
    IF MSG: "FILE-CREATE error: %GetLastError%" THEN
)#

GetLastError не имеет смысла использовать со словом FILE-DELETE: (подробнее).


RANDOM ( range -- random )

Постфиксное слово, которое генерирует случайные числа, используя мощный алгортим RAN4, описанный во втором издании книги "Numerical Recipes in C". В качестве аргумента слово RANDOM принимает число, которое определяет "верхнюю границу" диапазона генерируемых случайных чисел. Нижняя граница диапазона - 0, верхняя граница - значение аргумента минус единица. Это означает, что если вы указали число 1000 в качестве аргумента, то случайные числа будут генерироваться в диапазоне от 0 до 999.

Генератор случайных чисел инициализируется специальным словом START-SEQUENCE ( dcounter dseq# ), которое принимает в качестве аргументов два числа двойной длины: последовательность, использующуюся при генерации случайных чисел, и начальный номер числа в последовательности. При старте каждой задачи слово START-SEQUENCE автоматически получает уникальные аргументы, что обеспечивает уникальность генерируемых случайных чисел. Впрочем, вы можете инициализировать START-SEQUENCE и вручную, используя, например, количество миллисекунд, прошедших с момента старта операционной системы (GetTickCount). Вот как это делается:

GetTickCount DUP 2DUP START-SEQUENCE

Примеры:

\ генерируем случайные числа в диапазоне от 0 до 510
511 RANDOM

#( test_random
WatchHotKey: "${F5}"
Action:
    \ START-SEQUENCE инициализируется автоматически 
    \ выводим случайное число (диапазон 0 - 99) в сообщении:
    MSG: "Random: %100 RANDOM%"
    \ выводим случайное число (диапазон 0 - 99) на консоль:
    100 RANDOM . CR
)#

#( test_random_manual
WatchHotKey: "${F6}"
Action:
    \ инициализируем START-SEQUENCE
    GetTickCount DUP 2DUP START-SEQUENCE
    \ выводим случайное число (диапазон 0 - 99) в сообщении:
    MSG: "Random: %100 RANDOM%"
    \ выводим случайное число (диапазон 0 - 99) на консоль:
    100 RANDOM . CR
)#

RES ( n -- a u )

Постфиксное слово, которое принимает число в качестве аргумента и возвращает строку под соответствующим номером из подключенного "языкового" файла (см. описание переменной nncron.ini Language:).

Пример:

#( test_predefined_string
NoActive
Action:
    \ выводим на экран строку 'Зарегистрировать nnCron' 
    \ на соответствующем языке
    MSG: "%19 RES%"
)#

#( test_predefined_string1
NoActive
Action:
    \ выводим полное название текущего дня недели
    MSG: "%159 WDay@ + RES%"
)#

RunMissed?

Возвращает флаг TRUE (-1) если стартовавшая задача была "просрочена" и теперь запускается "при первой возможности" и флаг FALSE (0), если старт задачи являлся "плановым". Слово RunMissed? удобно использовать для выдачи запроса о целесообразности запуска просроченной задачи.

Пример:

#( test_runmissed
Time: 0 0
Rule: RunMissed? IF TQUERY: "Missed task. Launch it?" 5 Yes ELSE 1 THEN
Action:
    \ ...
)#

TRAY-REFRESH

"Обновляет" системный трей и удаляет из него "фантомные" иконки, которые могут там остаться, например, после принудителного прерывания процесса.

Пример:

#( test_close_miranda
NoActive
Action:
    PROC-CLOSE: "miranda32.exe"
    TRAY-REFRESH
)#

WINAPI: <function_name> <dll_name>

Это слово позволяет "импортировать" в nnCron win32-функции из внешних DLL. Для этого, сразу после слова WINAPI: вы указываете имя функции и имя dll-файла, в котором эта функция находится.

WINAPI: MoveFileA KERNEL32.DLL
WINAPI: RasDialDlgA RASDLG.DLL
WINAPI: NetSessionEnum NETAPI32.DLL

В процессе импорта, указанная функция превращается в новое постфиксное слово, которым можно пользоваться во всех ваших задачах. Аргументы импортированной функции меняют свой порядок в соответствии с постфиксной нотацией.

До импорта:

your_function(1, 2, "string", 4);

После импорта:

4 Z" string" 2 1 your_function

Значение, которое возвращает импортированная функция, остается на стеке. Удалите его, если вы не собираетесь его использовать.

Пример:

#( convert_to_lower_case
NoActive
WINAPI: CharLowerBuffA USER32.DLL
CREATE convert_buf 256 ALLOT
Action:
    S" My TeSt StRiNg" convert_buf PLACE
    MSG: "Not converted: %convert_buf COUNT%"
    convert_buf COUNT SWAP CharLowerBuffA DROP
    MSG: "Converted: %convert_buf COUNT%"
)#

OnBalloonClick

Пользовательская переменная OnBalloonClick "перекрывает" значение переменной nncron.ini TrayIconBalloonClick: для текущей задачи (и только для неё). Таким образом, для текущей задачи вы можете установить свое собственное действие, которое будут происходить при щелчке мышью на подсказке BALLOON:.

Пример:

#( test_balloonclick
NoActive
: my-click 
  \ делаем что-нибудь полезное:
  MSG: "You have destroyed my Balloon!"
;
Action:
    ['] my-click OnBalloonClick !
BALLOON: "Test" "Click me!" )#
#( test_balloonclick1 NoActive Action: [NONAME \ делаем еще что-нибудь полезное: BEEP: 50 500 PAUSE: 200 BEEP: 50 500 NONAME] OnBalloonClick !
BALLOON: "New test" "Click me now!" )#