Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Операционные системы / Лабораторная работа № 6

.pdf
Скачиваний:
19
Добавлен:
02.01.2020
Размер:
215.15 Кб
Скачать

Лабораторная работа №6 по дисциплине "Операционные системы, среды и оболочки"

Приемы работы со сложными объектами Windows на VBScript/JScript

При запуске многих программ имеется возможность указать для них опции, которые влияют на характер выполняемых приложением операций. Такие опции называются аргументами и передаются в командной строке запуска вместе с наименованием программы через пробел. Для доступа к аргументам используется объект-коллекция Arguments, которая является составной частью WScript. Общее количество аргументов, переданных программе, можно получить функцией WScript.Arguments.Count(). Для обращения к отдельному аргументу с порядковым номером можно использовать операцию выбора элемента массива – круглые скобки, в которых указывается индекс элемента. Нумерация начинается с 0. Под нулевым аргументом всегда содержится наименование самой программы, принимающей аргументы. Чтобы вывести на экран все переданные программе параметры нужно

использовать следующий фрагмент программы

FOR EACH arg1 IN WScript.Arguments WScript.Echo arg1

NEXT

Аргументы разделяются на именованные и неименованные. К именованным параметрам можно обратиться по имени, и не обязательно знать их порядок следования в командной строке. Формат именованного параметра таков /наименование:значение. Для обращения к именованным параметрам используется объект Named являющийся составной частью объекта WScript.Arguments. Количество переданных именованных параметров возвращает свойство length объекта Named. Для доступа к аргументу по его порядковому номеру можно воспользоваться круглыми скобками, в которых указывается индекс параметра среди всех именованных параметров. Также возможно обратиться к значению аргумента по его имени через метод WScript.Arguments.Named.Item("имя").

Неименованные параметры образуют объект Unnamed, к элементам которого можно обратиться по порядковому номеру аргумента WScript.Arguments.Unnamed(индекс). Количество неименованных параметров можно узнать, обратившись к свойству length объекта Unnamed.

Объекты коллекции очень полезны и удобны с точки зрения их получения, хранения и обработки содержащихся в них значений. Такими коллекциями являются коллекции Folders и Files, которые можно получить через объект Folder. Для создания объекта Folder можно воспользоваться методом GetFolder объекта FileSystemObject, который вернет ссылку на экземпляр объекта каталога, указанного в качестве параметра (указанный в параметре каталог должен существовать).

var FSO=WScript.CreateObject("Scripting.FileSystemObject"); var vFolder=FSO.GetFolder("C:\\STUDENT");

Некоторые свойства объекта Folder:

IsRootFolder содержит логическое значение true в случае если каталог является корневым.

ParentFolder содержит объект Folder для родительского каталога. Name позволяет считывать и изменять значение имени каталога. ShortName содержит короткое наименование каталога (в формате 8.3). Path содержит текстовую строку пути к каталогу.

ShortPath содержит текстовую строку пути к каталогу из коротких имен подкаталогов (в формате 8.3).

Files содержит коллекцию объектов File для всех элементов каталога (включая скрытые и системные файлы).

SubFolders содержит коллекцию объектов Folder для всех соответствующих элементов каталога (включая скрытые и системные каталоги).

Для создания объекта File, кроме знакомых Вам методов CreateTextFile и OpenTextFile, можно использовать метод GetFile, возвращающий ссылку на экземпляр объекта файла, путь к которому указывается в качестве параметра.

var vFile=FSO.GetFile("C:\\STUDENT\\text.txt");

Некоторые свойства объекта File:

ParentFolder содержит объект Folder для родительского каталога файла. Name позволяет считывать и изменять значение имени файла.

ShortName содержит короткое наименование файла (в формате 8.3). Path содержит текстовую строку пути к файлу.

ShortPath содержит текстовую строку пути к файлу из коротких имен подкаталогов (в формате 8.3).

Для обработки элементов входящих в коллекции, используется цикл по коллекции.

DIM vFiles

SET vFiles=vFolder.Files

FOR EACH vFile IN vFiles

...

NEXT

В JScript необходимо дополнительно создать экземпляр коллекции типа данных Enumerator и обращаться к его методам для перемещения по коллекции, а также получения доступа к экземпляру коллекции. Чтобы использовать свойства объекта Folder коллекции vFolders необходимо использовать метод item() коллекции, то есть vFolders.item().свойство.

var vFolders=new Enumerator(vFolder.SubFolders); for (; !vFolders.atEnd(); vFolders.moveNext()){

...

}

Результаты выполнения сценария можно выводить в консольное окно или в диалог Popup, но наиболее эффектным способом является отображение данных с использованием внешнего приложения, которое входит в стандартную комплектацию ОС. Такой программой является InternetExplorer.

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

var vIE=WScript.CreateObject("InternetExplorer.Application"); vIE.Visible=false; показать окно на рабочем столе vIE.AddressBar=false; панель адреса

vIE.MenuBar=false; панель главного меню vIE.StatusBar=false; панель статуса vIE.ToolBar=false; панель инструментов vIE.FullScreen=false; полноэкранное окно vIE.Resizable=false; свободное изменение размера vIE.Height=300; высота окна

vIE.Width=600; ширина окна

vIE.Navigate("путь к HTML-файлу или URL-ссылка");

while(vIE.Busy) WScript.Sleep(100); ждем пока страница загружается vIE.Visible=true; показать окно на рабочем столе

В сценарии можно не использовать метод Navigate, который применяется для загрузки страницы. Альтернативным способом является внесение текста с разметками или без

разметок в окно браузера. Для этих целей используется объект Document, входящий в состав объекта-экземпляра браузера. Объявляем некоторую переменную и присваиваем ей ссылку на объект документа var doc=vIE.Document; Определяем заголовок окна браузера doc.title="заголовок";. Обращаемся к разделу содержимого страницы doc.body.innerHTML или doc.body.innerText в зависимости от того, какой вид информации будет помещен на страницу с использованием тэгов или без них. Присваиваем новое значение для соответствующего раздела.

При использовании тэгов, когда они уже присутствуют на странице, можно выполнять обновление информации, размещенной в них при помощи свойства doc.all.имя.innerText или doc.all.имя.innerHTML. Для этого предварительно в тэгах должны присутствовать параметры name со значениями имен этих тэгов. Пример doc.body.innerHTML="<p>Ничего не происходит</p><p name='v1'>Что-то происходит</p>";

WScript.Sleep(5000);

doc.all.v1.innerText="Все хорошо, что хорошо кончается";

По окончании использования приложения InternetExplorer, если его не закрыл пользователь, закрытие окна программы браузера происходит при вызове метода vIE.Quit();. Для отмены загрузки (остановки) страницы используется метод vIE.Stop();, после вызова которого можно вновь использовать программу InternetExplorer для загрузки очередной страницы. Закрывать окно браузера и создавать экземпляр объекта при этом нет необходимости.

Создайте каталог Lab6 в директории C:\STUDENT\группа\. Запишите программу script1.js, которая будет выполнять действия следующего плана:

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

Данные отображаются в окошке Интернет-браузера в структурированном виде, то есть наименования элементов содержимого каталога выдаются на экран с дополнительным пробелом слева относительно левого отступа родительского каталога.

Путь к каталогу, список содержимого которого необходимо отобразить в браузере, задается через аргумент к сценарию.

Создайте программу script2.vbs, которая выполняет те же действия, но с использованием рекурсивного вызова функций или процедур, используемых для просмотра подкаталогов любого уровня вложенности и отображения списка содержимого.