А чи знаєте ви

. як опpеделить завдання, якому не буде отобpажаться в меню Start Task і Edit?

Назвати завдання так: CLASSIC-TASK - # - ххх.

Замість ххх можна вказувати будь-які символи крім пробілу (наприклад, CLASSIC-TASK - # - ABC D, CLASSIC-TASK - # - 123456 або CLASSIC-TASK - # - my_task). А якщо раптом знадобиться запустити задачу "вручну", то зробити це можна з командного рядка:

Зверніть увагу, що інформація про запуск завдань CLASSIC-TASK - # - ххх не відображається в балці nnCron. Якщо ви хочете, щоб ця інформація була присутня в балці - скористайтеся словами LOG: або CRON-LOG в тілі завдання.

. як передати задачі аргументи з командного рядка?

Це можливо, якщо запускати завдання за допомогою ключа -runfile:

Все, що знаходиться в командному рядку після імені запускається файлу вважається довільними аргументами і може бути "лічено" фортової конструкцією BL WORD (пробіл в якості "делімітера" при розборі). Ось приклад, який послідовно виводить месседжбокси з усіма знайденими аргументами командного рядка:

До того ж, в nnCrone є слово get-string яке виконує всю чорнову роботу при "розборі" аргументу: якщо рядок оточена лапками, то аргументом вважається все, що знаходиться всередині лапок, а якщо немає, то до першого зустрінутого пробілу.

Так само можна зробити і для першої (1-7) і для четвертого тижня (22-28), а ось для останнього тижня так не вийде. Тут треба вже мудрувати. Але день місяця доступний (Day @), і день тижня теж (WDay @). Так що, можна
мудрувати з довільної складністю, і не забувайте про OnceAWeek.

. як дізнатися ім'я виконуваного завдання і ім'я кронтаб-файлу, де це завдання знаходиться?

Щоб отримати ім'я завдання зсередини самого завдання, скористайтеся словом CUR-TASK-NAME (- a u).

. як вивести на екран повідомлення із заданим текстом і заголовком?

Контролювати можна не тільки текст і заголовок повідомлення, але і іконку повідомлення і навіть кількість кнопок на повідомленні. Для цього замість першого нуля "підставте" в вищенаведений приклад одне з наступних значень:

Функція MessageBoxA повертає числове значення, за яким можна визначити: яку з кнопок натиснув користувач. Ось список значень, що повертаються:

. як запускати завдання лише після завантаження / перезавантаження комп'ютера?

Вирішення цієї проблеми розділене на дві (нескладні) частини:

1) Спочатку треба організувати створення спеціального файл-прапора після кожного старту системи. Для цього можна, наприклад, помістити в каталог Startup шорткати до наступного bat-файлу:

2) Тепер залишилося написати саме завдання:

Вуаля. Завдання запускається тільки після старту системи. Причому, на відміну від завдань, що запускаються з START-TIME. наш варіант починає виконуватися відразу після завантаження комп'ютера, не чекаючи початку "нової" хвилини.

Ось ще один спосіб: слово GetTickCount кладе на стек час (в мілісекундах), що минув з моменту старту системи. Значить, ми можемо перевіряти цей час і якщо воно менше хвилини-двох, то значить система тільки що стартувала.

Для повільно стартують комп'ютерів, час з яким ми порівнюємо GetTickCount. можливо, доведеться збільшити (90000 - 150000).

. як вpеменно прикріплений стопором юзеp введення з миші / клавіатура?

Зверніть також увагу, що для користувача введення блокується тільки на час роботи завдання, з якої був викликаний BlockTheInput. Як тільки завдання припиняє роботу, призначений для користувача введення автоматично розблокується.

. як "наказати" nnCron вести єдиний лог-файл, а не створювати кожен день новий?

Для цього треба змінити значення змінних Cronlog і (опціонально) LogTimeFormat в nncron.ini:

Ось як буде виглядати інформація в балці:

До речі кажучи, єдиний лог можна час від часу "урізати", користуючись конструкцією FILE-CROP:.

. як програмно припинити виконання завдання (наприклад, в разі помилки)?

Скористатися словом з ядра Форту EXIT. яке призначене для виходу з поточного слова. Його можна вживати, оскільки Action: - це теж Форт-слово.

. як з одного завдання зупинити виконання іншої задачі?

. як програмно застосувати до задачі опцію NoActive або, навпаки, скасувати її дію?

Зсередини самого завдання:

З іншого завдання:

Зверніть увагу, що програмно оперуючи опцією NoActive ви не вносите фізичних змін в кронтаб-файл. Це означає, що ви міняєте статус активності завдання тільки до наступного перечитування кронтаб.

За допомогою наступних слів ви можете перевірити - чи встановлена ​​у завдання опція NoActive:

. як перехоплювати і самостійно обробляти виникають виключення?

nnCron надає можливість в кожному конкретному випадку перехоплювати виключення самостійно і після цього вирішувати, "що з ними робити".

Винятки перехоплюються так:

Значить, в ситуації "наближеній до бойової" ця конструкція буде виглядати так:

Використовувати CATCH безпосередньо можна тільки з "Постфіксний" словами. Якщо ж виникла необхідність обробити виняток префіксного слова, то на його основі потрібно створити нове слово.

Іноді, коли завдання велика і помилку можуть повернути відразу кілька операторів, допомагає наступний трюк: поміщаємо все, що раніше було в розділі Action: в нове слово, і "сторожем" його за допомогою CATCH.

. як розшифрувати номера помилок на форт-консолі, в лог-файлі і nncron.out?

24k). Опис помилок з лог-файлу і nncron.out можна знайти в цьому ж файлі (за номером помилки).

. як перекодувати рядок з кодування WIN в кодування OEM і навпаки?

В ядрі nnCron визначені "перекодуйте" слова OemToCharBuffA і CharToOemBuffA. Ось як з їх допомогою можна робити перекодування рядків:

Hіколас настійно рекомендує копіювати рядок в буфер і перекодувати її там (як показано в прикладі), замість того, щоб перетворювати кодування прямо на місці зберігання рядка.

. як за допомогою nnCron змінювати атрибути файлів?

Дивимося, що на цей рахунок сказано в WinAPI:

Значить, можна робити, наприклад, так:

Ось розшифровка констант, які можна вживати замість dwFileAttributes:

. як перевірити умова на одній машині, а виконати завдання на інший? Зрозуміло, на обох машинах в мережі запущено по nnCron'у.

Найпростіше - через проміжний файл, створюваний на загальнодоступному мережевому диску.

По-перше, можна використовувати цей файл як прапор - створювати файл з однієї машини, а "стежити" за ним з іншого.

По-друге, за допомогою такого файлу можна передати другій копії nnCron навіть текст завдання, яка повинна бути виконана. Ось приклад. В одній копії nnCron створюємо файл під назвою remote_task.spf з таким вмістом:

А на сусідній машині виконується таке завдання:

Не забувайте також про можливість запустити задачу з текстового файлу за допомогою ключа командного рядка -runfile

Існує слово WIN-RECT. яке повертає чотири значення: координати лівого верхнього і правого нижнього кутів зазначеного вікна. Як аргумент вона приймає window handle цього вікна. Значить, щоб дізнатися дозвіл екрана, досить дізнатися координати вікна Program Manager: останні два значення будуть відповідати цьому вирішення екрана.

. як програмно очистити корзину (Recycle Bin)?

1. Створюємо файл clearbin.spf з таким вмістом:

2. Визначаємо завдання:

Навіщо такі складнощі? Резонне питання. Для коректної очищення кошика потрібна завантаження профілю користувача, а без запуску окремого процесу профіль як слід не завантажується. Втім, якщо ви використовуєте Win9Х, то ця проблема вас не стосується - ви можете прямо в тілі завдання викликати:

Ось, до речі, константи, які можна використовувати при очищенні кошика:

Для цього можна визначити спеціальне слово (наприклад, FOUND-SHORTFILENAME) і використовувати його всередині циклу FOR-FILES:.

. як запускати власну задачу по подвійному кліку на іконці nnCron в системному треї?

Створити Постфіксний слово (можна прямо в nncron.ini):

і відредагувати змінну в nncron.ini TrayIconDoubleClick.

. як сконструювати власне меню, яке б з'являлося при натисканні правою кнопкою миші на іконці nnCron в системному треї?

Для цього потрібно створити в каталозі nnCron текстовий файл menu.f і помістити в нього таке визначення:

Після цього слід відредагувати nncron.ini наступним чином:

В результаті ви отримаєте приклад повноцінного спливаючого меню, яке буде з'являтися при натисканні правою кнопкою миші на іконці nnCron в системному треї. Зверніть увагу, що "дефолтний" пункт меню виділений жирним шрифтом і виконується при подвійному натисканні мишею на ікноке nnCron в треї.

. як запустити задачу за допомогою ярлика / шорткати (* .lnk)?

Для цього слід використовувати опцію командного рядка -run . Ось "покрокова" інструкція:

1) Створіть завдання. Деактивуйте її, якщо ви не хочете, щоб завдання виконувалася автоматично (NoActive):

2) Приступаємо до створення ярлика / шорткати: "натискаємо" правою кнопкою миші в потрібному каталозі і вибираємо New - Shortcut. після чого вказуємо розташування 'nncron.exe' і трохи редагуємо вміст поля Location of the item.

Натискаємо Next і придумуємо для нашого шорткати відповідне ім'я. Скажімо, test_task_shortcut. Натискаємо Finish.

3) Готово! Залишилося зробити подвійне клацання лівою кнопкою миші на щойно створеному шорткати, щоб запустити задачу test_task_shortcut.

. як запускати програми за допомогою ярликів / шорткати (* .lnk)?

. какскопіровать вказаний каталог, з усіма файлами і підкаталогами?

Найпростіше скористатися утилітою nnBackup. яка була спеціально написана для подібних завдань:

Можна, наприклад, так (перезапускаємо nnCron щодня, о 23:59):

. какузнать над яким елементом активного вікна зараз знаходиться покажчик миші?

Для цього можна послати активного вікна windows message WM_NCHITTEST і досліджувати отримане числове значення. Ось список можливих значень:

Щоб відстежувати клацання миші на заданому елементі активного вікна, ви можете скористатися плагіном keystate.spf. який дозволяє дізнатися, чи натиснута в даний момент зазначена кнопка миші.

. какпрятать будь-яке вікно в трей, клікнувши на кнопці Minimize правою кнопкою миші?

У луні RU.NNCRON запропонували такий варіант (не забудьте підключити плагіни keystate.spf і win2tray.spf):

Схожі статті