О программе

Выражаем Вам благодарность за проявленный интерес к нашей программе!

"WinScript" - это скриптовый движок, предназначенный для автоматизации рутинных действий в Windows. С его помощью вы забудете, что такое BAT-файлы :-).

Возможности его очень широки, а язык - классический Pascal, который преподают в ВУЗ-ах.

Список встроенных функций постоянно пополняется. Если вы хотите что-то добавить в WinScript - просто напишите об этом на support@nsoft-s.com.

Простые примеры использования WinScript находятся в папке "\examples". Исходные тексты скриптов - файлы с расширением ".ws", для запуска скриптов достаточно выполнить одноименный BAT-файл в той же папке.

Для запуска скрипта или проверки синтаксиса нужен исполняемый файл "ws.exe". Параметры запуска описаны в разделе "Параметры командной строки".

Для редактирования исходных текстов рекомендуется использовать любой текстовый редактор с подсветкой синтаксиса, но на худой конец подойдёт и стандартный Блокнот.

WinScript распространяется бесплатно и может использоваться свободно при условии соблюдения целостности распространяемого дистрибутива.

Последние версии, обновления, новости: http://www.nsoft-s.com

Техническая поддержка: support@nsoft-s.com

Сообщения об ошибках: bugs@nsoft-s.com

Блог программы: http://www.winscriptlib.blogspot.com

Версия справки 1.4.2.19

Последнее изменение - 08.04.2009


Описание стандартных функций

Все функции WinScript можно условно разделить на несколько групп. Это:

· функции преобразования типов;

· консольный ввод-вывод;

· работа с текстовыми файлами;

· работа с файлами и каталогами;

· работа с INI-файлами;

· сеть;

· система;

· работа с реестром;

· работа со строками;

· разное.

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

Если вы пишете скрипт и вам явно не хватает какой-либо функции - не стесняйтесь, пишите на support@nsoft-s.com, постараемся добавить ;-).


Функции преобразования типов

function IntToStr(value:integer) :string; | преобразовать число в строку;
function StrToInt(st:string) :integer; | преобразовать строку в число;


Консольный ввод-вывод

function Read:string; | прочитать с консоли строку в переменную типа String;
function ReadLn:string; | прочитать с консоли строку в переменную типа String с переводом курсора на новую строку;
procedure Write(s:string); | вывести на консоль тестовую строку;
procedure WriteLn(s:string); | вывести на консоль текстовую строку с переводом курсора на новую строку.


Работа с текстовыми файлами

procedure AddLineToFile(FileName, Msg :string); | добавить тестовую строку "Msg" в конец файла "FileName";
function LoadLineFromFile(FileName :string; LineNumber :integer; var Txt :string) :boolean; | прочитать строку номер "LineNumber" из текстового файла "FileName" в переменную "Txt". Если попытка чтения завершилась неудачей (нет такой строки, файла не существует и т.п.) - функция вернет "False";
function GetTextFileLinesCount(filename :string) :int64; | Функция возвращает количество строк в указанном текстовом файле. Если файла не существует - то функция вернёт число "-1";


Работа с файлами и каталогами

procedure CopyFile(FileFrom, FileTo :string; Rewrite :boolean); | скопировать файл "FileFrom" в "FileTo", если "Rewrite" равен "True", то перезаписывать файл, если таковой будет в результирующей папке, если "False" - то пропустить файл;
procedure MoveFile(FileFrom, FileTo :string; Rewrite :boolean); | перенести файл из "FileFrom" в "FileTo", если "Rewrite" равен "True", то перезаписывать файл, если таковой будет в результирующей папке, если "False" - то пропустить файл;
procedure DeleteFile(FileName :string); | удалить файл "FileName";
procedure CopyFiles(PathFrom, PathTo, Mask :string; Rewrite :boolean); | скопировать файлы из папки "PathFrom" в папку "PathTo" по маске "Mask", если "Rewrite" равен "True", то перезаписывать файлы, если таковые будут в результирующей папке, если "False" - то пропускать файлы;
procedure MoveFiles(PathFrom, PathTo, Mask :string; Rewrite :boolean); | перенести файлы из папки "PathFrom" в папку "PathTo" по маске "Mask", если "Rewrite" равен "True", то перезаписывать файлы, если таковые будут в результирующей папке, если "False" - то пропускать файлы;
procedure DeleteFiles(FilesPath, Mask :string); | удалить файлы из папки "FilesPath" по маске "Mask";
function FileExists(FileName:string) :boolean; | существует ли указанный файл? "True" - да, "False" - нет;
procedure RenameFile(FileName1, FileName2); | переименовать файл "FileName1" в "FileName2";
procedure CreateFolder(FolderName :string); | создать папку с именем "FolderName";
function ForceFolders(FolderName :string) :boolean; | создать папку с необходимыми подкаталогами. "True" - если создание прошло успешно, "False" - попыика создания не удалась;
function RemoveFolder(FolderName :string) :boolean; | удалить папку "FolderName". Если папка удалена - "True", если нет - "False";
function RenameFolder(FolderName1, FolderName2 :string) :boolean; | переименовать папку "FolderName1" в "FolderName2". Если переименование прошло успешно - функция возвращает "True", если нет - "False";
function FileMaskEquate(FileName, Mask :string) :boolean; | Соответствует ли файл "FileName" заданной маске "Mask"? Если да - "True", нет - "False";
procedure CalcFileCRC32(FileName :string; var CRCvalue: Cardinal; var TotalBytes: Int64; var error: Word); | процедура вычисляет контрольную сумму файла "FileName" (CRC32) и помещает ее в переменную "CRCvalue". В переменную "TotalBytes" заносится размер файла в байтах, в "error" - код ошибки, если таковая была;
function FileDeny(FileName :string) :boolean; | если файл "FileName" занят каким-либо приложением, функция возвращает "True";
function CurrentFolder :string; | возвращает текущий каталог;
function SetCurrentFolder(FolderName :string) :boolen; | установить "FolderName" текущим каталогом. Если попытка не удалась - функция возвращает "False";
function FolderExists(FolderName :string) :boolean; | Если папка "FolderName" существует - функция возвращает "True", иначе "False";
function FileSize(FileName :string) :int64; | функция возвращает размер указанного файла в байтах. Если файла не существует или он не доступен, функция возвращет "-1";
procedure XDelFolder(path :string); | процедура удаляет указанный каталог со всем содержимым. Если какой-то файл либо подкаталог не может быть удалён - он пропускается;
function FileGetAttr(FileName: string): integer; | функция для получения списка атрибутов файла либо каталога. Если при определении атрибутов произошла ошибка (файле нет, он недоступен или что-то ещё), то функция вернёт -1. Список возможных атрибутов: "faReadOnly" - только для чтения; "faSysFile" - системный; "faHidden" - скрытый; "faDirectory" - каталог;
 | "faArchive" - архивный; "faSymLink" - символическая ссылка; "faAnyFile" - любой атрибут;
function FileSetAttr(FileName: string; Attr: integer): integer; | функция для установки атрибутов для указанного файла. Если попытка установки атрибутов закончилась неудачей - функция возвращает -1;


Работа с INI-файлами

procedure SaveValueToIni(FileName, Tree, Branch, Value :string; CaseSensitive :boolean); | сохранить в INI-файл "FileName" строку "Value" в раздел "Tree" под именем "Branch". Если такого файла не существует - создать его. Если "CaseSensitive" = "True" - то строки чувствительны к верхему/нижнему регистру, если "False" - нет;
function LoadValueFromIni(FileName, Tree, Branch :string; CaseSensitive :boolean) :string; | прочитать из INI-файла "FileName" значение переменной "Branch" из раздела "Tree". Если "CaseSensitive" = "True" - то строки чувствительны к верхему/нижнему регистру, если "False" - нет. Результат заносится в имя функции. Если попытка чтения закончилась неудачей - результат будет пустой строкой.


Сеть

function PING(IP_address :string) :integer; | пинг сетевого адреса. "IP_address" - строка с IP адресом хоста, который пингуется. Если функция возвращает "0" - пинг прошёл, если число, отличное от нуля - пинга нет;
function HostToIP(Host: string):string; | функция возвращает IP адрес хоста по его сетевому или DNS имени;
function GetUNCFileName(FileName :string) :string; | получить сетевое имя файла по его локальному имени. Если попытка определения потерпела неудачу - функция вернет пустую строку;


Система

procedure UpTime(var d, h, m, s :integer);

Сколько времени работает Windows без перезагрузки. "d" - дни, "h" - часы, "m" - минуты, "s" - секунды;

function GetComputerName:string;

возвращает сетевое имя компьютера, на котором исполняется скрипт;

function GetCurrentUserName:string;

возвращает имя пользователя, под которым выполняется скрипт;

function Execute(FileName, Parameters, WorkFolder :string) :integer;

запустить из скрипта любую программу, BAT-файл, открыть документ и прочее. "FileName" - что именно нужно запустить/открыть, "Parameters" - параметры командной строки, "WorkFolder" - рабочий каталог;

function DiskFree(disknum :byte) :int64;

функция возвращает, сколько свободного места (в байтах) находится на указанном диске. "disknum" может принимать значения "0" - текущий диск, "1" - диск "A", "2" - "B", "3" - "C" и так далее;

function DiskSize(disknum :byte) :int64;

функция возвращает размер указанного диска в байтах;

function GetEnvValue(ValueName :string) :string;

возвращает значение переменной окружения под именем "ValueName";

function SetEnvValue(VarName, VarValue: string): integer;

функция устанавливает значение "VarValue" для переменной окружения "VarName". Если операция прошла успешно, функция возвращает значение "0";

function GetClipboardText :string;

функция возвращает текст, хранящийся в буфере обмена Windows;

procedure SetClipboardText(Txt :string);

сохраняет в буфере обмена Windows указанный текст;

function GetFileVersion(FileName: string): string;

функция возвращает версию указанного файла;

.procedure GetMemoryInfo(var MemoryLoad :byte; var TotalPhys :int64; var AvailPhys :int64; var TotalPageFile :int64; var AvailPageFile :int64);

получить информацию о памяти, используемой в системе. "MemoryLoad" - сколько процентов физической оперативной памяти занято в данній момент, "TotalPhys" - размер физической оперативной памяти, имеющейся в системе, "AvailPhys" - сколько памяти есть в наличии, "TotalPageFile" - размер файла подкачки, "AvailPageFile" - сколько байт из файла подкачки свободно. Все данные возвращаются в байтах;

procedure GetCPUInfo(var Name :string; var Mhz :word; var Vendor, Identifier :string)

получить информацию о микропроцессоре, установленном в системе. "Name" - название, "Mhz" - частота, "Vendor" - производитель, "Identifier" - технические данные (family, model, stepping);

procedure GetSystemDate(var Year, Month, Day :word);

получить системную дату (год, месяц, день);

procedure GetSystemTime(var Hour, Min, Sec, mSec :word);

получить системное время (часы, минуты, секунды, сотые доли секунд);

function ExecuteEx(FileName, Parameters, WorkFolder :string; RunType :integer) :integer;

расширенный вариант функции Execute. Запускает из скрипта любую программу, BAT-файл, открывает документы и прочее. "FileName" - что именно нужно запустить/открыть, "Parameters" - параметры командной строки, "WorkFolder" - рабочий каталог; RunType - в каком виде запускать приложение из скрипта:

1 - спрятать окно запускаемого приложения, фокус не отбирать;

2 - минимизировать окно приложения, фокус не отбирается;

3 - максимизировать окно запускаемого приложения, фокус не отбирается;

4 - активировать и показать окно запускаемого приложения;

5 - активировать и показать окно запускаемого приложения в его текущей позиции и размере;

6 - аналогично 5;

7 - активировать окно и развернуть на весь экран;

8 - активировать окно и минимизировать его;

9 - показать окно в его стандартном размере, фокус не отбирать;

10 - показать окно приложения в стандартном режиме, активное окно остаётся активным, фокус не передаётся;

11 - то же, что и 10, но окно приложения будет показано там, где оно показывалось в прошлый раз;

12 - активировать и показать окно приложения;

function GetIdleTime: cardinal;

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

function LockWorkStation: boolean;

функция блокирует рабочую станцию. Действует аналогично нажатию Ctrl+Alt+Del и выбору "Блокировка" в диалоговом окне Windows. Для того, чтобы разблокировать компьютер, нужно выполнить вход в систему под текущим логином и паролем;

procedure SetLedState(KeyCode:byte; OnOff:boolean);

включить или выключить индикаторы клавиатуры NumLock, CapsLock и ScrollLock. Индикатор зависит от номера переменной KeyCode. 1 - NumLock, 2 - CapsLock, 3 - ScrollLock. OnOff - включить либо выключить индикатор;

function SetScreenResolution(PixelsWidth, PixelsHeight, BitsPerPixel, DisplayFrequency:integer): boolean;

функция для установки разрешения экрана. PixelsWidth - ширина экрана в точках, PixelsHeight - высота экрана в точках, BitsPerPixel - шлубина цвета в битах (8, 16, 24, 32), DisplayFrequency - частота обновления экрана в секунду. Если испоьзуется TFT монитор - то устанавливать в 0;

procedure SendKeys(Buffer, WndCaption:string);

отправить клавишу или последовательность кодов приложению, заголовок которого передаётся в переменной WndCaption.


Работа с реестром

function RegSetString(RootKey: cardinal; name: string; value: string): boolean;

function RegSetMultiString(RootKey: cardinal; name: string; value: string): boolean;

function RegSetExpandString(RootKey: cardinal; name: string; value: string): boolean;

function RegSetDWORD(RootKey: cardinal; name: string; value: cardinal): boolean;

function RegSetBinary(RootKey: cardinal; name: string; value: array of byte): boolean;

function RegGetString(RootKey: cardinal; name: string; var value: string): boolean;

function RegGetMultiString(RootKey: cardinal; name: string; var value: string): boolean;

function RegGetExpandString(RootKey: cardinal; name: string; var value: string): boolean;

function RegGetDWORD(RootKey: cardinal; name: string; var value: cardinal): boolean;

function RegGetBinary(RootKey: cardinal; name: string; var value: string): boolean;

function RegGetValueType(RootKey: cardinal; name: string; var value: cardinal): boolean;

function RegValueExists(RootKey: cardinal; name: string): boolean;

function RegKeyExists(RootKey: cardinal; name: string): boolean;

function RegDelValue(RootKey: cardinal; name: string): boolean;

function RegDelKey(RootKey: cardinal; name: string): boolean;

function RegConnect(MachineName: string; RootKey: cardinal; var RemoteKey: cardinal): boolean;

function RegDisconnect(RemoteKey: cardinal): boolean;

function RegEnumKeys(RootKey: cardinal; name: string; var KeyList: string): boolean;

function RegEnumValues(RootKey: cardinal; name: string; var ValueList: string): boolean;


Работа со строками

function StrConvert(st :string; dc :integer) :string; | перевести строку "st" из одной кодировки в другую. Функция возвращает строку-результат перекодировки. Параметр "dc" может принимать такие значения: 1 - из win1251 в 866; 2 - из win1251 в 866U; 3 - из 866 в win1251; 4 - из 866U в win1251;
function SumToString(value:string; valute:byte): string; | перевести сумму в строку прописью. Если valute - 0, то сумма прописывается в рублях, если 1 - в долларах. Максимальная сумма - 999 999 999;
function NumToString(value:string): string; | функция для перевода числа в строку. Максимальное число - 999 999 999;
function Translit(const InString:string): string; | функция для транслитерации текстовых строк. Например, Translit('Привет, мир!') вернёт строку 'Privet mir'. Поддерживаются русский и украинский языки;
function Pos(st, subst:string): integer; | поиск подстроки "subst" в строке "st". Если строка найдена - то возвращается её индекс, начиная с единицы. Если подстрока не найдена, то функция возвращает ноль;
function ReplaceString(st, fromst, tost: string; ReplaceAll, IgnoreCase: boolean): string; | функция замены подстроки в строке. Исходная строка - "st", строка, которую нужно заменить - "fromst", строка, на которую необходимо заменить найденный фрагмент - "tost". Если параметр ReplaceAll=true, то замену нужно произвести для всех вхождений указанной подстроки, если False - то только первого попавшегося с начала строки. Если параметр IgnoreCase=True, то при анализе строки не берётся во внимание регистр букв, если False - большие и маленькие буквы считаются различными. Результат функции - обработанная исходная строка;


Разное

procedure Protocol(Msg, FileName :string; DateTimeStamp :boolean); | сохранить строку "Msg" в конец текстового файла "FileName". Если такого файла нет - создать его. Если "DateTimeStamp" = "True", то поставить в начале строки временной штамп в формате "[dd.mm.yyyy hh:mm:ss]". Эта функция очень удобна для ведения протоколов;
procedure Beep; | выдаёт стандартный звуковой сигнал Windows;
procedure ExitScript(errorlevel :integer); | выйти из скрипт-машины WinScript с кодом завершения, равном "errorlevel". Этот код завершения можно будет затем анализировать в BAT-файлах или в других программах;
procedure MsgBox(title, st_msg :string; icon_type :integer); | показать на экране стандартное диалоговое окно Windows с текстом. Заголовок окна - "title", текст - "msg". Тип значка - "icon_type", может принимать значения от 1 до 4. 1 - ICONWARNING; 2 - ICONSTOP; 3 - ICONINFORMATION; 4 - ICONQUESTION;
procedure SaveScreenToBMP(filename :string); | сохранить содержимое экрана в BMP файл, указанный в параметре "filename". Если такой файл уже существует - он будет перезаписан;
function DatesDelta(d1, m1, y1, d2, m2, y2 :word) :integer; | вычислить разницу в днях между двумя датами, указанными в формате "день", "месяц", "год". Первый блок чисел - дата, с которой вычисляют разницу в днях;
procedure GetWinScriptVer(var Major, Minor, Release, Build :word); | процедура возвращает номер текущей версии скрипт-машины WinScript. 4 параметра: "Major", "Minor", "Release", "Bulid";
function GetWinScriptReleaseDate :string; | функция возвращает дату сборки текущей версии WinScript в формате "dd.mm.yyyy";
function GetCmdLineParameters: string; | функция возвращает параметры, которые были переданы в командной строке WinScript-у. Например, если строка запуска была такая: "ws.exe /r "C:\WS\Documents 2\test.ws" Parameter1 Parameter2", то функция вернёт текстовую строку "Parameter1 Paramater2". Это бывает очень удобно для передачи скрипту параметров прямо из командной строки;
procedure ScriptIdle; | пропуск тиков процессора во время выполнения скрипта. Можно вызывать во время "тяжёлых" циклов, чтобы не допускать чрезмерной загрузки процессора;
procedure ScriptSleep(sleeptime: integer); | сделать паузу во время исполнения скрипта. Время указывается в миллисекундах;
procedure SaveScreenToJPG(filename :string; quality:integer); | сохранить содержимое экрана в JPG файл, указанный в параметре "filename". Если такой файл уже существует - он будет перезаписан. quality - качество файла;
function Random(base: integer); | возвращает случайное число в диапазоне от 0 до x;


История создания

Версия 1.4.0.15 от 3 ноября 2008 года

Версия 1.2.0.13 от 1 сентября 2008 года

Версия 1.1.0.10 от 21 июля 2008 года

Версия 1.0.5 от 22 мая 2008 года - первый публичный релиз


Версия 1.1.0.10 от 21 июля 2008 года

Что добавлено или улучшено?

· функция StrConvert для перевода текстовых строк из одной кодировки в другую;
· процедура MsgBox для показа стандартных информационных окон Windows;
· процедура SaveScreenToBMP - сохранение экрана в BMP файл;
· процедура XDelFolder для удаления каталога со всем содержимым (подпапки, файлы);
· функция ExecuteEx - расширенный запуск приложений изнутри скриптов;
· функция DatesDelta - вычисление разницы в днях для двух указанных дат (день, месяц, год);
· функции FileSetAttr и FileGetAttr для установки и чтения атрибутов файлов;
· функции GetWinScriptVer и GetWinScriptReleaseDate для получения версии скрипт-машины WinScript и даты её сборки;
· функция GetIdleTime для определения времени простоя системы;
· функция LockWorkstation - блокировка пользовательской сессии;
· функция GetCmdLineParameters для получения параметров, которые были переданы скрипту прямо из командной строки;
· процедуры ScriptSleep и ScriptIdle - для возможности сделать паузу во время выполнения или пропуска тиков процессора во время работы скрипта;
· значительное количество новых примеров (папка "\examples");

Список исправленных ошибок

· ошибка в функции GetTextFileLinesCount. Функция возвращала неверное значение, если файл был пуст;
· функции DeleteFile и DeleteFiles теперь корректно удаляют файлы с атрибутом ReadOnly.


Версия 1.2.0.13 от 1 сентября 2008 года

Что добавлено или улучшено?

· полный набор функций для работы с системным реестром;


Версия 1.4.0.15 от 3 ноября 2008 года

Что добавлено или улучшено?

· процедура SetLedState для включения/выключения индикаторов клавиатуры NumLock, CapsLock и ScrollLock;
· функция SumToString - перевод суммы в строку прописью;
· функция NumToString - функция для перевода числа в строку прописью;
· процедура SetScreenResolution для установки параметров разрешения/частоты обновления экрана;
· процедура SendKeys - отправка нажатий клавиш другим приложениям для управления ими из скрипта;
· функция Translit для транслитерации текстовых строк;

Список исправленных ошибок

· исправлена некорректная работа функции SaveValueToIni.