понедельник, 9 марта 2009 г.

Как правильно в скрипте указать %userprofile% ?

Люди спрашивают, а как в скрипте достать каталог профиля пользователя, под которым сейчас залогинен юзер в системе?

Очень просто, воспользуемся функцией получения значения переменной окружения:

var s:string;
begin
s:= GetEnvValue('USERPROFILE');
end.

Кстати, список всех переменных окружения можно посмотреть в консоли (cmd.exe), просто набрав команду "SET".

суббота, 22 ноября 2008 г.

Интеграция GERMES и WinScript

Сегодня выходит новая версия нашего продукта для автоматизированной передачи файлов через локальную сеть/интернет GERMES.

Продукт "заточен" именно под передачу/приём файлов и не обладает возможностью обработки полученных файлов. Все действия по постобработке необходимо выполнять вручную, в BAT либо CMD файлах, используя наш продукт WinScript или же сторонние скриптовые языки/технологии.

Особенно это актуально в банках, где движение файлов очень интенсивное (например, в системах "Клиент-Банк") и есть необходимость надёжной маршрутизации файлов, логгирования и прочего.

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

Поэтому принято решение следующую версию GERMES (после 4.1) оснастить возможностью выполнения любых скриптов как на стороне клиента, так и сервера.

Новые версии WinScript и в дальнейшем будут выходить как отдельным продуктом, так и в составе нашего файлового агента GERMES.

воскресенье, 2 ноября 2008 г.

WinScript 1.4.0.15

Вышла свежая версия нашего скриптового движка. Реализовано всё то, что было обещано, кроме работы с хард- и симлинками :)

Исправлены найденные ошибки. Скачать новую версию WinScript >>.

понедельник, 20 октября 2008 г.

Работа с hardlinks и symlinks

В Windows, при использовании файловой системы NTFS, можно делать так называемые хардлинки и симлинки. Постараюсь пояснить, что это такое.

Допустим, у нас есть каталог, в котором есть какие-то файлы. Мы пишем скрипт (программу и т.п.), где в коде жёстко зашиваем все пути к файлам. Потом переносим этот скрипт на другой компьютер и сталкиваемся с ситуацией, что структура каталогов несколько другая.

Чтобы решить проблему, нужно либо переписать скрипт с учётом новой структуры каталогов, либо сделать так, чтобы он "не заметил" никаких изменений.

Есть консольная команда SUBST, которая позволяет привязать к букве диска любой каталог на любом диске. Но если нам хочется гибкости, то придётся использовать линки. Люди из мира UNIX очень часто пользуются этой возможностью, в Windows эта технология применяется не так широко.

Линк - это ссылка на файл либо каталог. Скажем, каталог - "C:\MyDocs\", а симлинк на него - "C:\MyLinks\Docs\". Для программ нет никакой разницы, к какому пути обращаться. Если мы удалим файлы из "C:\MyLinks\Docs\" - это моментально отразится в исходном "C:\MyDocs\".

Как штатным образом увидеть этот линк, скажем, в Проводнике - я не знаю. Буду благодарен тому, кто подскажет :) Потому что на вид линк на каталог либо на файл ничем от своего оригинала не отличается.

Есть ещё и хардлинки - они, в отличие от симлинков, могут указывать только на файлы. Основное отличие от хардлинков в Linux то, что при удалении хардлинка исходный файл не удаляется. В остальном - тот же симлинк.

В новой версии WinScript будет поддержка создания хардлинков и симлинков. Экспериментируйте, буду ждать замечаний и предложений.

среда, 24 сентября 2008 г.

Что нового планируется в следующей версии WinScript

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

  1. procedure SetLedState(KeyCode:byte;OnOff:boolean). Процедура, с помощью которой можно зажигать и гасить индикаторы NumLock, CapsLock и ScrollLock программно. Например, вызов SetLedState(1,true) включит NumLock, а SetLedState(2,false) погасит CapsLock.
  2. function SumToString(value:string;valute:byte):string. Функция, которая преобразовывает сумму в строку прописью. Например, вызов SumToString(10387652.02,1) вернёт строку "десять миллионов триста восемьдесят семь тысяч шестьсот пятьдесят два доллара 02 цента". Поддерживаются пока две валюты: доллар и рубль. Максимальная сумма - 999 999 999. Нужно будет больше либо есть необходимость в других валютах - пишите, добавим. Также имеется функция для преобразования числа в строку прописью (т.е. без валют и дробной части - просто число). Ограничения на размерность числа - то же.
  3. function SetScreenResolution(PelsWidth,PelsHeight,BitsPerPixel,DisplayFrequency:integer):boolean. Эта функция автоматически выставляет разрешение экрана на заданное. Указываем размер экрана в точках по вертикали, горизонтали и цветность - и всё. Если монитор TFT - то последний параметр устанавливаем в ноль. Функция очень эффективна, если нужна автоматизированно выставлять определённое разрешение для разных задач. Скажем, для работы в AutoCad - максимальное разрешение, для игр - 800х600х24bit. Если попытка была неудачной - функция вернёт false.
  4. procedure SendKeys(Buffer,WndCaption:string). Крайне полезная функция для взаимодействия с приложениями Windows. Суть ее в следующем: выбранному приложению посылаются наборы комбинаций клавиш, приложение реагирует на них и выполняет какие-либо функции, как будто бы мы действительно нажимали что-либо на клавиатуре, управляя этим приложением. Получаем возможность создания макросов произвольной сложности для управления теми программами, которые как бы и не предусматривают такого поведения с собой :) В примерах к дистрибутиву будут приложены варианты работы с Блокнотом, Калькулятором и некоторыми другими распространёнными Windows-приложениями.

понедельник, 1 сентября 2008 г.

Обновление WinScript - версия 1.2.0.13

Сегодня вышла новая версия скриптового движка WinScript. Добавлена пачка функций для работы с системным реестром. Также можно управлять реестром компьютеров удалённо, по сети.

Чувствую, пора писать серию статей по использованию скриптового движка, а то что-то активности сисадминов никакой не чувствуется :)

http://www.nsoft-s.com/downloadwinscript.html

Avira Antivir VS WinScript

В нашем корпоративном блоге писалось о том, что антивирус Avira Antivir неадекватно реагирует на WinScript. Как выяснилось, корень проблемы в том, что эвристик антивируса ошибается из-за того, что exe-файл скриптового движка WinScript ws.exe сжат упаковщиком UPX. Достаточно распаковать программу и проблема отпадает.

Командная строка для распаковки: upx.exe -d ws.exe