Visual Basic Script

         

Автоматизация Microsoft Excel


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



Автоматизация Microsoft Word


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



Часть 1. Microsoft Word и Microsoft Excel


Наталия Елманова

Коротко об автоматизации
VBA и средства разработки контроллеров автоматизации
Объектные модели Microsoft Office
Общие принципы создания контроллеров автоматизации
Автоматизация Microsoft Word
Программные идентификаторы и объектная модель Microsoft Word
   Создание и открытие документов Microsoft Word
   Сохранение, печать и закрытие документов Microsoft Word
   Вставка текста и объектовв документ и форматирование текста
   Перемещение курсора по тексту
   Создание таблиц
   Обращение к свойствам документа
Автоматизация Microsoft Excel
   Программные идентификаторы и объектная модель Microsoft Excel
   Запуск Microsoft Excel, создание и открытие рабочих книг
   Сохранение, печать и закрытие рабочих книг Microsoft Excel
   Обращение к листам и ячейкам
   Создание диаграмм

Настоящая статья посвящена теме, может быть, и не новой, но, как показывают письма читателей, по-прежнему актуальной - автоматизации приложений Microsoft Office. Многие разработчики в процессе работы над своими проектами (неважно, с помощью какого средства разработки - Delphi, C++Builder, Visual Basic:) нередко применяют сервисы, предоставляемые Microsoft Office, например построение сводных таблиц и диаграмм с помощью Microsoft Excel, генерацию и печать документов с помощью Microsoft Word и т.д. Нередко пользователи, привыкшие использовать приложения Microsoft Office в повседневной работе, сами настаивают на применении в приложениях таких сервисов либо просто на сохранении отчетов и других документов в одном из форматов Microsoft Office. Отметим, что потенциальные пожелания подобного рода компанией Microsoft учтены достаточно давно - практически все, что в состоянии сделать пользователь любого приложения Microsoft Office с помощью меню, клавиатуры и инструментальной панели, может быть произведено и автоматически, то есть либо из VBA-программы, либо из приложения, созданного с помощью одного из средств разработки. Иными словами, приложения Microsoft Office являются программируемыми. Программируемость в общем случае означает возможность управления данным приложением с помощью макроязыков либо с помощью других приложений. Все компоненты Microsoft Office поддерживают один и тот же макроязык: Visual Basic for Applications (VBA), позволяющий создавать приложения непосредственно внутри документов Office (это называется <решения на базе Microsoft Office>). Управление же компонентами Office из других приложений осуществляется с помощью автоматизации (Automation, ранее - OLE Automation) - все приложения Microsoft Office являются серверами автоматизации (или COM-серверами). Для создания таких приложений пригодны любые средства разработки, позволяющие создавать контроллеры автоматизации (COM-клиенты). Наиболее часто для этой цели используется Visual Basic, но это могут быть и Delphi, и C++Builder, и Visual C++. Однако прежде чем обсуждать возможности тех или иных средств разработки, следует разобраться, что такое автоматизация.



Коротко об автоматизации




Автоматизация - это одна из возможностей, предоставляемых технологией Microsoft COM (Component Object Model). Не вдаваясь в подробности реализации этой технологии, заметим, что она используется приложениями (называемыми COM-серверами) для предоставления доступа к их объектам, а также к свойствам и методам этих объектов другим приложениям (называемым COM-клиентами), каковыми могут быть и средства разработки. Например, текстовый процессор, будучи COM-сервером, может предоставлять другим приложениям доступ к документу, абзацу, закладке с помощью соответствующих объектов. Для именования (и опознания) COM-серверов обычно используются специальные строковые обозначения - программные идентификаторы (Programmatic Identifier, ProgID). Они нужны для того, чтобы операционная система могла с помощью этих идентификаторов определить, в каком именно каталоге (или на каком компьютере локальной сети, если используется тот или иной способ удаленного доступа к серверу) расположен исполняемый файл сервера автоматизации, и запустить его на выполнение. О том, какие именно программные идентификаторы применяются для того или иного приложения Microsoft Office, будет сказано в разделах, посвященных этим приложениям.

Объекты автоматизации с точки зрения программирования мало чем отличаются от обычных объектов, знакомых нам из теории и практики объектно-ориентированного программирования. Как и обычные объекты, они обладают свойствами и методами. Свойство - это характеристика объекта; например, свойством абзаца (объект Paragraph) может быть его стиль (Style). Методом называется действие, которое можно выполнить с объектом (например, можно сохранить документ с помощью метода SaveAs объекта Document).

Нередко серверы автоматизации содержат наборы однотипных объектов, называемых коллекциями. Например, текстовый процессор может содержать коллекцию документов, а каждый документ - коллекцию абзацев.

Как узнать, какие объекты доступны в серверах автоматизации? Для этой цели в комплект поставки любого сервера автоматизации входит документация и файлы справки, описывающие их объектную модель. Если брать приложения Microsoft Office 2000, то это справочные файлы для программистов на Visual Basic for Applications VBAxxx9.CHM (для Microsoft Office 97 - VBxxx8.HLP соответственно). Отметим, что по умолчанию они не устанавливаются, так как нужны разработчикам, а не рядовым пользователям.




Вся информация об объектах, необходимая контроллерам автоматизации, содержится в библиотеках типов. Библиотеки типов хранятся в специальном бинарном формате и обычно представлены в виде файлов с расширениями *.olb или *.tlb, а также могут содержаться внутри исполняемых файлов (*.exe) или динамически загружаемых библиотек (*.dll). Библиотеки типов можно просматривать с помощью утилиты OleView, входящей в состав Microsoft Platform SDK, а средства разработки фирмы Borland содержат свои собственные утилиты просмотра библиотек типов.

Заканчивая это более чем краткое введение в автоматизацию, остановимся также на понятии связывания. Связыванием называется способ, с помощью которого переменная или класс приложения-контроллера ссылается на объект автоматизации. Таких способов существуют два: позднее связывание и раннее связывание.

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

Раннее связывание означает, что реальная ссылка на объект автоматизации появляется уже на этапе компиляции. Поэтому в коде приложения-контроллера требуется ссылка на библиотеку типов (или на специальный модуль, являющийся интерфейсом к ней), и это приводит к генерации в этом приложении классов с теми же свойствами и методами, что и у объектов автоматизации, что делает возможными синтаксическую проверку имен методов на этапе компиляции и доступ к именованным константам, содержащимся в библиотеке типов. Отметим, однако, что далеко не все средства разработки, поддерживающие позднее связывание, осуществляют также поддержку раннего связывания.

Закончив экскурс в COM и автоматизацию, вернемся к вопросу о том, какие средства разработки удобно применять для создания контроллеров автоматизации.


Объектные модели Microsoft Office


Как было сказано выше, приложения Microsoft Office предоставляют контроллерам автоматизации доступ к своей функциональности с помощью своей объектной модели, представляющей собой иерархию объектов. Объекты могут предоставлять доступ к другим объектам посредством коллекций.

В качестве иллюстрации того, как выглядит иерархия объектов Microsoft Office, приведем небольшой фрагмент объектной модели Microsoft Word (рис.1):

В объектных моделях всех приложений Microsoft Office всегда имеется самый главный объект, доступный приложению-контроллеру и представляющий само автоматизируемое приложение. Для всех приложений Microsoft Office он называется Application, и многие его свойства и методы для всех этих приложений также одинаковы. Наиболее часто мы будем использовать следующие из них:

Свойство Visible (доступное для объекта Application всех приложений Microsoft Office) позволяет приложению появиться на экране и в панели задач; оно принимает значения True (пользовательский интерфейс приложения доступен) или False (пользовательский интерфейс приложения недоступен; это значение устанавливается по умолчанию). Если вам нужно сделать что-то с документом Office в фоновом режиме, не информируя об этом пользователя, можно не обращаться к этому свойству - в этом случае приложение можно будет найти только в списке процессов с помощью приложения Task Manager. Метод Quit закрывает приложение Office. В зависимости от того, какое приложение Office автоматизируется, он может иметь параметры или не иметь таковых.



Обращение к листам и ячейкам


Обращение к листам рабочей книги производится с помощью коллекции WorkSheets объекта WorkBook. Каждый член этой коллекции представляет собой объект WorkSheet. К члену этой коллекции можно обратиться по его порядковому номеру, например:

App.WorkBooks[1].WorkSheets[1].Name := _ 'Страница 1';

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

К листу рабочей книги можно обратиться и по имени, например:

App.WorkBooks[1].WorkSheets['Sheet1'].Name := _    'Страница 1';

Обращение к отдельным ячейкам листа производится с помощью коллекции Cells объекта WorkSheet. Например, добавить данные в ячейку B1 можно следующим образом:

App.WorkBooks[1].WorkSheets['Sheet1'].Cells[1,2].Value:='25';

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

Добавление формул в ячейки производится аналогичным способом:

App.WorkBooks[1].WorkSheets['Sheet1'] _    .Cells[3,2].Value := ' =SUM(B1:B2)';

Очистить ячейку можно с помощью метода ClearContents.

Форматирование текста в ячейках производится с помощью свойств Font и Interior объекта Cell и их подсвойств. Например, следующий фрагмент кода выводит текст в ячейке красным жирным шрифтом Courier кегля 16 на желтом фоне:

App.WorkBooks[1].WorkSheets[1].Cells[3,2].Interior _    .Color := clYellow; App.WorkBooks[1].WorkSheets[1].Cells[3,2].Font _    .Color := clRed; App.WorkBooks[1].WorkSheets[1].Cells[3,2] _    .Font.Name := 'Courier'; App.WorkBooks[1].WorkSheets[1].Cells[3,2] _    .Font.Size := 16; App.WorkBooks[1].WorkSheets[1].Cells[3,2] _ .Font.Bold := True;

Объект

Программный идентификатор

Комментарий

Application Excel.Application, Excel.Application.9 С помощью этого программного идентификатора создается экземпляр приложения без открытых рабочих книг
WorkBook Excel.AddIn С помощью этого программного идентификатора создается экземпляр расширения (add-in) Excel (имеющиеся расширения доступны с помощью пункта меню Tools | Add-Ins)
  Excel.Chart, Excel.Chart.8 Рабочая книга, созданная с помощью этих программных идентификаторов, состоит из двух листов - одного для диаграммы, другого - для данных, на основе которых она построена
  Excel.Sheet, Excel.Sheet.8 Рабочая книга, созданная с помощью этих программных идентификаторов, состоит из одного листа
<


Вместо свойства Color можно использовать свойство ColorIndex, принимающее значения от 1 до 56; таблицу соответствий значений этого свойства реальным цветам можно найти в справочном файле VBAXL9.CHM.

Обратиться к текущей ячейке можно с помощью свойства ActiveCell объекта Excel.Application, а узнать местоположение ячейки можно с помощью свойства Address объекта Cell, например:

ShowMessage(App.ActiveCell.Address);

Помимо обращения к отдельным ячейкам, можно манипулировать прямоугольными областями ячеек с помощью объекта Range, например:

App.WorkBooks[1].WorkSheets[2].Range['A1:C5'] _    .Value := 'Test'; App.WorkBooks[1].WorkSheets[2].Range['A1:C5'] _    .Font.Color := clRed;

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

Объект Range также часто используется для копирования прямоугольных областей через буфер обмена. Ниже приведен пример, иллюстрирующий копирование такой области:

App.WorkBooks[1].WorkSheets[2].Range['A1:C5'].Copy; App.WorkBooks[1].WorkSheets[2].Range['A11:C15'].Select; App.WorkBooks[1].WorkSheets[2].Paste;

Обратите внимание на то, что диапазон, куда копируются данные, предварительно выделяется с помощью метода Select.

Отметим, что примерно таким же образом можно копировать данные и из других приложений (например, из Microsoft Word).

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


Обращение к свойствам документа


Свойства документа можно получить с помощью коллекции BuiltInDocumentProperties объекта Document, например:

Memo1.Lines.Add('Название - ' + _ App.ActiveDocument.BuiltInDocumentProperties [wdPropertyTitle].Value); Memo1.Lines.Add('Автор - ' + _ App.ActiveDocument.BuiltInDocumentProperties [wdPropertyAuthor]. _ Value); Memo1.Lines.Add('Шаблон - ' + _ App.ActiveDocument.BuiltInDocumentProperties [wdPropertyTemplate]. _Value)

Константы, необходимые для обращения к свойствам документа по имени, приведены в листинге 3.

Итак, в данном разделе мы изучили основные операции, которые наиболее часто применяются при автоматизации Microsoft Word. Естественно, возможности автоматизации Word далеко не исчерпываются приведенными примерами, однако я надеюсь, что, руководствуясь основными принципами создания контроллеров Word, изложенными в данной статье, и соответствующим справочным файлом, вы сможете ими воспользоваться - мы с вами уже убедились, что это вовсе не так сложно.

Следующим приложением Microsoft Office, автоматизацию которого мы рассмотрим, будет Microsoft Excel - второе по популярности приложение Microsoft Office.



Общие принципы создания контроллеров автоматизации


В общем случае контроллер автоматизации должен выполнять следующие действия:

Проверить, запущена ли копия приложения-сервера. В зависимости от результатов проверки запустить копию автоматизируемого приложения Office либо подключиться к уже имеющейся копии. Сделать окно приложения-сервера видимым (в общем случае это не обязательно). Выполнить какие-то действия с приложением-сервером (например, создать или открыть документы, изменить их данные, сохранить документы и пр.) Закрыть приложение-сервер, если его копия была запущена данным контроллером, или отключиться от него, если контроллер подключился к уже имеющейся копии.

Соответствующий код для Delphi представлен в листинге 1.

Здесь мы воспользовались функциями GetActiveOleObject и CreateOleObject для подключения к уже запущенной копии приложения-сервера или запуска новой, если сервер не запущен, что приводит к тому, что в вариантную переменную помещается ссылка на объект Application соответствующего сервера.

Приведенная часть кода контроллера в других средствах разработки может выглядеть по-другому- она не имеет прямого отношения к методам объектов Office, так как обусловлена правилами вызова стандартных функций OLE в Delphi (за исключением вызовов методов Visible и Quit объекта Application). А вот все то, что должно быть вставлено вместо комментария <Здесь выполняются другие действия с объектами приложения Office>, в разных средствах разработки должно выглядеть более или менее однотипно - используя созданную вариантную переменную, мы манипулируем методами и свойствами объекта Application.

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

App.Quit;

несмотря на то что метод Quit объекта Application в случае некоторых приложений Microsoft Office (например, Microsoft Word) имеет параметры.


При использовании же раннего связывания, например при создании контроллеров с помощью Delphi, следует более строго подходить к определению параметров - их число и тип должны соответствовать описанию методов в библиотеке типов. Например, в случае раннего связывания корректный код на Delphi для закрытия документа Word со значениями всех параметров по умолчанию будет иметь вид:

App.Quit(EmptyParam, EmptyParam, EmptyParam);

Исключением из этого правила является Visual Basic - это средство разработки позволяет не задумываться о числе параметров методов при написании кода.

Обсудив общие принципы создания контроллеров автоматизации и узнав, как это делается средствами Borland Delphi, мы можем перейти к рассмотрению автоматизации конкретных приложений Microsoft Office. Начнем с одного из самого популярных компонентов этого пакета - с Microsoft Word.


Перемещение курсора по тексту


Используя метод Collapse, можно <сжать> объект Range или объект Selection, сократив его размер до нуля символов:

Rng.Collapse(wdCollapseEnd);

Параметр этого метода указывает, в начале или в конце исходного фрагмента окажется новый объект Range или Selection. Если вы используете позднее связывание и ваше средство разработки- не Visual Basic, нужно определить в приложении соответствующие константы:

const    wdCollapseStart = $00000001;    //новый объект находится в начале фрагмента    wdCollapseEnd = $00000000;    //новый объект находится в конце фрагмента

Перемещать курсор по тексту можно с помощью метода Move объектов Range и Selection. Этот метод имеет два параметра. Первый указывает на то, в каких единицах измеряется перемещение - в символах (по умолчанию), словах, предложениях, абзацах и др. Второй параметр указывает, на сколько единиц при этом нужно переместиться (это число может быть и отрицательным; по умолчанию оно равно 1). Например, следующий фрагмент кода:

Rng.Move;

приведет к перемещению курсора на один символ вперед, а

Rng.Move(wdParagraph,3);

приведет к перемещению курсора на три абзаца вперед. Отметим, что этот метод использует следующие константы:

const          //Единицей перемещения является:    wdCharacter           = $00000001; //символ    wdWord = $00000002; //слово    wdSentence          = $00000003; //предложение    wdParagraph         = $00000004; //абзац    wdStory = $00000006; //часть документа                        //напр., колонтитул,                        //оглавление и др.)    wdSection           = $00000008; //раздел    wdColumn           = $00000009; //колонка таблицы    wdRow = $0000000A; //строка таблицы    wdCell = $0000000C; //ячейка таблицы    wdTable = $0000000F; //таблица


Нередко для перемещения по тексту используются закладки. Создать закладку в текущей позиции курсора можно путем добавления члена коллекции Bookmarks объекта Document c помощью метода Add, указав имя закладки в качестве параметра, например:

App.ActiveDocument.Bookmarks.Add('MyBookmark');

Проверить существование закладки в документе можно с помощью метода Exists, а переместиться на нее - с помощью метода Goto объектов Document, Range или Selection:

Rng := App.ActiveDocument.Goto(wdGoToBookmark,      wdGoToNext, ,'MyBookmark'); Rng.InsertAfter('Текст, вставленный после      закладки');

Значения констант для этого примера таковы:

const

wdGoToBookmark = $FFFFFFFF;    //перейти к закладке wdGoToNext = $00000002;    //искать следующий объект в тексте

Отметим, что с помощью метода Goto можно перемещаться не только на указанную закладку, но и на другие объекты (рисунки, грамматические ошибки и др.), и направление перемещения тоже может быть различным. Поэтому список констант, которые могут быть использованы в качестве параметров данного метода, довольно велик.


Программные идентификаторы и объектная модель Microsoft Word


Для приложения-контроллера доступны непосредственно следующие объекты:

Объект

Программный идентификатор

Комментарий

Application Word.Application, Word.Application.9 С помощью этого программного идентификатора создается экземпляр Word без открытых документов
Document Word.Document, Word.Document.9, Word.Template.8 С помощью этого программного идентификатора создается экземпляр Word с одним вновь созданным документом

Все остальные объекты Word являются так называемыми внутренними объектами. Это означает, что они не могут быть созданы сами по себе; так, объект Paragraph (абзац) не может быть создан отдельно от содержащего его документа.

Если вспомнить, что основное назначение Word- работа с документами, можно легко понять иерархию его объектной модели (фрагмент ее был показан на рис. 1). Основным объектом в ней, как иво всех других приложениях Microsoft Office, является объект Application, содержащий коллекцию Documents объектов типа Document. Каждый объект типа Document содержит коллекцию Paragraphs объектов типа Paragraph, Bookmarks типа Bookmark, Characters типа Character и т.д. Манипуляция документами, абзацами, символами, закладками реально осуществляется путем обращения к свойствам и методам этих объектов.

Ниже мы рассмотрим наиболее часто встречающиеся задачи, связанные с автоматизацией Microsoft Word. Если же вам встретилась задача, не совпадающая ни с одной из перечисленных, вы можете попытаться найти подходящий пример на Visual Basic в справочном файле VBAWRD9.CHM, либо, как уже было сказано выше, записать необходимую последовательность действий в виде макроса и проанализировать его код.


Существует три типа объектов Excel, которые могут быть созданы непосредственно с помощью приложения-контроллера. Эти объекты и соответствующие им программные идентификаторы перечислены ниже.

Все остальные объекты Excel являются так называемыми внутренними объектами.

Небольшой фрагмент объектной модели Microsoft Excel изображен на рис.2:

Основным в объектной модели Excel является объект Application, содержащий коллекцию Workbooks объектов типа WorkBook. Каждый объект типа WorkBook содержит коллекцию WorkSheets-объектов типа WorkSheet, Charts типа Chart и др. Манипуляция рабочими книгами, их листами, ячейками, диаграммами реально осуществляется путем обращения к свойствам и методам этих объектов.

Ниже мы рассмотрим наиболее часто встречающиеся задачи, связанные с автоматизацией Microsoft Excel. Если вам встретилась задача, не совпадающая ни с одной из перечисленных, вы можете попытаться найти подходящий пример на Visual Basic в справочном файле VBAXL9.CHM, либо, как и в случае Microsoft Word, записать соответствующий макрос и проанализировать его код.



Сохранение, печать и закрытие документов Microsoft Word


Закрытие документа может быть осуществлено с помощью метода Close:

App.Documents.Item(2).Close;

или

App.ActiveDocument.Close ;

Метод Close имеет несколько необязательных (в случае позднего связывания) параметра, влияющих на правила сохранения документа. Первый из них влияет на то, сохраняются ли внесенные в документ изменения, и принимает три возможных значения (соответствующие константы рекомендуется описать в приложении. См. листинг 2):

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

Таким образом, при использовании этих параметров закрыть документ можно, например, так:

App.ActiveDocument.Close(wdSaveChanges, _ wdPromptUser) ;

Просто сохранить документ, не закрывая его, можно с помощью метода Save:

App.ActiveDocument.Save;

Этот метод также имеет несколько необязательных (в случае позднего связывания) параметров, первый из которых равен True, если документ сохраняется автоматически, и False, если нужно выводить диалоговую панель для получения подтверждения пользователя о сохранении изменений (если таковые были сделаны). Второй параметр влияет на формат сохраняемого документа, и список его возможных значений совпадает со списком значений второго параметра метода Close.

Напоминаем, что закрыть сам Word можно с помощью метода Quit объекта Word.Application. Этот метод имеет в общем случае три параметра, совпадающих с параметрами метода Close объекта Document.

Вывод документа на устройство печати можно осуществить с помощью метода PrintOut объекта Document, например:

App.ActiveDocument.PrintOut;

Если нужно изменить параметры печати, следует указать значения соответствующих параметров метода PrintOut (в случае Microsoft Word их около двадцати).



Сохранение, печать и закрытие рабочих книг Microsoft Excel


Закрытие документа может быть осуществлено с помощью метода Close:

App.WorkBooks[2].Close;

или

App.ActiveWorkBook.Close;

Метод Close имеет несколько необязательных (в случае позднего связывания) параметров, влияющих на правила сохранения рабочей книги. Первый из параметров принимает значения True или False и влияет на то, сохранять ли изменения, внесенные в рабочую книгу. Второй параметр (типа Variant) - имя файла, в котором нужно сохранить рабочую книгу (если в нее были внесены изменения). Третий параметр, также принимающий значения True или False, влияет на то, следует ли пересылать документ следующему пользователю по электронной почте, и может быть проигнорирован, если эта функциональность не используется.

App.ActiveWorkBook.Close(True,'C:\MyWorkBook.xls');

Просто сохранить рабочую книгу, не закрывая ее, можно с помощью методов Save или SaveAs:

App.ActiveWorkBook.Save;

или

App.ActiveWorkBook.SaveAs('C:\MyWorkBook.xls');

Метод SaveAs имеет более десятка параметров, влияющих на то, как именно сохраняется документ (под каким именем, с паролем или без него, какова кодовая страница для содержащегося в ней текста и др.).

Закрыть сам Excel можно с помощью метода Quit объекта Excel.Application. В случае Excel этот метод параметров не имеет.

Вывод документа Excel на устройство печати можно осуществить с помощью метода PrintOut объекта WorkBook, например:

App.ActiveWorkBook.PrintOut;

Если нужно изменить параметры печати, следует указать значения соответствующих параметров метода PrintOut (в случае Excel их восемь).



Создание диаграмм


Диаграммам Excel соответствует объект Chart, который может располагаться как на отдельном листе, так и на листе с данными. Если объект Chart располагается на листе с данными, ему соответствует член коллекции ChartObjects объекта WorkSheet и создание диаграммы нужно начать с добавления элемента в эту колекцию:

Ch:=App.WorkBooks[1].WorkSheets[2].ChartObjects.Add(10,50,400,400);

Параметрами этого метода являются координаты левого верхнего угла и размеры диаграммы в пунктах (1/72 дюйма).

Если же диаграмма располагается на отдельном листе (не предназначенном для хранения данных), то создание диаграммы нужно начать с добавления элемента в коллекцию Sheets объекта Application (которая отличается от коллекции WorkSheets тем, что содержит листы всех типов, а не только листы с данными):

App.WorkBooks[1].Sheets.Add(,,1,xlWBATChart);

В этом случае первый параметр метода Add указывает порядковый номер листа, перед которым нужно поместить данный лист (или данные листы, если их несколько), второй параметр - порядковый номер листа, после которого нужно поместить данный лист (используется обычно один из них), третий параметр - сколько нужно создать листов, а четвертый - какого типа должен быть лист. Значения четвертого параметра совпадают со значениями первого параметра метода Add коллекции WorkBooks объекта Application, и при использовании имен соответствующих констант следует определить их в приложении-контроллере.

Простейший способ создать диаграмму, с точки зрения пользователя, - создать ее с помощью соответствующего эксперта на основе прямоугольной области с данными. Точно так же можно создать диаграмму и с помощью контроллера автоматизации - для этой цели у объекта Chart, являющегося свойством объекта ChartObject (члена коллекции ChartObjects), имеется метод ChartWizard. Первым параметром этого метода является объект Range, содержащий диапазон ячеек для построения диаграммы, а вторым - числовой параметр, указывающий, какого типа должна быть эта диаграмма:


Var Ch: Variant; : Ch.Chart.ChartWizard _ (App.WorkBooks[1].WorkSheets[2].Range['A1:C5'], _    xl3DColumn);

Возможные значения параметра, отвечающего за тип диаграммы, можно найти в справочном файле.

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

Ch.Chart.HasTitle :=1; Ch.Chart.HasLegend := False; Ch.Chart.ChartTitle.Text := _    'Пример диаграммы Excel '; Ch.Chart.Axes(1).HasTitle := True; Ch.Chart.Axes(1).AxisTitle.Text := _    'Подпись вдоль оси абсцисс'; Ch.Chart.Axes(2).HasTitle := True; Ch.Chart.Axes(2).AxisTitle.Text := _    'Подпись вдоль оси ординат';

Еще один способ создания диаграммы - определить все ее параметры с помощью свойств объекта Chart, включая и определение серий, на основе которых она должна быть построена. Данные для серии обычно находится в объекте Range, содержащем строку или столбец данных, а добавление серии к диаграмме производится путем добавления члена к коллекции SeriesCollection, например:

App.WorkBooks[1].Sheets.Add(,,1,xlWBATChart); App.WorkBooks[1].Sheets[1].ChartType := xl3DPie; Rng:=App.WorkBooks[1].WorkSheets[2].Range['B1:B5']; App.WorkBooks[1].Sheets[1].SeriesCollection.Add(Rng);

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

Мы изучили основные операции, применяемые при автоматизации Microsoft Excel. Описания некоторых аналогичных операций для Microsoft Word, например обращение к свойствам документов, были здесь опущены во избежание повторов. Возможности автоматизации Microsoft Excel и Word далеко не исчерпываются приведенными примерами. Сведения о них можно всегда найти в соответствующем справочном файле.



В следующих статьях данного цикла будет рассмотрена автоматизация других приложений Microsoft Office - Microsoft PowerPoint, Microsoft Access, Microsoft Outlook и др.

 
Рассылки Subscribe.Ru
Компьютерная документация от А до Я
HTMLTEXT windowsКОИ-8Латиница
Приглашаем к сотрудничеству авторов книг, статей и обзоров компьютерной тематики
 
Последние компьютерные новости

.exp .s { FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Arial } .exp A { TEXT-DECORATION: none } .exp A:hover { TEXT-DECORATION: underline } .exp .h { FONT-SIZE: 12px; COLOR: #000080; FONT-FAMILY: Verdana, Arial,Helvetica, sans-serif } .exp .dat { FONT-SIZE: 12px; COLOR: #ff0000; FONT-FAMILY: Verdana, Arial,Helvetica, sans-serif }

ar=new Array; ar['m_politics']='Политика'; ar['m_economics']='Экономика'; ar['m_society']='Общество'; ar['m_foreign']='Заграница'; ar['m_regions']='Регионы'; ar['m_media']='СМИ'; ar['m_internet']='Интернет'; ar['m_hi_tech']='Технологии'; ar['m_culture']='Культура'; ar['m_health']='Здоровье'; ar['m_sport']='Спорт'; ar['m_ukraine']='Украина'; str=''; for (i in ar) { if ((aObj=eval(i)) && (aObj.length>0) ) {for (ii=0;ii'; str+=aObj[ii].tit; str+='
'; } } } document.write(str);

 
//

var loc = '';

try{ var loc = escape(top.location.href); }catch(e){;}

var userid = 2825908; var page = 3; var rndnum = Math.round(Math.random() * 999111); document.write(''); document.write(''); document.write('');

    var loc = '';

try{ var loc = escape(top.location.href); }catch(e){;}

var userid = 57689051; var page = 1; var rndnum = Math.round(Math.random() * 999111); document.write(''); document.write(''); document.write('');

    var loc = '';

try{ var loc = escape(top.location.href); }catch(e){;}

var userid = 2825908; var page = 3; var rndnum = Math.round(Math.random() * 999111); document.write(''); document.write(''); document.write('');

//

 
Copyright © 2003-2004 Privater
hotlog_js="1.0"; hotlog_r=""+Math.random()+"&s=109954&im=108&r="+escape(document.referrer)+"&pg="+ escape(window.location.href); document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N");

hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N")

hotlog_js="1.2"; hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+ (((navigator.appName.substring(0,3)=="Mic"))? screen.colorDepth:screen.pixelDepth)

hotlog_js="1.3"

hotlog_r+="&js="+hotlog_js; document.write("")



var d, s, n, uid, zzz, ver, rnd, rn, y; d=document;s=screen;n=navigator;uid=27342; ver=Math.round(parseFloat(n.appVersion)*100);rnd=rn=Math.random(); zzz="&dl="+escape(d.referrer)+"&n="+n.appName+"&swh=" +s.width+'x'+s.height+"&ver="+ver+"&rnd="+rnd; y=""; d.write(y);






Создание и открытие документов Microsoft Word


Для создания примеров использования Microsoft Word можно использовать код создания контроллера, приведенный выше, и модифицировать его, заменяя комментарии кодом, манипулирующим свойствами и методами объекта Word.Application. Мы начнем с создания и открытия документов.

Создать новый документ Word можно, используя метод Add коллекции Documents объекта Application:

App.Documents.Add;

Как создать нестандартный документ? Очень просто - нужно указать имя шаблона в качестве параметра метода Add:

App.Documents.Add('C:\Program Files\ _    Microsoft Office\Templates\1033\Manual.dot');

Для открытия уже существующего документа следует воспользоваться методом Open коллекции Documents:

App.Documents.Open('C:\MyWordFile.doc');

Отметим, что свойство ActiveDocument объекта Word.Application указывает на текущий активный документ среди одного или нескольких открытых. Помимо этого к документу можно обращаться по его порядковому номеру с помощью метода Item; например ко второму открытому документу можно обратиться так:

App.Documents.Item(2)

Отметим, что нумерация членов коллекций в Microsoft Office начинается с единицы.

Сделать документ активным можно с помощью метода Activate:

App.Documents.Item(1).Activate;

Следующее, чему следует научиться - это сохранять документ Word и закрывать сам Word.



Создание таблиц


Создавать таблицы можно двумя способами. Первый заключается в вызове метода Add коллекции Tables объекта Document и последовательном заполнении ячеек данными. Этот способ при позднем связывании работает довольно медленно.

Второй способ, намного более <быстрый>, заключается в создании текста из нескольких строк, содержащих подстроки с разделителями (в качестве разделителя можно использовать любой или почти любой символ, нужно только, чтобы он заведомо не встречался в данных, которые будут помещены в будущую таблицу), и последующей конвертации такого текста в таблицу с помощью метода ConvertToTable объекта Range. Ниже приведен пример создания таблицы из трех строк и трех столбцов этим способом (в качеcтве разделителя, являющегося первым параметром метода ConvertToTable, используется запятая):

Var    Rng : Variant; ...    Rng := App.Selection.Range;    Rng.Collapse(wdCollapseEnd);    Rng.InsertAfter('1, 2, 3');    Rng.InsertParagraphAfter;    Rng.InsertAfter('4,5,6');    Rng.InsertParagraphAfter;    Rng.InsertAfter('7,8,9');    Rng.InsertParagraphAfter;    Rng.ConvertToTable(',');

Отметим, что внешний вид таблицы можно изменить с помощью свойства Format, а также с помощью свойств коллекции Columns, представляющей колонки таблицы, и коллекции Rows, представляющей строки таблицы объекта Table.



VBA и средства разработки контроллеров автоматизации


Как уже было сказано выше, контроллеры автоматизации можно создавать с помощью различных средств разработки, и если вы уже используете какое-либо из инструментальных средств, поддерживающих создание контролеров автоматизации, можно именно им и воспользоваться. Единственное, что следует сделать- это узнать, поддерживается ли вашим средством разработки ранее связывание, если вы планируете его использовать. Примеры простейших контроллеров автоматизации (как правило, для Microsoft Word или Microsoft Excel), дающие представление о том, как вызываются методы сервера, обычно можно найти в комплекте поставки большинства современных средств разработки.

Освоение объектной модели автоматизируемого сервера можно начать с записи необходимой последовательности действий в виде макроса с помощью VBА. Создать макрос можно, выбрав из меню приложения Microsoft Office пункт Tools | Macro |Record New Macro. Просмотр полученного макроса в редакторе кода VBA обычно позволяет понять, как должен выглядеть код, реализующий эту последовательность действий.

Обсудив возможные средства разработки контроллеров автоматизации, можно наконец перейти к самим приложениям Microsoft Office, к их объектным моделям и к их использованию. В качестве средства разработки для приведенных ниже примеров используется Borland Delphi 5, но поскольку в них приводится последовательность вызова свойств и методов объектов Microsoft Office, перенос кода на другие языки программирования не должен вызвать особых затруднений. Если специально не оговорено, в данной статье во всех примерах используется раннее связывание.



Вставка текста и объектовв документ и форматирование текста


Для создания абзацев в документе можно использовать коллекцию Paragraphs объекта Document, представляющую набор абзацев данного документа. Добавить новый абзац можно с помощью метода Add этой коллекции:

App.ActiveDocument.Paragraphs.Add;

Для вставки собственно текста в документ, тем не менее, применяется не объект Paragraph, а объект Range, представляющий любую непрерывную часть документа (в том числе и вновь созданный абзац). Этот объект может быть создан разными способами. Например, можно указать начальный и конечный символы диапазона (если таковые имеются в документе):

var    Rng : Variant; ...    Rng := App.ActiveDocument.Range(2,4); //со 2-го по 4-й символы

или указать номер абзаца (например, только что созданного):

Rng:= App.ActiveDocument.Paragraphs.Item(1).Range;

или указать несколько абзацев, следующих подряд:

Rng := App.ActiveDocument.Range _    (App.ActiveDocument.Paragraphs.Item(3).Range.Start,_    App.ActiveDocument.Paragraphs.Item(5).Range.End)

Вставить текст можно с помощью методов объекта Range InsertBefore (перед диапазоном) или InsertAfter (после диапазона), например:

Rng.InsertAfter('Это вставляемый текст');

Помимо объекта Range текст можно вставлять с помощью объекта Selection, являющийся свойством объекта Word.Application и представляющий собой выделенную часть документа (этот объект создается, если пользователь выделяет часть документа с помощью мыши, и может быть также создан с помощью приложения-контроллера). Сам объект Selection можно создать, применив метод Select к объекту Range, например:

var    Sel : Variant; ... App.ActiveDocument.Paragraphs.Item(3).Range.Select;

В приведенном выше примере в текущем документе выделяется третий абзац.

Если мы хотим вставить строку текста в документ либо вместо выделенного фрагмента текста, либо перед ним, это можно сделать с помощью следующего фрагмента кода:

var    Sel : Variant; ...    Sel := App.Selection;    Sel.TypeText('Это текст, которым мы заменим _       выделенный фрагмент');


Отметим, что если свойство Options.ReplaceSelection объекта Word. Application равно True, выделенный текст будет заменен на новый текст (этот режим действует по умолчанию); если же нужно, чтобы текст был вставлен перед выделенным фрагментом, а не вместо него, следует установить это свойство равным False:

App.Options.ReplaceSelection := False;

Символ конца абзаца при использовании объекта Selection может быть вставлен с помощью следующего фрагмента кода:

Sel.TypeParagraph;

К объекту Selection, так же как и к объекту Range, можно применить методы InsertBefore и InsertAfter. В этом случае, в отличие от предыдущего, вставляемый текст станет частью выделенного фрагмента текста.

С помощью объекта Selection, используя его свойство Font и свойства объекта Font, такие как Bold, Italic, Size,:, можно отформатировать текст. Например, таким образом можно вставить строку, выделенную жирным шрифтом:

Sel.Font.Bold := True; Sel.TypeText('Это текст, который мы выделим _    жирным шрифтом.'); Sel.Font.Bold := False; Sel.TypeParagraph;

Для наложения на вставляемый текст определенного заранее стиля можно использовать свойство Style этого же объекта, например:

Sel.Style := 'Heading 1'; Sel.TypeText('Это текст, который станет _    заголовком'); Sel.TypeParagraph;

Нередко документы Word содержат данные других приложений. Простейший способ вставить такие данные в документ - использовать метод Paste объекта Range:

Var    Rng : Variant; ...    Rng := App.Selection.Range;    Rng.Collapse(wdCollapseEnd);    Rng.Paste;

Естественно, в этом случае в буфере обмена уже должны содержаться вставляемые данные.

Если нужно поместить в буфер обмена часть документа Word, это можно сделать с помощью метода Copy объекта Range:

Var    Rng : Variant; ...    Rng := App.Selection.Range;    Rng.Copy;

Следующее, чему нужно научиться - перемещению курсора в нужное место текста, чем мы и займемся в следующем разделе.


Запуск Microsoft Excel, создание и открытие рабочих книг


Для создания примеров использования Microsoft Excel можно использовать код создания контроллера, приведенный в разделе <Общие принципы создания контроллеров автоматизации>, заменив первый оператор в приведенном примере на следующий:

AppProgID := 'Excel.Application';

и заменить комментарии кодом, манипулирующим свойствами и методами объекта Excel.Application. Отметим, однако, что подключение контроллера автоматизации к имеющейся версии Excel с помощью метода GetActiveOleObject может привести к тому, что вся клиентская часть Excel окажется невидимой (это происходит, если имеющаяся копия Excel запущена в режиме, когда ее пользовательский интерфейс недоступен). Причины подобного поведения автору неизвестны. Поэтому, если существует вероятность возникновения подобной ситуации, лучше упростить код создания контроллера и всегда создавать новую копию Excel.

Изучение создания контроллеров Excel мы начнем с создания и открытия рабочих книг.

Создать новую рабочую книгу Excel можно, используя метод Add коллекции Workbooks объекта Application:

App.WorkBooks.Add;

Для создания рабочей книги на основе шаблона следует указать его имя в качестве первого параметра метода Add:

App.WorkBooks.Add('C:\Program Files\Microsoft _ Office\Templates\1033\invoice.xlt');

В качестве первого параметра этого метода можно также использовать следующие константы:

const    xlWBATChart = $FFFFEFF3; //рабочая книга состоит из листа с диаграммой    xlWBATWorksheet = $FFFFEFB9; //рабочая книга состоит из листа с данными

В этом случае рабочая книга будет содержать один лист типа, заданного указанной константой (график, обычный лист с данными и др.)

Для открытия уже существующего документа следует воспользоваться методом Open коллекции WorkBooks:

App.Documents.Open('C:\MyExcelFile.xls');

Отметим, что свойство ActiveWorkBook объекта Excel.Application указывает на текущую активную рабочую книгу среди одной или нескольких открытых. Помимо этого к рабочей книге можно обращаться по ее порядковому номеру, например ко второй открытой рабочей книге можно обратиться так:


App.WorkBooks[2]

Обратите внимание на то, что в Delphi при использовании позднего связывания синтаксис, используемый для обращения к членам коллекций объектов Excel, отличен от синтаксиса, используемого для обращения к объектам Word - в случае Word мы использовали метод Item, а в случае Excel мы обращаемся к членам коллекции как к элементам массива. Если же вы используете Visual Basic, синтаксис, применяемый для обращения к членам коллекций, будет одинаков для всех коллекций Microsoft Office.

Сделать рабочую книгу активной можно с помощью метода Activate:

App.WorkBooks[2].Activate;

Следующее, чему следует научиться - это сохранять рабочие книги в файлах.


Как получить информацию об операционной системе при помощи WMI


Автор: Randy Birch

Компилятор: Visual Basic 5.0, 6.0

Windows Script Host встроен Microsoft Windows 98, 2000, ME и XP. Если Ваша операционная система Windows 95 или NT4, то прийдётся скачать Windows Script Host с сайта компании Microsoft http://msdn.microsoft.com/scripting/.

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

Добавьте на форму кнопку (Command1) и список (Listview1). Подключите билиотеку в Projects / References Microsoft WMI Scripting Library, и добавьте следующий код:

Option Explicit'/* следующие константы используются для изменения размеров колонок

Private Const LVM_FIRST As Long = &H1000 Private Const LVM_SETCOLUMNWIDTH As Long = (LVM_FIRST + 30) Private Const LVSCW_AUTOSIZE As Long = -1 Private Const LVSCW_AUTOSIZE_USEHEADER As Long = -2

Private Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" _ (ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long

Private Sub Form_Load()

With ListView1 .ListItems.Clear .ColumnHeaders.Clear .ColumnHeaders.Add , , "WMI Property" .ColumnHeaders.Add , , "Value(s)" .View = lvwReport .Sorted = False End With

Command1.Caption = "OS Info"

End Sub

Private Sub Command1_Click()

ListView1.ListItems.Clear Call wmiOperatingSystemInfo Call lvAutosizeControl(ListView1)

End Sub

Private Sub lvAutosizeControl(lv As ListView)

Dim col2adjust As Long

'/* Размер каждой колонки основан на длине текста в заголовке '/* столбца. Если последующая строка шире, то вся колонка '/* подстраивается под эту ширину

For col2adjust = 0 To lv.ColumnHeaders.Count - 1

Call SendMessage(lv.hwnd, _ LVM_SETCOLUMNWIDTH, _ col2adjust, _ ByVal LVSCW_AUTOSIZE_USEHEADER)

Next

End Sub

Private Function SplitDateTimeBias(ByVal leasedate As String, _ leasedatepart As String, _ leasetimepart As String) As Long


'получаем дату и время при помощи 'Win32_NetworkAdapterConfiguration ' и разделяем на компоненты даты и времени, возвращиемые в 'переменных leasedatepart и leasetimepart

Dim pos As Long Dim bias As Long

pos = InStr(leasedate, ".")

If pos > 0 Then

bias = StripTimeZoneBias(leasedate) leasedatepart = Left$(leasedate, 8) leasetimepart = Mid$(leasedate, 9, pos - Len(leasedatepart) - 1) leasedatepart = InsertInString(leasedatepart, "-", 5, "") leasedatepart = InsertInString(leasedatepart, "-", 8, "") leasetimepart = InsertInString(leasetimepart, ":", 3, "") leasetimepart = InsertInString(leasetimepart, ":", 6, "")

SplitDateTimeBias = bias

Else

End If

End Function

Private Function InsertInString(ByVal sOriginal As String, _ sReplace As String, _ nField As Long, _ sDelimeter As String) As String

Dim nCount As Long Dim nStart As Long Dim nLast As Long

Do While InStr(nStart + 1, sOriginal, sDelimeter) > 0

nStart = InStr(nStart + 1, sOriginal, sDelimeter) nCount = nCount + 1

If nCount >= nField Then Exit Do End If

nLast = nStart

Loop

Select Case nCount

Case 1 InsertInString = sReplace & Mid$(sOriginal, nStart)

Case Is >= nField InsertInString = Mid$(sOriginal, 1, nLast) & _ sReplace & Mid$(sOriginal, nStart) Case Else InsertInString = sOriginal & _ String$((nField - 1) - nCount, sDelimeter) & _ sReplace End Select

End Function

Private Function StripTimeZoneBias(leasedate As String) As Long

Dim pos As Long Dim tmp As String

pos = InStr(leasedate, "-")

If pos = 0 Then

pos = InStr(leasedate, "+")

If pos = 0 Then StripTimeZoneBias = 0 Else

End If

Else

tmp = Mid$(leasedate, pos, Len(leasedate)) leasedate = Mid$(leasedate, 1, pos - 1) StripTimeZoneBias = CLng(tmp)

End If

End Function

Private Sub wmiOperatingSystemInfo()

Dim wmiObjSet As SWbemObjectSet Dim obj As SWbemObject Dim msg As String Dim itmx As ListItem

'рабочие переменные для возвращаемых данных



Dim dtb As String Dim d As String Dim t As String Dim bias As Long

On Local Error Resume Next

Set wmiObjSet = GetObject("winmgmts:{impersonationLevel=impersonate}")._ InstancesOf("Win32_OperatingSystem")

For Each obj In wmiObjSet

'информация о версии

Set itmx = ListView1.ListItems.Add(, , "Operating System") itmx.SubItems(1) = obj.Caption Set itmx = ListView1.ListItems.Add(, , "Version") itmx.SubItems(1) = obj.Version Set itmx = ListView1.ListItems.Add(, , "BuildNumber") itmx.SubItems(1) = obj.BuildNumber Set itmx = ListView1.ListItems.Add(, , "BuildType") itmx.SubItems(1) = obj.BuildType Set itmx = ListView1.ListItems.Add(, , "Latest Service Pack") itmx.SubItems(1) = obj.CSDVersion Set itmx = ListView1.ListItems.Add(, , "EncryptionLevel") itmx.SubItems(1) = obj.EncryptionLevel & "-bit" Set itmx = ListView1.ListItems.Add(, , "OSType") Select Case obj.OSType Case 15: msg = "WIN3x" Case 16: msg = "WIN95" Case 17: msg = "WIN98" Case 18: msg = "WINNT" Case 19: msg = "WINCE" Case Else: msg = "non-windows - see MSDN for complete list" End Select itmx.SubItems(1) = msg

'информация о системе

Set itmx = ListView1.ListItems.Add(, , "BootDevice") itmx.SubItems(1) = obj.BootDevice Set itmx = ListView1.ListItems.Add(, , "RegisteredUser") itmx.SubItems(1) = obj.RegisteredUser Set itmx = ListView1.ListItems.Add(, , "SerialNumber") itmx.SubItems(1) = obj.SerialNumber Set itmx = ListView1.ListItems.Add(, , "Status") itmx.SubItems(1) = obj.Status Set itmx = ListView1.ListItems.Add(, , "SystemDevice") itmx.SubItems(1) = obj.SystemDevice Set itmx = ListView1.ListItems.Add(, , "SystemDrive") itmx.SubItems(1) = obj.SystemDrive Set itmx = ListView1.ListItems.Add(, , "WindowsDirectory") itmx.SubItems(1) = obj.WindowsDirectory Set itmx = ListView1.ListItems.Add(, , "SystemDirectory") itmx.SubItems(1) = obj.SystemDirectory



Set itmx = ListView1.ListItems.Add(, , "LocalDateTime") dtb = obj.LocalDateTime bias = SplitDateTimeBias(dtb, d, t) itmx.SubItems(1) = Format$(d, "dddd mmm d, yyyy") & " " & _ Format$(t, "hh:mm") & _ " (includes " & bias & " bias)"

Set itmx = ListView1.ListItems.Add(, , "InstallDate") dtb = obj.InstallDate bias = SplitDateTimeBias(dtb, d, t) itmx.SubItems(1) = Format$(d, "dddd mmm d, yyyy") & _ " at " & _ Format$(t, "hh:mm") & _ " (includes " & bias & " bias)"

Set itmx = ListView1.ListItems.Add(, , "LastBootUpTime") dtb = obj.LastBootUpTime bias = SplitDateTimeBias(dtb, d, t) itmx.SubItems(1) = Format$(d, "dddd mmm d, yyyy") & _ " at " & _ Format$(t, "hh:mm") & _ " (includes " & bias & " bias)"

'страна, язык, временная зона

Set itmx = ListView1.ListItems.Add(, , "OSLanguage") itmx.SubItems(1) = obj.OSLanguage Set itmx = ListView1.ListItems.Add(, , "CodeSet") itmx.SubItems(1) = obj.CodeSet Set itmx = ListView1.ListItems.Add(, , "Locale") itmx.SubItems(1) = obj.Locale Set itmx = ListView1.ListItems.Add(, , "CountryCode") itmx.SubItems(1) = obj.CountryCode Set itmx = ListView1.ListItems.Add(, , "CurrentTimeZone") itmx.SubItems(1) = obj.CurrentTimeZone

'информация о использовании памяти

Set itmx = ListView1.ListItems.Add(, , "ForegroundApplicationBoost") Select Case obj. ForegroundApplicationBoost Case 0: msg = "none" Case 1: msg = "minimum" Case 2: msg = "maximum (default)" End Select itmx.SubItems(1) = msg

Set itmx = ListView1.ListItems.Add(, , "TotalVisibleMemorySize") itmx.SubItems(1) = FormatNumber(obj.TotalVisibleMemorySize, 0) Set itmx = ListView1.ListItems.Add(, , "FreePhysicalMemory") itmx.SubItems(1) = FormatNumber(obj.FreePhysicalMemory, 0) Set itmx = ListView1.ListItems.Add(, , "TotalVirtualMemorySize") itmx.SubItems(1) = FormatNumber(obj.TotalVirtualMemorySize, 0) Set itmx = ListView1.ListItems.Add(, , "FreeVirtualMemory") itmx.SubItems(1) = FormatNumber(obj.FreeVirtualMemory, 0) Set itmx = ListView1.ListItems.Add(, , "FreeSpaceInPagingFiles") itmx.SubItems(1) = FormatNumber(obj.FreeSpaceInPagingFiles, 0) Set itmx = ListView1.ListItems.Add(, , "SizeStoredInPagingFiles") itmx.SubItems(1) = FormatNumber(obj.SizeStoredInPagingFiles, 0)



Next

End Sub

Ниже приведена вся информация, возвращаемая классом Win32_OperatingSystem (некоторые операционные системы могут возвращать не всю информацию, предесмотренную данным классом):
  

string BootDevice
string BuildNumber
string BuildType
string Caption
string CodeSet
string CountryCode
string CreationClassName
string CSCreationClassName
string CSDVersion
string CSName
sint16 CurrentTimeZone
boolean Debug
string Description
boolean Distributed
string EncryptionLevel
uint8 ForegroundApplicationBoost
uint64 FreePhysicalMemory
uint64 FreeSpaceInPagingFiles
uint64 FreeVirtualMemory
datetime InstallDate
datetime LastBootUpTime
datetime LocalDateTime
string Locale
string Manufacturer
uint32 MaxNumberOfProcesses
uint64 MaxProcessMemorySize
string Name
uint32 NumberOfLicensedUsers
uint32 NumberOfProcesses
uint32 NumberOfUsers
string Organization
uint32 OSLanguage
uint32 OSProductSuite
uint16 OSType
string OtherTypeDescription
string PlusProductID
string PlusVersionNumber
boolean Primary
uint8 QuantumLength
uint8 QuantumType
string RegisteredUser
string SerialNumber
uint16 ServicePackMajorVersion
uint16 ServicePackMinorVersion
uint64 SizeStoredInPagingFiles
string Status
string SystemDevice
string SystemDirectory
string SystemDrive
uint64 TotalSwapSpaceSize
uint64 TotalVirtualMemorySize
uint64 TotalVisibleMemorySize
string Version
string WindowsDirectory
                                         

                                                        ОБСУДИТЬ СТАТЬЮ НА ФОРУМЕ





  Словарь       Яндекс.Лингво

   

  Сделать стартовой     

Программирование
 -  Основы Visual Basic
 -  Visual Basic
 -  Кирпичики для  VB
 -  Visual Basic 6.0 избранное
 -  API
Разное
 -  БЕЗОПАСНОСТЬ INTRANET
- Политика безопасности для электронной почты.
 - Сравнительная характеристика Internet Explorer и Netscape Navigator
 - Как подключить к Интернету несколько компьютеров через один модем
 -  Мифы компьютерной безопасности
 -  Оптимизация Windows 98.
 - ЧТО ПОМHИТ КОМПЬЮТЕР?
 - О НЕКОТОРЫХ МЕТОДАХ ОБНАРУЖЕНИЯ ЗАКЛАДОЧНЫХ УСТРОЙСТВ
- Хакеры или кракеры "Что такое хорошо и что такое плохо?"
 - Атака из сети
                                                            Нам весьма интересны любые Ваши предложения о сотрудничестве.
                         

 

Дизайн: Кулишов Андрей
Напишите мне
#bn { DISPLAY: block } #bt { DISPLAY: block }


Файлы Windows Scripting Host



      1. Основы Windows Scripting Host

      1.1. Файлы Windows Scripting Host
 

        Установленный Windows Script Host поддерживает несколько видов файлов:  vbs, vbe, js, jse, wsf, wsc и wsh. Все они (кроме vbe и jse) являются простыми текстовыми файлами и могут редактироваться в любом текстовом редакторе.
 
        Файлы .vbs и .js являются файлами написанными на языке сценариев MS Visual Basic Script и MS JScript соответственно (см. глава 1.2. Языки VBS и JScript).

        vbe и jse-файлы – это vbs и js-файлы зашифрованные с помощью программы MS Script Encoder (см. Приложение 5. Создание зашифрованных сценариев)

        Файлы с расширением .wsf – это файлы содержащие XML-разметку для работы с WSH. Подробнее см. главу “Использование XML”.

        Файлы wsc - Windows Script Components (WSC) позволяют упаковывать сценарии для использования их в качестве СОМ-компонентов. По сути, это те же wsf-файлы, еще и содержащие COM-компоненты.

        wsh–файлы являются файлами настроек Сервера Сценариев и выполняют по сути ту же роль, что и .pif файлы для DOS программ.
        Как и .pif-файлы содержат настройки приложений DOS, так и .wsh-файлы содержат настройки для всех вышеперечисленных файлов. Обладая только несколько скромными возможностями по сравнению с PIF.
        Для иллюстрации создадим пустой файл с любым из вышеперечисленных расширений (vbs, js или wsf).


        Пусть это будет Example1.vbs. Щелкнем на нем правой кнопкой мыши и в окне свойств файла выберем вкладку “Сценарий” и увидим окно:

        Изменим настройки на этой вкладке, поставив или сняв любой флажок, чтобы кнопка “Вернуть установки по умолчанию” стала доступна. После этого щелкним OK.
        У нас появился файл с расширением wsh – Example1.wsh.
    В дальнейшем, если мы хотим использовать измененные нами настройки, нужно вместо файла Example1.vbs нужно запускать файл Example1.wsh.
    Откроем файл Example.wsh с помощью Блокнота и увидим следующий текст:

    [ScriptFile]
    Path=C:\Example1.vbs

    Timeout=5
    DisplayLogo=1
    BatchMode=0

        Параметр Path в разделе [ScriptFile] содержит путь к файлу, для которого искользуестя wsh-файл.
        Настройки в разделе [Options] – это сами настройки, ради которых, собственно и создан файл настройки.

    Timeout – определяет время отведенное для  выполнения сценария.

        DisplayLogo – отвечает за вывод эмблемы Windows Script Host, при запуске в командном режиме. Если изменить его на 0, то эмблема отображаться не будет.

    BatchMode – включает/выключает пакетный режим. Если ему присвоить значение 1, то сценарий будет выполнятся в пакетном режиме – без вывода информации на экран и сообщений об ошибках.
 

Назад по тексту | Содержание



О проекте | История | E-mail

Copyright (C) 2000 - 2001 Alex Neverov

#bn { DISPLAY: block } #bt { DISPLAY: block }


Ввод-вывод в режиме командной строки



            3.5. Ввод-вывод в режиме командной строки

        В Windows Scripting Host 2.0 появились методы, позволяющие работать с вводом-выводом информации в сценариях, запущенных под CScript.exe. Все они принадлежат объекту WScript.

        Метод StdIn – позволяет вводить данные в сценарий в режиме командной строки

        Синтаксис:

    WScript.StdIn
 

        Метод StdOut – выводит данные в строку

         Синтаксис:

    WScript.StdOut
 

        Метод StdErr – предназначен для вывода данных об ошибках

         Синтаксис:

    WScript.StdErr

        Важно помнить, что все эти методы могут работать, только будучи запущены, под CScript.exe. Если попытаться запустить их в диалоговом режиме, то будет получено сообщение “Неверный дескриптор” (Invalid Handle).

        VBScript:

    WScript.StdOut.WriteLine("Введите что-нибудь и нажмите Enter")
    x = WScript.StdIn.ReadLine
    If x = "" Then
    WScript.Echo "Ничего не введено"
    Else
    WScript.Echo "Вы ввели " + x
    End If

        JScript:

    WScript.StdOut.WriteLine("Введите свое имя и нажмите Enter");


    x = WScript.StdIn.ReadLine();
    if (x == "")
    {
    WScript.Echo("Вы не ввели своего имени");
    }
    else
    {
    WScript.Echo("Здравствуйте ",x);
    }
 

        Метод StdErr работает подобно методу StdOut.

        WScript.StdErr.WriteLine("Сообщение об ошибке")
 

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

Назад по тексту | Содержание | Вперед по тексту



О проекте | История | E-mail

Copyright (C) 2000 - 2001 Alex Neverov

#bn { DISPLAY: block } #bt { DISPLAY: block }


Запуск других приложений



         4.2. Запуск других приложений

         С помощью метода Run объекта WshShell мы можем запускать другие приложения.

         Синтаксис:

         object.Run (strCommand, [intWindowStyle], [bWaitOnReturn])

         где

         object - объект WshShell

         strCommand - исполняемая команда

         Не обязательные параметры:

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

         bWaitOnReturn - может принимать значение true или false, указывающее, следует ли сценарию дожидаться окончания выполнения запущенного приложения. true - выполнение сценария приостанавливается до тех пор, пока не будет закрыто запущенное приложение. false - не дожидаться.

         Значения, принимаемые параметром intWindowStyle:
 
 

Значение Описание
0 Запуск в скрытом виде
1 Обычный размер окна, если окно свернуто или развернуто на весь экран, то ему возвращается исходный вид и положение на экране
2 Запуск в свернутом виде
3 Развернутое на весь экран
4 Запуск в обычном размере, в неактивном состоянии (без фокуса)
8 Обычный размер в неактивном состоянии, но в фокусе остается запустившее приложение
 

         В качестве примера, с помощью метода Run запустим программу Блокнот, с загруженным вызывающим сценарием.


         VBScript:

     Dim WshShell
     'Создаем объект WshShell:
     Set WshShell = WScript.CreateObject("WScript.Shell")
 
    'Вызываем Блокнот и добавляем к нему в качестве параметра
    'путь исполняемого сценария:
     WshShell.Run ("%windir%\notepad " & WScript.ScriptFullName)
 

         JScript:

    //Создаем объект WshShell:
     var WshShell = new ActiveXObject("WScript.Shell");
 
    //Вызываем Блокнот и добавляем к нему в качестве параметра путь
    // исполняемого сценария:
     WshShell.Run ("%windir%\\notepad " + WScript.ScriptFullName);
 
 

Назад по тексту | Содержание | Вперед по тексту



О проекте | История | E-mail

Copyright (C) 2000 - 2001 Alex Neverov

#bn { DISPLAY: block } #bt { DISPLAY: block }


Создание ярлыков



        4.4. Создание ярлыков

        Для создания ярлыков используется метод CreateShortcut

         Синтаксис:

     object.CreateShortcut(strPathname)

         где

        object - объект WshShell

          strPathname - имя и полный путь к ресурсу, для которого создается ярлык (например, это может быть файл, интернет-адрес и т.д.).

         Для демонстрации метода CreateShortcut создадим на нашем рабочем столе ярлык блокнота.

         В самом процессе создания ярлыка можно выделить несколько этапов:

        1. Собственно создание ярлыка.
        2. Установка его свойств.
        3. Сохранения ярлыка с установленными свойствами

        Начнем с первого пункта создадим ярлык на рабочем столе

        VBScript:
 

    Dim WshShell, DesktopPath, Nshortcut

    ‘Создаем объект WshShell:
     Set WshShell = CreateObject(“WScript.Shell”)
 
     ‘получаем путь к нашему рабочему столу:
     DesktopPath = WshShell.SpecialFolders(“Desktop”)
 
    ‘создаем ярлык:
    Set NShortcut = WshShell.CreateShortcut(DesktopPath & “\Блокнот.lnk”)


 

         JScript:

     //Создаем объект WshShell:
    var WshShell = new ActiveXObject(“WScript.Shell”);
 
    //получаем путь к нашему рабочему столу:
     var DesktopPath = WshShell.SpecialFolders(“Desktop”);

    //создаем ярлык:
    var NShortcut = WshShell.CreateShortcut(DesktopPath + “\\Блокнот.lnk”);
 

         На втором этапе мы должны установить следующие свойства ярлыка, такие как:

         TargetPath – имя ресурса на который ссылается ярлык.

         WindowStyle – стиль запускаемого окна.
 
         Может принимать следующие значения:

         1 – открыть как обычное окно;
         3 – раскрыть на весь экран;
         7 – запустить в свернутом виде.
 

         HotKey – устанавливает клавиши быстрого вызова

         IconLocation – расположение иконки ярлыка

         Description – всплывающая подсказка (комментарий)

         WorkingDirectory – устанавливает рабочий каталог


         И, на самом последнем этапе создания ярлыка, мы сохраняем установленные свойства и сам ярлык методом Save.

     Таким образом, наш сценарий полностью будет иметь следующий вид:


             VBScript:

     Dim WshShell, DesktopPath, Nshortcut

     ‘Создаем объект WshShell:
     Set WshShell = CreateObject(“WScript.Shell”)


 
    ‘получаем путь к нашему рабочему столу:
     DesktopPath = WshShell.SpecialFolders(“Desktop”)
 
    ‘создаем ярлык:
     Set NShortcut = WshShell.CreateShortcut(DesktopPath & “\Блокнот.lnk”)
 
    'С помощью функции API "%windir%" получаем путь к папке
    'WINDOWS и Блокноту и помещаем полученный путь в   'TargetPath:
     NShortcut.TargetPath = "%windir%\notepad.exe"

    'Устанавливаем обычный стиль окна:
    NShortcut.WindowStyle = 1

    'Клавиши быстрого вызова:
    NShortcut.Hotkey = "CTRL+ALT+f"
 
    'Путь к файлу иконки:
    NShortcut.IconLocation = "notepad.exe, 0"
 
    'Устанавливаем всплывающую подсказку:
    NShortcut.Description = "Ярлык блокнота"
 
    'Устанавливаем в качестве рабочей папки - Рабочий стол:
    NShortcut.WorkingDirectory = DesktopPath
 
    'Сохраняем настройки и сам ярлык:
    NShortcut.Save
 
 

         JScript:

    //Создаем объект WshShell:
     var WshShell = new ActiveXObject(“WScript.Shell”);
 
    //получаем путь к нашему рабочему столу:
     DesktopPath = WshShell.SpecialFolders(“Desktop”);
 
     //создаем ярлык:
     var NShortcut = WshShell.CreateShortcut(DesktopPath +
     “\\Блокнот.lnk”);
 
    //С помощью функции API "%windir%" получаем путь к папке
    //WINDOWS и Блокноту и помещаем полученный путь в
    //TargetPath:
     NShortcut.TargetPath = "%windir%\\notepad.exe" ;



    //Устанавливаем обычный стиль окна:
    NShortcut.WindowStyle = 1;

    //Клавиши быстрого вызова:
    NShortcut.Hotkey = "CTRL+ALT+f" ;

    //Путь к файлу иконки:
    NShortcut.IconLocation = "notepad.exe, 0" ;
 
    //Устанавливаем всплывающую подсказку:
    NShortcut.Description = "Ярлык блокнота" ;
 
    //Устанавливаем в качестве рабочей папки - Рабочий стол:
    NShortcut.WorkingDirectory = DesktopPath;
 
    //Сохраняем настройки и сам ярлык:
    NShortcut.Save();
 
 

        Кроме ярлыков к локальным ресурсам можно создавать ярлыки Интернета. Создадим ярлык адреса компании Microsoft.

         VBScript:

    Dim WshShell, UrlLink
    Set WshShell = WScript.CreateObject("WScript.Shell")
    Set UrlLink = WshShell.CreateShortcut("Microsoft.URL")
    UrlLink.TargetPath = "http://www.microsoft.com"
    UrlLink.Save

        JScript:

    var WshShell = WScript.CreateObject("WScript.Shell");
    var UrlLink = WshShell.CreateShortcut("Micrisoft.URL");
    UrlLink.TargetPath = "http://www.microsoft.com";
    UrlLink.Save();
 

Назад по тексту | Содержание | Вперед по тексту



О проекте | История | E-mail

Copyright (C) 2000 - 2001 Alex Neverov

#bn { DISPLAY: block } #bt { DISPLAY: block }


Информация о системе



       4.5. Информация о системе

        Свойство Environment объекта WshShell, позволяет работать с системными  переменными окружения. Для этого создается объект WshEnvironment

         Синтаксис:

         WshShell.Environment([strType])

         где

         strType – может принимать параметры "System", "User", "Volatile" или "Process" .

         Значение “Volatile" используется для работы с данными, передаваемыми другими программами, а "System", "User" и "Process" используются для работы с системными данными.

         Таблица системных данных среды доступных с помощью значений "System", "User" и "Process"
 
 

Где присутствует

Значение Описание System User Process
NUMBER_OF_PROCESSORS Количество процессоров на данном компьютере

X

-

X

PROCESSOR_ARCHITECTURE Тип процессора

X

-

X

PROCESSOR_IDENTIFIER Расширенные данные о процессоре

X

-

X

PROCESSOR_LEVEL Поколение процессора

X

-

X

OS Операционная система

X

-

X

COMSPEC Путь к файлу командной строки

(cmd.exe или command.com)

X

-

X

HOMEDRIVE

Первый локальный диск (обычно c:)

-

-

X

PATH

Заданные системные пути

X

X

X

PATHEXT

Исполняемые файлы (.exe , .com и т.д.)

X

-

X

SYSTEMDRIVE

Диск на котором находится директория с операционной системой


-

-

X SYSTEMROOT Директория Windows

-

-

X WINDIR Директория Windows

X

-

X TEMP или TMP Папка для временных файлов

-

X



         Следующий пример выводит на экран некоторые системные данные

         VBScript:

‘создаем объект WshShell:
Set WshShell = WScript.CreateObject("WScript.Shell")

‘создаем объект Environment со значением SYSTEM:
Set WshSysEnv = WshShell.Environment("SYSTEM")

‘создаем объект Environment со значением PROCESS:
Set WshProEnv = WshShell.Environment("PROCESS")

SysInfo = "Системные параметры компьютера:" + Chr(10)+ Chr(10)
SysInfo = SysInfo + "Процессоров: " + _
WshSysEnv("NUMBER_OF_PROCESSORS") + Chr(10)
SysInfo = SysInfo + "Архитектура: " + _
WshSysEnv("PROCESSOR_ARCHITECTURE") + Chr(10)
SysInfo = SysInfo + "ID процессора: " + _
WshSysEnv("PROCESSOR_IDENTIFIER") + Chr(10)
SysInfo = SysInfo + "Поколение: " + _
WshSysEnv("PROCESSOR_LEVEL") + Chr(10)
SysInfo = SysInfo + "Операционная система: " + WshSysEnv("OS") + Chr(10)
SysInfo = SysInfo + "Файл командной строки: " + _
WshProEnv("COMSPEC") + Chr(10)
SysInfo = SysInfo + "Пути: " + WshProEnv("PATH") + Chr(10)
SysInfo = SysInfo + "Исполняемые файлы: " + _
WshSysEnv("PATHEXT") + Chr(10)
SysInfo = SysInfo + "Директория Windows: " + _
WshProEnv("WINDIR") + Chr(10)
SysInfo = SysInfo + "Временная папка: " + WshProEnv("TEMP") + Chr(10)
MsgBox SysInfo
 

        JScript:

// создаем объект WshShell:
var WshShell = WScript.CreateObject("WScript.Shell");

// создаем объект Environment со значением SYSTEM:
var WshSysEnv = WshShell.Environment("SYSTEM");

// создаем объект Environment со значением PROCESS:


var WshProEnv = WshShell.Environment("PROCESS");

var SysInfo = "Системные параметры компьютера:" + "\n" +"\n";
SysInfo += "Процессоров: " + WshSysEnv("NUMBER_OF_PROCESSORS") + "\n";
SysInfo +=  "Архитектура: " + WshSysEnv("PROCESSOR_ARCHITECTURE") + "\n";
SysInfo += "ID процессора: " + WshSysEnv("PROCESSOR_IDENTIFIER") + "\n";
SysInfo += "Поколение: " + WshSysEnv("PROCESSOR_LEVEL") + "\n";
SysInfo += "Операционная система: " + WshSysEnv("OS") + "\n";;
SysInfo += "Файл командной строки: " + WshProEnv("COMSPEC") + "\n";;
SysInfo += "Пути: " + WshProEnv("PATH") + "\n";
SysInfo += "Исполняемые файлы: " + WshSysEnv("PATHEXT") + "\n";
SysInfo += "Директория Windows: " + WshProEnv("WINDIR") + "\n";
SysInfo += "Временная папка: " + WshProEnv("TEMP") + "\n";
WScript.Echo(SysInfo);


         При исполнении данных сценариев в среде Windows 98, не удастся получить некоторые параметры.
 

Назад по тексту | Содержание | Вперед по тексту



О проекте | История | E-mail

Copyright (C) 2000 - 2001 Alex Neverov

#bn { DISPLAY: block } #bt { DISPLAY: block }


Сетевые диски



     5.2. Сетевые диски

        Для работы с сетевыми дисками Windows Script Host предоставляет несколько методов, которые позволяют получать сведения о подключенных сетевых дисках, подключать сетевые диски и отключаться от них.

        EnumNetworkDrives - возвращает список подключенных сетевых дисков.

         Синтаксис:

         objDrives = object.EnumNetworkDrive

         где

         object - объект WshNetwork

         objDrives - переменная, которой присваивается ссылка на коллекцию сетевых дисков

         VBScript:

    Dim WshNetwork, Drives
    Set WshNetwork = WScript.CreateObject("WScript.Network")
    Set Drives = WshNetwork.EnumNetworkDrives
    WScript.Echo "Подключены сетевые диски: "
    For i = 0 to Drives.Count - 1 Step 2
    WScript.Echo "Диски " & Drives.Item(i) & " = " & Drives.Item(i+1)
    Next
 

         JScript:

         var WshNetwork = new ActiveXObject("WScript.Network");
    var Drives = WshNetwork.EnumNetworkDrives();
    WScript.Echo("Подключены сетевые диски: ");
    for(i=0; i<Drives.Count(); i+=2)


    {
    WScript.Echo("Drive " + Drives.Item(i) + " = " + Drives.Item(i+1));
    }
 
 
         MapNetworkDrive - назначает заданную букву сетевому диску.

         Синтаксис:

         WshNetwork.MapNetworkDrive strLocalName, strRemoteName, [bUpdateProfile], [strUser], [strPassword]

         где

         strLocalName - назначаемая буква сетевого диска

         strRemoteName - удаленное имя

         Необязательные параметры:

         bUpdateProfile - логическая величина определяющая сохранять ли сделанную настройку в пользовательской конфигурации.

         strUser, strPassword - вы можете указать имя и пароль для доступа к диску.
 

         VBScript:

    'создаем объект WshNetwork:
    Set WshNetwork = CreateObject("WScript.Network")

    'назначаем сетевой ресурс Server\PublicFiles как сетевой диск Z:
    WshNetwork.MapNetworkDrive "Z:", "\\Server\PublicFiles"
 

         JScript:

    //создаем объект WshNetwork:
    var WshNetwork = new ActiveXObject("WScript.Network");

    //назначаем сетевой ресурс Server\PublicFiles как сетевой диск Z:
    WshNetwork.MapNetworkDrive("Z:", "\\Server\PublicFiles");
 
 

         RemoveNetworkDrive - отключает сетевой диск

         Синтаксис:

         WshNetwork.RemoveNetworkDrive strName, [bForce], [bUpdateProfile]



         где:

         strName - имя диска

         Необязательные параметры:

         bForce - логический параметр. Если принимает значение true, то сетевой диск отключается, даже если он в настоящий момент используется данным компьютером.
 
         bUpdateProfile - логический параметр, указывающий, сохранить ли сделанную настройку в пользовательском профиле.

         VBScript:

    'создаем объект WshNetwork:
    Set WshNetwork = WScript.CreateObject("WScript.Network")

    'подключаем сетевой диск Z:
    WshNetwork.MapNetworkDrive "Z:", "\\Server\PublicFiles"

    'отключаем сетевой диск Z:
    WshNetwork.RemoveNetworkDrive "Z:"
 

         JScript:

     //создаем объект WshNetwork:
    var WshNetwork = new ActiveXObject("WScript.Network");

    //подключаем сетевой диск Z:
    WshNetwork.MapNetworkDrive("Z:", "\\Server\PublicFiles");

    //отключаем сетевой диск Z:
    WshNetwork.RemoveNetworkDrive("Z:");
 
 
 

Назад по тексту | Содержание | Вперед по тексту



О проекте | История | E-mail

Copyright (C) 2000 - 2001 Alex Neverov

#bn { DISPLAY: block } #bt { DISPLAY: block }


Объект FileSystemObject



     6. Файлы

      6.1. Объект FileSystemObject

        Для файловых операций применяется объект FileSystemObject.
        Он не является прямым дочерним объектом WSH, а предназначен для использования совместно с языками сценариев.
         Вообще сами по себе языки сценариев VBS и JScript не могут работать с файлами и производить какие-либо действия над ними. Работать с файлами могут элементы ActiveX. Но и VBScript и JScript могут создавать объекты ActiveX (т.н. контейнеры объектов) и работать с ними. Для этого и используется FileSystemObject.
         Для создания элемента ActiveX служит метод CreateObject. Создадим для работы экземпляр объекта FileSystemObject.
 
         VBS:

     Set FSO = CreateObject(“Scripting.FileSystemObject”)

         JScript:

     var FSO = new ActiveXObject(“Scripting.FileSystemObject”);


 FileSystemObject (FSO) содержит следующие объекты и коллекции:
 
 

Объект/Коллекция Описание
FileSystemObject Основной объект. Содержит методы и свойства, которые позволяют создавать, удалять, получать информацию, и управлять дисками, папками и файлами. Многие методы связанные с этим объектом дублируются в других объектах FSO, которые предусматриваются для удобства.
Drive Объект. Содержит методы и свойства, которые позволяют собирать информацию о накопителях, имеющихся в системе, как например, имя диска и сколько свободного места на диске. Имейте в виду, что "диск" не обязательно является жестким диском, но может быть накопителем CD-ROM, виртуальным диском RAM, и так далее. Накопитель не должен обязательно присутствовать на данном компьютере, он может быть доступен и через сеть.
Drives Коллекция. Включает в себя все диски на данном компьютере независимо от их типа (HDD, CD-ROM и т.д.).
File Объект. Содержит методы и свойства, которые позволяют создавать, удалять, или перемещать файл. Также получают сведения об имени файла, пути к нему, и другие свойства.
Files Коллекция. Содержит список всех файлов, находящихся в данной папке.
Folder Объект. Содержит методы и свойства, которые позволяют создавать, удалять, или перемещать папки. Также получают сведения об имени папки, пути к ней, и другие свойства.
Folders Коллекция. Содержит список всех папок, находящихся в конкретной папке.
TextStream Объект. Позволяет читать и делать записи в текстовые файлы.
 

Назад по тексту | Содержание | Вперед по тексту

О проекте | История | E-mail


Copyright (C) 2000 - 2001 Alex Neverov

#bn { DISPLAY: block } #bt { DISPLAY: block }



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



         6.2. Работа с файлами

         FileSystemObject (далее FSO) предоставляет некоторые возможности для работы с текстовыми файлами. Можно создавать, удалять, копировать и перемещать файлы.

         Для создания текстового файла применяют метод CreateTextFile. Синтаксис:

         FSO.CreateTextFile( [, overwrite[, unicode]])

         где:

         filename – имя создаваемого файла.

         Необязательные параметры:

         owerwrite – логический параметр (true или false), указывает, перезаписывать ли уже существующий файл с таким именем.

         unicode – логический параметр (true или false), определяющий кодировку создаваемого файла. По умолчанию используется кодировка ASCII. Если принимает значение true – то файл создается в кодировке unicode.

         VBScript:

    Dim FSO, MyFile
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set MyFile = fso.CreateTextFile("c:\testfile.txt", true)

         JScript:

    var FSO = new ActiveXObject("Scripting.FileSystemObject");
    var MyFile = fso.CreateTextFile("c:\\testfile.txt", true);

         Примечание. При использовании JScript, при указании пути, вместо одной косой черты (“\”) следует ставить две (“\\”). Это правило следует соблюдать, потому что интерпретатор, когда встречает в тексте сценария одну косую черту, ожидает что за ней последует спецсимвол JScript, (см.справочник JScript) и выдает сообщение об ошибке.


         Для проверки существования файлов служит метод FileExists.

         VBScript:

    Set FSO = CreateObject("Scripting.FileSystemObject")
    If (FSO.FileExists("c:\autoexec.bat")) Then
        MsgBox "Файл autoexec.bat существует"
    Else
        MsgBox "Файл autoexec.bat  не существует"
    End If

        JScript:

    var FSO = new ActiveXObject("Scripting.FileSystemObject");
      if (FSO.FileExists("c:\\autoexec.bat"))
        WScript.Echo("Файл autoexec.bat существует");
    else
         WScript.Echo("Файл autoexec.bat не существует");
 

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

         VBScript:

    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set file1 = FSO.GetFile(“MyFile.txt”)

        JScript:

    var FSO = new ActiveXObject("Scripting.FileSystemObject");
    var file1 = FSO.GetFile(“MyFile.txt”);
 

         Для копирования, перемещения и удаления файлов объект FSO предоставляет несколько методов, в зависимости от того какой объект будет использоваться для операций  FSO или file. Они показаны в следующей таблице.
 
 


Действие
Объект.Метод
Перемещение File.Move или FileSystemObject.MoveFile
Копирование File.Copy или FileSystemObject.CopyFile
Удаление File.Delete или FileSystemObject.DeleteFile
&


nbsp;

         Копирование файлов.

         VBScript:

    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set file1 = FSO.CreateTextFile("c:\test.txt")
    Set file2  = FSO.GetFile("c:\test.txt")
    file2.Copy("c:\0\test1.txt")

        JScript:

    FSO = new ActiveXObject("Scripting.FileSystemObject");
    var file1 = FSO.CreateTextFile("c:\\test.txt");
    var file2  = FSO.GetFile("c:\\test.txt");
    file2.Copy("c:\\0\\test1.txt");

        Перемещение файлов осуществляется аналогично методу копирования.

        Удаление файлов:

        VBScript:

    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set file1 = FSO.CreateTextFile("test.txt")
    ‘закрываем файл (см.работа с содержанием файла)
    ‘ если не закрыть файл, то он не может быть удален методом Delete
    file1.Close

    MsgBox "Файл создан"
    Set file2  = FSO.GetFile("test.txt")
    file2.Delete
    MsgBox "Файл удален"
 

        JScript:

    FSO = new ActiveXObject("Scripting.FileSystemObject");
    var file1 = FSO.CreateTextFile("test.txt");
    //закрываем файл (см.работа с содержанием файла);
    //если не закрыть файл, то он не может быть удален методом Delete
    file1.Close();

    WScript.Echo("Файл создан");
    var file2  = FSO.GetFile("test.txt");


    file2.Delete();
    WScript.Echo("Файл удален");
 

        Свойства файла

        Синтаксис:

        object.Size

        где

        object - File объект

        С помощью объекта FSO нам доступны такие свойства файла, как его размер, время создания и т.д.

        Size – возвращает размер файла в байтах

        VBScript:

    Set FSO = CreateObject("Scripting.FileSystemObject")

    'получаем текущий файл:
    Set file1 = FSO.GetFile(WScript.ScriptFullName)

    'получаем размер:
    fsize = file1.Size

    MsgBox "Размер файла " & WScript.ScriptName &_
     " : " & fsize &" килобайт"

        JScript:

    FSO = new ActiveXObject("Scripting.FileSystemObject");

    //получаем текущий файл:
    var file1 = FSO.GetFile(WScript.ScriptFullName);

    //получаем размер:
    var fsize = file1.Size;

    WScript.Echo("Размер файла " + WScript.ScriptName +
     " : " + fsize +" килобайт");
 

         DateCreated – время создания файла

         DateLastAccessed  - время последнего обращения

         DateLastModified  - время последнего изменения
 

         VBScript:

    Set FSO = CreateObject("Scripting.FileSystemObject")



    'получаем текущий файл:
    Set file1 = FSO.GetFile(WScript.ScriptFullName)

    ‘получаем время создания:
    DC = file1.DateCreated

    info = "Файл " & WScript.ScriptName & " :" & Chr(10)
    info = info & "Создан: " & DC & Chr(10)

    ‘ получаем время последнего открытия:
    DLA = file1.DateLastAccessed

    info = info & "Открыт: " & DLA  & Chr(10)

    ‘получаем время последнего изменения:
    DLM = file1.DateLastModified

    info = info & "Изменен: " & DLM
    MsgBox info
 

        JScript:

    FSO = new ActiveXObject("Scripting.FileSystemObject");

    //получаем текущий файл:
    var file1 = FSO.GetFile(WScript.ScriptFullName);

    var info = "Файл " + WScript.ScriptName + "\n";

    //получаем время создания:
    DC = file1.DateCreated;

    info += "Создан: " + DC + "\n";

    //получаем время открытия:
    DLA = file1.DateLastAccessed;

    info += "Открыт: " + DLA + "\n";

    //получаем время изменения:
    DLM = file1.DateLastModified;

    info += "Изменен: " + DLM;
    WScript.Echo(info);
 

Назад по тексту | Содержание | Вперед по тексту



О проекте | История | E-mail

Copyright (C) 2000 - 2001 Alex Neverov

#bn { DISPLAY: block } #bt { DISPLAY: block }


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



         6.4. Работа с папками

         Для работы с папками и их свойствами FSO предоставляет методы Copy, Move, CreateFolder, Delete, DateCreated, DateLastAccessed, DateLastModified, Size, FolderExists, которые работают аналогично файловым методам.

         Например

        VBScript:

    Set FSO = CreateObject("Scripting.FileSystemObject")

    If Not FSO.FolderExists("Новая папка") Then
    'если папка не существует
    'создаем папку "Новая папка":
    FSO.CreateFolder("Новая папка")
    End If

    Set f1 = FSO.GetFolder("Новая папка")
    'получаем папку

    Info = "Свойства папки: " + f1.Name + Chr(10) + Chr(10)

    Info = Info & "Размер: " & f1.Size & Chr(10)
    'получаем размер папки

    Info = Info & "Создана: " & f1.DateCreated & Chr(10)
    'время создания

    Info = Info & "Изменена: " & f1.DateLastModified  & Chr(10)
    'время последнего изменения

    MsgBox Info

        JScript:

    var FSO = WScript.CreateObject("Scripting.FileSystemObject");

    if (!FSO.FolderExists("Новая папка"))
    //если папка не существует


    //создаем папку "Новая папка":
    {
    FSO.CreateFolder("Новая папка");
    }

    var f1 = FSO.GetFolder("Новая папка");
    //получаем папку

    Info = "Свойства папки: " + f1.Name + "\n" + "\n";
    Info += "Размер: " + f1.Size  + "\n";
    //получаем размер папки

    Info += "Создана: " + f1.DateCreated + "\n";
    //время создания

    Info += "Изменена: " + f1.DateLastModified  + "\n" ;
    //время последнего изменения

    WScript.Echo( Info);
    //выводим данные

        В результате выполнения получим на экране окно типа:
 

Назад по тексту | Содержание | Вперед по тексту



О проекте | История | E-mail

Copyright (C) 2000 - 2001 Alex Neverov

#bn { DISPLAY: block } #bt { DISPLAY: block }


Диски



         6.5. Диски

         Сценарии не могут непосредственно работать с дисками в системе, поскольку объект FileSystemObject не предоставляет для этого методов. Но с помощью свойств объекта Drive и коллекции Drives мы можем получить некоторые сведения о дисках системы.

         Для работы с диском необходимо как и при работе с файлами и папками создать объект с его свойствами с помощью метода GetDrive.

         Синтаксис:

        object.GetDrive drivespec

         где

         drivespec – имя диска. В кавычках располагается его имя. Это может быть “c” или “c:” или “c:\”. При работе с сетевыми дисками это может быть “computer2\share1”
 

         VBScript:

     Set FSO = CreateObject(“Scripting.FileSystemObject”)
     ‘создаем объект FileSystemObject

     Set Drv = FSO.GetDrive(“c:”)
     ‘получаем диск С
 
         JScript:

     var FSO = new ActiveXObject("Scripting.FileSystemObject");
    //создаем объект FileSystemObject

     var Drv = FSO.GetDrive(“c:”);
    //получаем диск С
 

        DriveExists – выполняет проверку, существует ли указанный диск.

         VBScript:


    Set fso = CreateObject("Scripting.FileSystemObject")
      If fso.DriveExists("c") Then
        MsgBox "Диск C присутствует"
      Else
         MsgBox "Диск C не найден"
    End If
 

        JScript:

    fso = new ActiveXObject("Scripting.FileSystemObject");
      if (fso.DriveExists("c"))
    WScript.Echo("Диск C присутствует");
      else
    WScript.Echo("Диск C не найден");
 
 

        AvailableSpace – возвращает количество свободного места на диске, которым располагает пользователь, в байтах.

        Синтаксис:

        object.AvailableSpace

        где

        object - объект Drive
 

Следует заметить, что на дисках размером более 2 Гигабайт многие свойства, возвращающие пространство на диске могут работать неправильно, поскольку наибольшая величина целочисленного значения у языков сценариев не может быть больше чем 2 147 483 647, поэтому, если возвращенная величина будет больше, то сценарий возвратит некорректные данные.
 

         FreeSpace – возвращает количество свободного места на диске.
 

         TotalSize – всего места на диске.
 

         DriveType – тип диска.

        Возвращаемые значения свойства DriveType:
 
 
Значение Объяснение


0
Тип не может быть определен


1
Сменный носитель или дисковод для гибких дисков


2
Обычный HDD


3
Сетевой диск


4
CD-ROM


5
Виртуальный RAM-диск
&


nbsp;
 
 

         VBScript:

    Dim fso, d, t
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set d = fso.GetDrive("c")
    Select Case d.DriveType
    Case 0: t = "Неопределен"
    Case 1: t = "Дисковод 3.5'"
    Case 2: t = "Обычный HDD"
    Case 3: t = "Cетевой"
    Case 4: t = "CD-ROM"
    Case 5: t = "RAM Disk"
    End Select
    MsgBox "Диск " & "с" & ": - " & t
 

        JScript:

    var fso, d, s, t;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    d = fso.GetDrive("c:");
    switch (d.DriveType)
    {
    case 0: t = "Неопределен"; break;
     case 1: t = "Диск 3.5'"; break;
     case 2: t = "Обычный HDD"; break;
     case 3: t = "Сетевой"; break;
     case 4: t = "CD-ROM"; break;
     case 5: t = "RAM Disk"; break;
     }
     s = "Drive " + "c" + ": - " + t;
    WScript.echo(s);
 
 

        FileSystem – возвращает тип файловой системы FAT, NTFS, или CDFS.

        VBScript:

    Dim FSO, D, FileSys
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set D = FSO.GetDrive("C")
    FileSys = D.FileSystem
    MsgBox "Файловая система на диске C: " + FileSys



        JScript:

    var FSO = WScript.CreateObject("Scripting.FileSystemObject");
    var D = FSO.GetDrive("C");
    FileSys = D.FileSystem;
    WScript.Echo(" Файловая система на диске C: " + FileSys);
 

         IsReady – логическое значение. Возвращает true, если диск готов к использованию.

         VBScript:

    Dim FSO, d, t
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set d = FSO.GetDrive("a")
    If d.IsReady Then
     MsgBox "Устройство готово к использованию"
    Else
     MsgBox "Устройство не готово "
    End If

        JScript:

    var FSO, d, s, t;
    FSO = new ActiveXObject("Scripting.FileSystemObject");
    d = FSO.GetDrive("a:");
    if (d.IsReady)
    WScript.Echo("Устройство готово к использованию");
    else
    WScript.Echo("Устройство не готово, вставьте диск в дисковод");
 

         RootFolder – возвращает путь к корневому каталогу. Для диска С – “с:\”, для a – “a:\” и т.д.

         SerialNumber – серийный номер устройства в десятичной системе.

         VBScript:

     Dim FSO, D, Serial
     Set FSO = CreateObject("Scripting.FileSystemObject")
    Set D = FSO.GetDrive("C")
    Serial = D.SerialNumber
    'получаем серийный номер диска C в десятичной системе



    MsgBox " Файловая система на диске C: " & Hex(Serial)
    'выводим его в шестнадцатеричной системе

        JScript:

    var FSO = WScript.CreateObject("Scripting.FileSystemObject");
    var D = FSO.GetDrive("C");
    var Serial = D.SerialNumber;
    'получаем серийный номер диска C в десятичной системе
 
    WScript.Echo("Файловая система на диске C: " + Serial.toString(16));
    'выводим его в шестнадцатеричной системе
 

         ShareName – сетевой адрес устройства

         VolumeName – возвращает/устанавливает метку диска

         Синтаксис:

         object.VolumeName [= newname]

         где object - объект Drive

         Необязательный параметр:

         newname - новая метка диска
 

         VBScript:

    Dim FSO, D, Vol
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set D = FSO.GetDrive("C")
    Vol = D.VolumeName
    If Vol = "" Then
    'если метка не задана
    MsgBox"Метка для диска C не задана"
    Else
    MsgBox"Метка диска C: " & Vol
    End If
 

        JScript:

    var FSO = WScript.CreateObject("Scripting.FileSystemObject");
    var D = FSO.GetDrive("C");
    Vol = D.VolumeName ;
    if (Vol == "")
    //если метка не задана
    {
    WScript.Echo("Метка для диска C не задана");
    }
    else
    {
    WScript.Echo("Метка диска C: " + Vol);
    }
 

Назад по тексту | Содержание | Вперед по тексту

Доступ к файлам и папкам



         6.6. Доступ к файлам и папкам

         Свойства Name, ShortName, ParentFolder, Path и ShortPath служат для определения имен и местоположения файлов и папок.

         Свойство Name содержит обычное имя. А свойство ShortName - короткое имя т.е. имя в формате MS DOS.

         VBScript:

        Set FSO = CreateObject("Scripting.FileSystemObject")
         'создаем FileSystemObject

         FSO.CreateTextFile "Текстовый файл.txt", true
         ' создаем файл Текстовый файл.txt

         Set file1 = FSO.GetFile("Текстовый файл.txt")
         LongName = file1.Name
         ' получаем длинное имя файла

         ShName = file1.ShortName
         ' получаем короткое имя

         Names = "Имя: " + LongName + Chr(10) + "Имя DOS: " _
          + ShName

         MsgBox Names, 64, "Файл: " + file1.Name
         'выводим результат
 

         JScript:

    var WshShell = new ActiveXObject("WScript.Shell");


    // создаем объект WshShell для окна Popup

    var FSO = new ActiveXObject("Scripting.FileSystemObject");
    //создаем FileSystemObject

    FSO.CreateTextFile("Текстовый файл.txt", true);
    //создаем файл Текстовый файл.txt

    var file1 = FSO.GetFile("Текстовый файл.txt");
    LongName = file1.Name;
    //получаем длинное имя файла

    ShName = file1.ShortName;
    //получаем короткое имя

    Names = "Имя: " + LongName + "\n" + "Имя DOS: "
      + ShName;

    WshShell.Popup(Names, 0, "Файл: " + file1.Name, 64);
    //выводим результат
 

         Свойства Path и ShortPath указывают путь. ShortPath - путь в формате MS DOS.
 На этот раз в примере используем папки.

         VBScript:

         Set FSO = CreateObject("Scripting.FileSystemObject")
     FSO.CreateFolder("Новая папка")
     'создаем папку

     Set Folder1 = FSO.GetFolder("Новая папка")
     LongPath = Folder1.Path
     ShPath = Folder1.ShortPath
     PathInfo = "Путь: " + LongPath + Chr(10) + "Путь DOS: " + ShPath
     MsgBox PathInfo, 0, "Свойства: "  + Folder1.Name
 

         JScript:

     var FSO = new ActiveXObject("Scripting.FileSystemObject");
     FSO.CreateFolder("Новая папка");
     var Folder1 = FSO.GetFolder("Новая папка");
     LongPath = Folder1.Path;


     ShPath = Folder1.ShortPath;
     PathInfo = "Путь: " + LongPath + "\n" + "Путь DOS: " + ShPath;
     WScript.Echo(PathInfo);
 

         Последнее свойство ParentFolder возвращает имя папки, которая содержит файл или папку.

         VBScript:

     Set FSO = CreateObject("Scripting.FileSystemObject")
     Set file1 = FSO.GetFile(WScript.ScriptName)
     ‘получаем файл текущего сценария

     PFolder = file1.ParentFolder
     MsgBox "Сценарий " + WScript.ScriptName + " находится в папке " _
      + Pfolder
 
 

         JScript:

         var FSO = new ActiveXObject("Scripting.FileSystemObject");
         var file1 = FSO.GetFile(WScript.ScriptName);
         //получаем текущий сценарий

         PFolder = file1.ParentFolder;
         //определяем родительский каталог

         WScript.Echo("Сценарий ",WScript.ScriptName, " находится в папке ",  PFolder);
 

Назад по тексту | Содержание | Вперед по тексту



О проекте | История | E-mail

Copyright (C) 2000 - 2001 Alex Neverov

#bn { DISPLAY: block } #bt { DISPLAY: block }


Атрибуты файлов и папок



         6.7. Атрибуты файлов и папок

         Для изменения атрибутов файлов и папок  служит свойство Attributes

         Синтаксис:

         object.Attributes = newattributes

         где

        object – объект File или Folder

        newattributes – новые установленные атрибуты

         Параметр newattributes может принимать следующие значения:
 

Константа

Значение

Действие

Описание

Normal

0

чтение/запись Обычный файл без атрибутов
ReadOnly

1

чтение/запись Только чтение
Hidden

2

чтение/запись Скрытый
System

4

чтение/запись Системный
Volume

8

только чтение Метка диска
Directory

16

только чтение Папка
Archive

32

чтение/запись Архивный
Compressed

128

только чтение Сжатый файл
 

         Чтобы установить или снять атрибут с файла, нужно соответственно прибавить или удалить нужное значение.
 

         Type

         Метод Type возвращает тип файла. При применении его к объекту Folder – возвращает значение “Папка с файлами”.

         VBScript:

    Dim FSO, D, Vol
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set F = FSO.GetFile(WScript.ScriptName)


    MsgBox "Тип файла "+ F.Name + " : " +F.Type

        JScript:

    var FSO = WScript.CreateObject("Scripting.FileSystemObject");
    var F = FSO.GetFile(WScript.ScriptName);
    WScript.Echo("Тип файла " + F.Name + " : "+F.Type);

        При выполнении получим:
 


Назад по тексту | Содержание | Вперед по тексту



О проекте | История | E-mail

Copyright (C) 2000 - 2001 Alex Neverov

#bn { DISPLAY: block } #bt { DISPLAY: block }


WSF-файлы



       7. Использование XML

         7.1.WSF-файлы

         В предыдущих главах для использования сценариев мы пользовались файлами того типа, какой язык сценариев применялся: VBScript или JScript, то есть файлами js и vbs.
         В Windows Scripting Host в версии 2.0 появилось возможность использовать файлы в которых мы можем использовать эти два языка одновременно. Это файлы WSF.
 
         WSF-файлы (Windows Script File) представляют собой файлы с разметкой XML. Те, кто имел дело с HTML файлами, вероятно слышал об XML.
         XML – разметка, подобна разметке HTML, с то только разницей, что HTML – отвечает за размещение информации на экране, а XML – за хранение информации.
         Перед обычными файлами сценариев vbs и js, WSF имеет большое преимущество:
         1. В одном wsf-файле можно совмещать сценарии, написанные на разных языках (и не только VBScript и JScript).
         2. Кроме того в одном wsf-файле возможно хранить множество совершенно разных сценариев. Т.е. вы можете хранить сценарии, написанные на каком-либо языке или сразу на нескольких языках сценариев, в любом количестве, и все эти сценарии хранить в одном wsf-файле!

         Всего в wsf-файлах могут применяться 8 XML-элементов. В следующей главе мы рассмотрим их.
 

Назад по тексту | Содержание | Вперед по тексту

О проекте | История | E-mail


Copyright (C) 2000 - 2001 Alex Neverov

#bn { DISPLAY: block } #bt { DISPLAY: block }



Свойства объекта WScript



      2. Объект WScript

        2.1. Свойства объекта WScript

        Объект WScipt содержит информацию о сервере сценариев и о самих, исполняемых файлах сценариев.

        Name – выводит надпись: “Сервер сценариев”

        Пример для VBScsipt:

    WScript.Echo WScript.Name

        FullName – возвращает используемый сервер сценириев (CScript.exe или WScript.exe) и полный путь к нему.

        Результат будет типа:

        C:\WINDOWS\WSCRIPT.EXE
 

        Path – возвращает путь к папке с файлами сервера сценариев (CScript.exe и WScript.exe).

        Если Windows находится в папке Windows, то результат будет:

        C:\WINDOWS

        Version – показывает версию установленного сервера сценариев. Обратите внимание, что свойство Version возвращает не версию языка Windows Script Host, а версию его интерпретатора.

        Например

    WScript.Echo WScript.Version

        Выдаст результат: (5.0 или, 5.1), где 5.0 соответствует версии Windows Scriptinh Host 1.0, а 5.1. версии 2.0.
 

        ScriptName – выдает имя исполняемого файла сценария.

        VBScript:

    WScript.Echo "Имя запущенного сценария: " + WScript.ScriptName


        JScript:
    WScript.Echo("Имя запущенного сценария: " + WScript.ScriptName);
 
        ScriptFullName – возвращает полный путь и имя исполняемого файла сценария.
        VBScript:
    WScript.Echo "Путь к запущенному сценарию: " + _
    WScript.ScriptFullName
        JScript:
    WScript.Echo("Путь к запущенному сценарию: " +
    WScript.ScriptFullName);
 
        SrdErr, StdIn, StdOut - методы, предназначенные для ввода-вывода информации в режиме командной строки (CScript.exe). Подробно рассматриваются в главе 3.5. "Ввод-вывод в режиме командной строки".
 
        Timeout
        Свойство Timeout устанавливает время, по истечении которого сценарий завершает свою работу.
        Данное свойство можно применять в тексте сценария только в версии 2.0, в версии 1.0 оно применяется только в WSH-файлах.
        Синтаксис:
    WScript.Timeout = time
         где
         time - время, отведенное на работу сценария в секундах.
         VBScript:
    'устанавливаем время работы сценария:
    WScript.Timeout = 5
    WScript.Echo "Сценарий завершит работу через 5 секунд"
         JScript:
    //устанавливаем время работы сценария:
    WScript.Timeout = 5;
    WScript.Echo("Сценарий завершит работу через 5 секунд");

         Interactive


        Свойство Interactive показывает, используется ли диалоговый режим (WScript.exe), возвращая логический результат. А также может устанавливать или отключать диалоговый режим. При значении false - интерактивный режим отключается, т.е. диалоговые окна не могут использоваться.
        Синтаксис:
        WScript.Interactive[ = True|False]
        VBScript:
    WScript.Echo("Диалоговый режим включен")
    'отключаем диалоговый режим:
    WScript.Interactive = false
    WScript.Echo("Диалоговый режим отключен")
    'данное окно не появится на экране
    'включаем диалоговый режим:
    WScript.Interactive = true
    WScript.Echo("Это снова диалоговый режим")
 
        JScript:
    WScript.Echo("Диалоговый режим включен");
    //отключаем диалоговый режим:
    WScript.Interactive = false;
    WScript.Echo("Диалоговый режим отключен");
    //данное окно не появится на экране
    //включаем диалоговый режим:
    WScript.Interactive = true;
    WScript.Echo("Это снова диалоговый режим");
 

Назад по тексту | Содержание | Вперед по тексту



О проекте | История | E-mail

Copyright (C) 2000 - 2001 Alex Neverov
#bn { DISPLAY: block } #bt { DISPLAY: block }

Учебник Visual Basic Script



        Учебник Visual Basic Script

        Урок 1. Введение в VBScsript

        Первый сценарий

        Напишем наш первый файл сценария - Hello.vbs, который будет выводить надпись: “Hello World!”.

        Он будет состоять из одной строки:

     MsgBox “Hello World!”

        Запустим его и получим:

        Данный сценарий с помощью метода MsgBox выводит заданное сообщение в диалоговом окне на экран.

        Переменные

        Visual Basic Script, как и другие языки программирования использует переменные.

        Переменные – это данные, которые могут изменять свое значение в процессе исполнения сценария. Они объявляются в начале сценария с помощью зарезервированного слова Dim.

        Добавим в наш сценарий переменные:

     Dim Message

    ‘объявляем переменную Message

    Message = “Hello World!”

    ‘присваиваем ей значение “Hello World!”

    MsgBox Message

        При запуске сценария результат будет тот же.

        Следует помнить при объявлении и использовании переменных и прочих зарезервированных слов, что для VBS регистр вводимых букв (в отличии от JScript) не имеет значения. Поэтому для VBS переменная Message и message будут одной и той же переменной. Если где-то в тексте сценария вы вызовете переменную Message как message – ошибки не будет.


        В данном примере для пояснения действий, использовались комментарии, которые отделяются знаком апострофа (‘). Все, что будет в сценарии идти за знаком апострофа, интерпретатор языка VBScript, будет считать комментарием.

        Например:

    ‘Это комментарий

        Константы

        VBS поддерживает также константы – данные, которые в противоположность переменным не могут изменять свое значение в течении сценария. Константы объявляются в начале сценария зарезервированным словом Сonst.

        Используем в сценарии Hello.vbs константу вместо переменной:

    Const Message = “Hello World!”
    ‘объявляем константу Message

    MsgBox Message
 

        Урок 2. Операторы языка

        При действиях с числами VBS позволяет использовать обычные математические операторы:
 
Оператор Описание
+ Сложение
Вычитание
* Умножение
/ Деление
\ Деление нацело
        При действиях же со стоками символов, допускается их объединение при помощи операторов + и &.

        “Visual “ + “Basic “ & “Script” = “Visual Basic Script”

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

        Назовем его Hello_Name.vbs:

    Dim Name
    ‘объявляем переменную Name

    Name = InputBox(“Введите свое имя:”, “”)
    ‘присваиваем Name имя введенное пользоваетелем

    MsgBox “Привет “ & Name + “ !”
    ‘выводим приветствие

        Сценарий очень прост. Вначале появляется диалоговое окно ввода



        InputBox, в которое пользователь вводит свое имя:

        После ввода имени, данные в окне MsgBox будут выведены на экран.
 
 

        Урок 3. Условный оператор

        Поэкспериментировав со сценарием Hello_Name.vbs вы заметите, что у него имеется один недостаток, если пользователь нажмет кнопку OK, не введя имени он выдаст “пустое” приветствие. Без имени.

        Для контроля возвращаемых сценарием данных существует условный оператор If…Then…Else

        Усложним наш сценарий с его помощью:

    Dim Name
    'объявляем переменную Name

    Name = InputBox("Введите свое имя:", "")
    'присваиваем Name имя введенное пользоваетелем

    If Name = "" Then
    'Если ничего не введено

    MsgBox "Вы не ввели своего имени!"
    'выводим сообщение

    Else
    'если пользователь что-то ввел

    MsgBox "Привет " & Name + " !"
    'выводим приветствие

    End If

        Урок 4. Циклы

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

        Для многократного повторения одного и того же кода существуют циклы (см. справочник).

        Добавим в наш сценарий цикл While...Wend:

Dim Name
'объявляем переменную Name

While Name = ""
'задаем условие цикла: до тех пор пока Name не
'принимет какое-либо значение цикл будет повторяться



Name = InputBox("Введите свое имя")

If Name = "" Then

MsgBox(" Вы не ввели своего имени" & Chr(10) & "Попытайтесь еще раз")

End If

'снова запускаем цикл:
Wend

'если Name было присвоено значение выходим из цикла:
MsgBox "Привет " + Name
 

        Урок 5. Подпрограммы и функции

        VBS позволяет использовать подпрограммы и функции.

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

        Функция отличается от подпрограммы, что ее можно вставлять в выражения (например математические).

        И подпрограмма и функция имеют свои имена, при помощи которых они могут быть вызваны из сценариев.

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

        Структура подпрограммы:

        Sub Имя_подпрограммы(парамеры)
        ...
        Код подпрограммы
        ...
        End Sub
 

        Функция имеет аналогичную структуру:

        Function Имя_функции(параметры)
        ...
        Код функции
        ...
        End Function

        Подпрограммы и функции располагаются обычно в начале сценария.



        Используем подпрограмму в сценарии Hello.vbs, назовем новый сценарий Hello_Sub.vbs.

        Заключим оператор MsgBox в подпрограмму Messeger:

    Sub Messager()

    MsgBox “Hello World!”

    End Sub

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

        Для этого добавим диалоговое окно выбора.

        Окончательный сценарий Hello_Sub.vbs будет следующим:

‘Создаем подпрограмму Messeger c параметром text

Sub Messager(text)
    MsgBox text
End Sub‘Конец подпрограммы
 

    Dim result

    ‘объявляем переменную result, в которую будет помещен результат
    ‘работы диалогового окна

    ‘Выводим окно выбора:
    result = MsgBox(“Хотите увидеть приветствие?”, vbYesNo _

+ vbQuestion, “Ваш выбор”)    If result = vbYes Then

    ‘выбрана кнопка “Да”

    Call Messager(“Hello World!”)

    ‘вызываем подпрограмму с параметром “Hello World”

    Else

    ‘иначе

    MsgBox “Не хотите – не надо!”

    End If

        Чтобы проиллюстрировать использование функции, мы не будем создавать свою функцию, а воспользуемся встроенной функцией VBS – Ucase, которая переводит строчные буквы в прописные.

        Создадим сценарий UCase_Function.vbs:

Dim Text, UText
'объявляем переменные для хранения исходного
'и преобразованного текста

Text = InputBox("Введите какой-либо текст:", "")
'помещаем введенные данные в Text

UText = UCase(Text)
'преобразуем с помощью функции UCase
'строчные буквы в прописные, вызываем ее с параметром Text



MsgBox UText
'выводим результат


Урок 6. Массивы в VBScript

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

        Но в больших сценариях (состоящих из сотен строк) существует потребность в десятках и более переменных, что не так удобно в работе.

        Допустим мы имеем переменную result в которую будет помещен результат какого-либо вычисления. Если переменная у нас одна, то и использование ее не составит труда. Но если у нас, допустим, десять переменных, в которые будут помещаться результаты многих вычислений (Dim result1, result2, result3,…), то работать при этом с данными переменными будет не так удобно.

        Решением этой проблемы будет использование массива, который объединяет в себе множество однотипных элементов (цифр, символов, строк и т.д.).

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

        Массив, как и переменные объявляется словом Dim:

    Dim result(9)
    ‘создаем массив из десяти элементов

        Каждый элемент массива имеет свой порядковый номер – индекс. Нумерация индексов начинается с 0.

        Т.о. если мы десять переменных result переведем в массив, то для вызова значения, которому раньше соответствовала переменная result1, нужно обратится к первому элементу массива с индексом 0:

    Result(0)

После объявления массива можно его заполнять значениями:

    Dim MyArray (2)
    MyArray(0) = "Один"
    MyArray(1) = "Два"
    MyArray(2) = "Три"
 

Назад по тексту | Содержание |



О проекте | История | E-mail

Copyright (C) 2000 - 2001 Alex Neverov

#bn { DISPLAY: block } #bt { DISPLAY: block }


Visual Basic Script

Windows Script Host (WSH). Файловая система


В этой статье речь пойдет о работе с объектами файловой системы, а именно, с самими файлами и локальными дисками (дисководы, жесткие диски, CD-ROM'ы). Сетевые диски будут рассмотрены в одной из следующих статей.

Приведу небольшой пример и на его основе объясню принципы работы с дисками в Windows Script Host. Если вы еще не отключили сообщение системы о том что какой-то диск переполнен, то, наверняка, уже не раз лицезрели его. Мерзкая штука! Оно вам надо? Давайте, лучше, сами создадим такое сообщение :).

'Проверка количества свободного места на дисках. VBScript Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set WSHShell = WScript.CreateObject("WScript.Shell") 'Проверяем все драйвы (HDD, FDD, CDD) в системе For each i In fso.Drives 'DriveType=2 - логические диски. Зачем нам дисковод и т.п. ерунда? If i.DriveType=2 Then 'Получаем букву диска drive=i.DriveLetter 'Узнаем свободное место и переводим его в Мб с точностью до 1 знака после запятой free = FormatNumber(fso.GetDrive(drive).FreeSpace/1048576, 1) 'Если места меньше 100 Мб If free < 100 Then 'то выводим сообщение об этом WSHShell.Popup("На диске "+drive+" осталось меньше 100 Мб. Свободно "+free+" Мб!") End If End If Next

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

Если вы не будете фильтровать тип диска (строка If i.DriveType=2), то объем свободного места будет проверяться и на дискете в дисководе и на CD-ROM'e. А если в приводе не будет носителя, то скрипт прервется и будет выдано сообщение об ошибке.

DriveType имеет следующие значения:

0 - Тип не может быть определен
1 - Сменный носитель или дисковод для гибких дисков
2 - Обычный HDD
3 - Сетевой диск
4 - CD-ROM
5 - Виртуальный RAM-диск

Остановимся подробнее на строке free = FormatNumber (fso.GetDrive(drive).FreeSpace /1048576, 1). Свойство FreeSpace возвращает количество свободного дискового места в байтах. Конечно, работать с такими большими цифрами некомфортно, поэтому мы переводим байты в мегабайты, делением на 1048576. А чтобы не лицезреть кучу знаков после запятой, округляем до одного значащего символа с помощью FormatNumber() - количество знаков после запятой устанавливается с помощью второй переменной.


Если вам надо получить полный объем диска, то вместо FreeSpace используйте свойство TotalSize.

Вы можете явно указать диск, с которым хотите работать. Для этого используется метод GetDrive:

Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set Drive = fso.GetDrive("c")

Чтобы узнать файловую систему диска используйте свойство FileSystem:

MsgBox(Drive.FileSystem)

Остальные свойства и методы работы с диском не так интересны. Среди них такие как:

DriveExists - проверяет на наличие заданного диска: fso.DriveExists("c").
IsReady - если диск готов к использованию, возвращает true, в противном случае - false.
RootFolder - возвращает путь к корневому каталогу.
SerialNumber - возвращает серийный номер диска.
ShareName - возвращает сетевое имя диска.
VolumeName - возвращает либо устанавливает метку диска.

Теперь обратим внимание на работу с файлами и папками. Редактирование файлов я бы хотел вынести в отдельную статью, а здесь коснемся вопросов создания, копирования, удаления файлов, установки атрибутов и т.п.

Для примера давайте создадим на диске С:\ папку TEST, а в ней файл test.txt:

//Создание папки и файла. JScript var fso = new ActiveXObject("Scripting.FileSystemObject"); //Проверяем, есть ли такая папка if (fso.FolderExists("C:\\TEST")) WScript.Echo("Такая папка уже существует"); else //Если нет - создаем var Folder = fso.CreateFolder("C:\\TEST"); //Проверяем, есть ли уже такой файл if (fso.FileExists("C:\\TEST\\test.txt")) WScript.Echo("Такой файл уже существует"); else //Если нет, то создаем его var File = fso.CreateTextFile("C:\\TEST\\test.txt", true);

Комментарии наглядно демонстрируют работу скрипта. Давайте только подробнее остановимся на создании файла (последняя строка). Вторым параметром передается значение true. Этот параметр является необязательным и указывает, перезаписывать ли файл с таким именем. Здесь же может передаваться и третий параметр. Если он отсутствует или равен false, то файл будет создан в кодировке ASCII. Если параметр равен true - в unicode.



В примере мы не просто создали папку и файл, но и создали объекты этой папки и файла (Folder и File соответственно). Если надо создать объект для уже существующей папки/файла, используйте метод GetFile/GetFolder:

var File1 = fso.GetFile("C:\\autoexec.bat");

К этим объектам применимы различные методы, позволяющие копировать, переименовывать, удалять файлы, получать о них различные сведения, устанавливать атрибуты. Как несложно догадаться для копирования, перемещения и удаления файлов и папок применяются методы Copy, Move и Delete. При этом в Copy и Move передается имя файла, в который надо скопировать/перенести исходный, а в Delete ничего не передается. Так, чтобы скопировать autoexec.bat в autoexec.tmp надо добавить строку

File1.Copy("C:\\autoexec.tmp");

Различные свойства объектов, созданных с помощью GetFile/GetFolder позволяют получить различные сведения о файлах и папках на которые они указывают. Вот эти свойства:

Size - возвращает размер файла/папки;
DateCreated - время создания;
DateLastAccessed - время последнего обращения к объекту;
DateLastModified - время последнего изменения.

Например:

WScript.Echo(File1.Size);

Бывают ситуации, когда надо получить имя файла, на который ссылается объект. Например:

var fso = new ActiveXObject("Scripting.FileSystemObject"); var File1 = fso.GetFile("C:\\autoexec.bat"); var File2 = fso.GetFile("C:\\config.sys"); var File3 = fso.GetFile("C:\\netlog.txt"); if (fso.FileExists("C:\\config.sys")) File1 = File2; else File1 = File3; WScript.Echo (File1.Name);

В зависимости от того, есть ли файл config.sys, объект File1 будет указывать на разные файлы. Конечно, в таком виде этот пример в реальной ситуации вряд ли встретится, но для иллюстрации неопределенности с файлом вполне подходит. Для определения имени файла (папки) и пути к нему служат еще несколько свойств:

Name - возвращает обычное имя файла (папки);
ShortName - короткое имя (в формате MS-DOS). Длинные имена будут урезаны до формата 8.3;


Path - возвращает обычный путь к файлу (папке);
ShortPath - короткий путь (с тильдой "~");
ParentFolder - возвращает имя родительского каталога.

Как они работают вы уже могли видеть в предыдущем примере в последней строке.

Закончить рассмотрение данной темы мне бы хотелось описанием установки атрибутов файлов/папок и получением сведений о типе файла. Тип файла возвращает свойство Type. Вызывается оно аналогично описанным ранее свойствам:

WScript.Echo (File1.Type);

Если вы вызовите свойства файла по правому клику мышки, то на вкладке "Общие" в поле "Тип" будет как раз то описание, что возвращает это свойство.

Получать или устанавливать атрибуты файлам и папкам позволяет свойство Attributes. Так, посмотреть атрибуты нашего файла можно командой:

WScript.Echo (File1.Attributes);

В таблице приведены значения, которые может принимать данное свойство:

Константа Значение Действие Описание
Normal 0 чтение/запись Обычный файл без атрибутов
ReadOnly 1 чтение/запись Только чтение
Hidden 2 чтение/запись Скрытый
System 4 чтение/запись Системный
Volume 8 только чтение Метка диска
Directory 16 только чтение Папка
Archive 32 чтение/запись Архивный
Compressed 128 только чтение Сжатый файл
Если вам надо установить несколько свойств файлу, значения надо складывать. Например чтобы установить для файла атрибуты только для чтения, скрытый и системный, надо передать значение 1+2+4=7:

File1.Attributes = 7;

На этом объяснения по работе с объектами файловой системы позвольте закончить :). В следующей статье будут подняты вопросы чтения и редактирования файлов, так что

Продолжение следует...

Вверх | На главную | Вернуться к списку статей

Visual Basic Script

Windows Script Host (WSH) - файлы и папки


В одной из предыдущих статей затрагивалась тема работы с файловой системой вообще и с файлами и каталогами в частности. Однако, при рассмотрении этого вопроса объяснялось как работать с одним файлом или одним каталогом. Зачастую, этого бывает недостаточно, особенно, когда нужно совершить какие-то действия со всеми файлами из определенного каталога и их имена не известны (довольно распространенная задача). Для этого случая в Windows Script Host есть возможность работы с коллекциями файлов и каталогов.

Сперва рассмотрим работу с каталогами. Список каталогов хранится в коллекции Folders, получить которую можно с помощью свойства SubFolders объекта Folder (может немного запутанно, но в приведенном ниже примере все станет ясно). Folders имеет свойство Count и методы Item и Add. Вот небольшой пример на JScript, выводящий список имен всех папок на диске С:, демонстрирующий как работать с коллекцией Folders:

var fso, f, fc, fc1, s; fso = new ActiveXObject("Scripting.FileSystemObject"); f = fso.GetFolder("C:"); fc = new Enumerator(f.SubFolders); fc1 = f.SubFolders; s = ""; for (; !fc.atEnd(); fc.moveNext()) { s += fc.item(); s += "\n"; } s = s + "Всего папок: " + fc1.Count; WScript.Echo(s);

Аналогично на VBScript:

Dim fso, f, f1, fc, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder("C:") Set fc = f.SubFolders For Each f1 in fc s = s & f1.name s = s & CHR(10) Next s = s & "Всего папок: " & fc.Count WScript.Echo s

Для иллюстрации метода Add приведу небольшой пример на JScript:

var fso, f, fc; fso = WScript.CreateObject("Scripting.FileSystemObject"); f = fso.GetFolder("C:"); fc = f.SubFolders; fc.Add("NewFolder");

Этот метод позволяет создать новую папку с именем, заданным в качестве параметра, в указанной вами директории.

Конечно, данные примеры вряд ли найдут практическое применение, но для иллюстрации работы с каталогами этого вполне достаточно. Работа с файлами мало отличается от работы с каталогами. Список всех файлов из какого-либо каталога формируется с помощью коллекции Files. Вот небольшой пример, в принципе, очень похожий на первый:


var fso, f, f1, fc, s; fso = new ActiveXObject("Scripting.FileSystemObject"); f = fso.GetFolder("C:"); fc = new Enumerator(f.files); s = ""; for (; !fc.atEnd(); fc.moveNext()) { s += fc.item(); s += "\n"; } WScript.Echo(s);

И без комментариев все довольно понятно. В конце хотелось бы привести пример, реально встречающийся в практике: синхронизация содержимого двух каталогов. Здесь файлы сравниваются по имени и размеру и если у файлов с одинаковым именем оказываются разные размеры, то происходит копирование файла из одного каталога в другой, а информация об этом сохраняется в логе. Таким способом можно синхронизировать какие-то файлы лежащие на сервере и на локальной машине, просто поменяйте пути к папкам на нужные вам. Скрипт написан на VBScript.

Set fso = CreateObject("Scripting.FileSystemObject") Set UFolder = fso.getfolder("C:\Folder1") set UFile = UFolder.files Set OFolder = fso.getfolder("C:\Folder2") Set OFile = OFolder.files

If (fso.FileExists("C:\LOG\copy.log")) Then Set MyFile = fso.OpenTextFile("C:\LOG\copy.log", 8, True) Else Set MyFile = fso.CreateTextFile("C:\LOG\copy.log") end if

For Each f1 in UFile FileToCopy = UFolder&"\"&f1.Name For Each f2 in OFile if f1.Name = f2.Name then if f1.Size = f2.Size then else fso.CopyFile FileToCopy, OFolder&"\"&f1.Name MyFile.WriteLine(Cstr(Date)&" "&Cstr(Time)&" Файл "&f1.Name&" обновлен. Размер "&f1.Size) end if else end if Next Next

MyFile.Close

Visual Basic Script


Windows Script Host (WSH) - MS Office


В предыдущей статье я рассказывал, как можно управлять различными окнами программ: активизировать их, передавать в них нажатие клавиш... В этой статье мы зайдем немного дальше и научимся управлять приложениями через ActiveX компоненты. Пожалуй, наиболее популярное и частое применение этих знаний может найти отражение в работе с MS Office, а точнее с Word и Excel. Вот над ними мы сегодня и поиздеваемся (все примеры были протестированы в Офис 2000).

Для начала, приведу немножко подредактированный файл примера Microsoft по работе с Excel-ем, сопроводив его попутно своими комментариями:

//JScript //Создаем Екселевский объект, с методами и свойствами которого будем работать var objXL = WScript.CreateObject("Excel.Application"); //Делаем окно видимым и создаем рабочую книгу objXL.Visible = true; objXL.WorkBooks.Add;

//Устанавливаем ширину первых трех колонок objXL.Columns(1).ColumnWidth = 20; objXL.Columns(2).ColumnWidth = 30; objXL.Columns(3).ColumnWidth = 40;

//Первая строка будет у нас шапкой таблицы //Заполняем значения ячеек objXL.Cells(1, 1).Value = "Название свойства"; objXL.Cells(1, 2).Value = "Значение"; objXL.Cells(1, 3).Value = "Описание";

//Форматируем ячейки, чтобы все было красиво objXL.Range("A1:C1").Select; objXL.Selection.Font.Bold = true; objXL.Selection.Interior.ColorIndex = 1; objXL.Selection.Interior.Pattern = 1; objXL.Selection.Font.ColorIndex = 2; objXL.Columns("B:B").Select; objXL.Selection.HorizontalAlignment = -4131;

//Вводим счетчик строк, куда будем записывать информацию var intIndex = 2;

//А эта функция как раз и будет выводить нашу информацию построчно function Show(strName, strValue, strDesc) { objXL.Cells(intIndex, 1).Value = strName; objXL.Cells(intIndex, 2).Value = strValue; objXL.Cells(intIndex, 3).Value = strDesc; intIndex++; objXL.Cells(intIndex, 1).Select; }

//Итак, заполним таблицу данными о версии wscript установленной на компьютере Show("Name", WScript.Name, "Application Friendly Name"); Show("Version", WScript.Version, "Application Version"); Show("FullName", WScript.FullName, "Application Context: Fully Qualified Name"); Show("Path", WScript.Path, "Application Context: Path Only"); Show("Interactive", WScript.Interactive, "State of Interactive Mode"); //До кучи добавим сведения о параметрах, с которыми запускается скрипт var colArgs = WScript.Arguments; Show("Arguments.Count", colArgs.length, "Number of command line arguments"); for (i = 0; i < colArgs.length; i++) { objXL.Cells(intIndex, 1).Value = "Arguments(" + i + ")"; objXL.Cells(intIndex, 2).Value = colArgs(i); intIndex++; objXL.Cells(intIndex, 1).Select; }


Все весьма прозрачно. Приведу аналогичный пример на VBScript, дабы не заставлять любителей этого языка самостоятельно адаптировать код под него:

Dim objXL Set objXL = WScript.CreateObject("Excel.Application") objXL.Visible = TRUE objXL.WorkBooks.Add

objXL.Columns(1).ColumnWidth = 20 objXL.Columns(2).ColumnWidth = 30 objXL.Columns(3).ColumnWidth = 40

objXL.Cells(1, 1).Value = "Название свойства" objXL.Cells(1, 2).Value = "Значение" objXL.Cells(1, 3).Value = "Описание" objXL.Range("A1:C1").Select objXL.Selection.Font.Bold = True objXL.Selection.Interior.ColorIndex = 1 objXL.Selection.Interior.Pattern = 1 objXL.Selection.Font.ColorIndex = 2 objXL.Columns("B:B").Select objXL.Selection.HorizontalAlignment = &hFFFFEFDD

Dim intIndex intIndex = 2

Sub Show(strName, strValue, strDesc) objXL.Cells(intIndex, 1).Value = strName objXL.Cells(intIndex, 2).Value = strValue objXL.Cells(intIndex, 3).Value = strDesc intIndex = intIndex + 1 objXL.Cells(intIndex, 1).Select End Sub

Call Show("Name", WScript.Name, "Application Friendly Name") Call Show("Version", WScript.Version, "Application Version") Call Show("FullName", WScript.FullName, "Application Context: Fully Qualified Name") Call Show("Path", WScript.Path, "Application Context: Path Only") Call Show("Interactive", WScript.Interactive, "State of Interactive Mode") Dim colArgs Set colArgs = WScript.Arguments Call Show("Arguments.Count", colArgs.Count, "Number of command line arguments") For i = 0 to colArgs.Count - 1 objXL.Cells(intIndex, 1).Value = "Arguments(" & i & ")" objXL.Cells(intIndex, 2).Value = colArgs(i) intIndex = intIndex + 1 objXL.Cells(intIndex, 1).Select Next

Хорошо, а как быть если надо сделать какое-то действие не описанное здесь? Вполне логичный вопрос. Но описать все возможности встроенного в Офис VB в этой статье (как и в 10 статьях) просто невозможно. Эти сведения вам только в качестве информации к размышлению. А все что сверх этой статьи, изучается довольно просто: запускается Word (Excel), включается запись макроса, выполняются нужные вам действия, а потом на основе сгенерированного кода по аналогии пишется скрипт. Нелишним будет почитать и справку (надеюсь вы ее установили?). Замечу, что для работы с приложениями Офиса легче писать скрипты на VBScript, так как справка по встроенному VB сможет удовлетворить даже самым изысканным потребностям.



Именно таким методом (читая справку и анализируя записанные макросы), я сделал практически аналогичный предыдущим скрипт, работающий с Вордом:

//JScript //Создаем объект для работы с Вордом var wrd = new ActiveXObject("Word.Application"); //Создаем новый документ wrd.Documents.Add(); //Получаем указатель на активный документ adoc=wrd.ActiveDocument; //Указатель на область в документе myRange = adoc.Range(Start=0, End=0) //Активизируем Ворд wrd.Visible = true; wrd.Activate();

//Создаем таблицу с одной строкой и тремя столбцами tb0=adoc.tables.Add(Range=myRange, NumRows=1, NumColumns=3); //Задаем ширину столбцов tb0.Columns(1).Width = 80; tb0.Columns(2).Width = 160; tb0.Columns(3).Width = 160;

//Заполняем заголовок таблицы tb0.Cell(1,1).Range.InsertAfter("Название свойства"); tb0.Cell(1,2).Range.InsertAfter("Значение"); tb0.Cell(1,3).Range.InsertAfter("Описание");

//Счетчик строк intIndex = 2;

//Выводимая в строках таблицы информация Show("Name", WScript.Name, "Application Friendly Name"); Show("Version", WScript.Version, "Application Version"); Show("FullName", WScript.FullName, "Application Context: Fully Qualified Name"); Show("Path", WScript.Path, "Application Context: Path Only"); Show("Interactive", WScript.Interactive, "State of Interactive Mode");

//Ну и сама функция для вывода строк function Show(strName, strValue, strDesc) { tb0.Rows.Add(); tb0.Cell(intIndex, 1).Range.InsertAfter(strName); tb0.Cell(intIndex, 2).Range.InsertAfter(strValue); tb0.Cell(intIndex, 3).Range.InsertAfter(strDesc); intIndex++; }

Надеюсь, с задачей указания основного направления при работе с MS Office, мне удалось справиться. Дальше все зависит от вашего терпения и знания английского при переводе справки.

 Copyright © NetworkDoc.RU Domovoy 
Вверх | На главную | Вернуться к списку статей

Visual Basic Script

Windows Script Host (WSH) - обработка исключений


Вначале стоит определиться с терминами, ведь если любой программист прекрасно знает что такое "исключения", то остальные далеко не все точно представляют о чем идет речь. Говоря простым языком исключения или исключительные ситуации - это ошибки, возникающие в ходе работы программы (в нашем случае скрипта). Но это не те ошибки, когда вы забыли поставить закрывающую скобку, запятую или ошиблись в имени переменной. Это ошибки, возникающие в некоторых (исключительных) ситуациях во время выполнения РАБОЧЕГО скрипта.

Рассмотрим простенький пример скрипта на VBScript, пытающегося прочитать значение какого-то параметра в реестре и выдать его в сообщении:

Dim Perem set WSHShell = WScript.CreateObject("WScript.Shell")

WSHShell.Popup "Начало скрипта"

Perem = "" Perem = WSHShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Test") WSHShell.Popup Perem WSHShell.Popup "Конец скрипта"

Сообщение "Начало скрипта" появилось, следовательно, синтаксических ошибок мы не допустили, но вот затем появляется сообщение об ошибке

что и неудивительно - параметра с именем Test в разделе HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer не существует. Из-за этого наш пример не отработал до конца. Возникает логичный вопрос: а нельзя ли каким-то образом отловить момент появления ошибки, как-то его обработать и продолжить выполнение скрипта дальше? Оказывается, можно. Перепишем наш пример следующим образом:

Dim Perem set WSHShell = WScript.CreateObject("WScript.Shell")

WSHShell.Popup "Начало скрипта" Perem = ""

On Error Resume Next GetErr() if Err.Source="WshShell.RegRead" then Perem = "Параметр не существует" else Perem = WSHShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Test") end if Err.Clear

WSHShell.Popup Perem WSHShell.Popup "Конец скрипта"

Function GetErr() If WSHShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Test") Then End If End Function


Попытка прочитать параметр из реестра вынесена в отдельную функцию. Если происходит ошибка - функция возвращает код ошибки (Err.Number) и источник (Err.Source). В операторе if мы проверяем та ли это ошибка, что нам нужна и если это именно так, значит параметр не удалось прочитать по причине его отсутствия, о чем нас честно и предупреждают в появившемся сообщении. При этом скрипт корректно отрабатывает до конца. Если же ошибки не возникло, мы спокойно прочитываем значение нужного нам параметра.

Обратите внимание на объект Err. Это стандартный объект VBScript, содержащий информацию о так называемых run-time errors (ошибках времени выполнения). Свойство Source указывает на источник ошибки (в сообщении на рисунке это последняя строка). Метод Clear очищает свойства объекта, удаляя сведения об ошибке. Помимо Source и Clear у объекта есть и другие свойства и методы, но реально может понадобиться, пожалуй, свойство Number и Description. Number возвращает код произошедшей ошибки, а Description ее описание. Измените в скрипте строку

Perem = "Параметр не существует"

на

Perem = "Ошибка " & Err.Number & ". " Err.Description

Во время выполнения скрипта появится сообщение: "Ошибка -2147024894. Не удается открыть для чтения раздел реестра "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Test"". Это большое отрицательное число и есть код ошибки. При обработке исключений можно пользоваться и номерами ошибок.

Почему для объяснения работы с исключениями я объяснял все примеры на чтении данных из реестра? Во-первых, работа с реестром в WSH одна из наиболее часто встречаемых задач, во-вторых, другие ошибки (например, попытка подмапировать сетевой диск на уже существующую букву, попытка открытия несуществующего файла и т.п.) могут быть обработаны другими способами (при открытии файла можно сперва проверить его наличие с помощью метода FileExists объекта fso), в то время как проверка наличия какого-либо параметра в реестре отсутствует в принципе. Поэтому вопросы обработки исключений при работе с реестром наиболее актуальны.



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

 Copyright © NetworkDoc.RU Domovoy 


Вверх
|

На главную
| Вернуться к списку статей


Visual Basic Script

Windows Script Host (WSH) - теория, реестр


Когда компьютеры были большими, а программы были маленькими, основной операционной системой большинства домашних компьютеров была DOS. Компьютерщиков в то время было немного и были они все люди занятые, поэтому для выполнения каких-то постоянно повторяющихся действий были придуманы и использовались bat-файлы (или, как они еще называются, пакетные файлы). С тех пор утекло немало воды, компьютеры стали маленькими и вошли в широкие народные массы. Программы, наоборот, стали очень большими и прожорливыми до ресурсов. Операционная система тоже изменилась. Про DOS большинство современных пользователей и не слышало, а если кому и доводилось с ним работать, то чувствовали они себя крайне некомфортно. А что же bat-файлы? Неужели на фоне всеобщего движения вперед они остались неизменны? Да, они по-прежнему исправно служат во многих ситуациях, но вместе с появлением Windows у них появился реальный конкурент: Windows Script Host (WSH).

Что же представляют собой файлы, написанные с использованием WSH? Это сценарии команд, написанные на JScript, VBScript или других скриптовых языках (Active Perl, Python), позволяющие автоматизировать какие-то действия на компьютере. При этом спектр действий по сравнению с bat-файлом существенно расширен. Помимо обычного запуска программ и работы с файлами WSH позволяет создавать ярлыки программ, выключать компьютер, изменять (добавлять и удалять) записи в реестре, работать с сетью и пользователями (выводить список дисков, подключать/отключать сетевые диски, получать имя компьютера и пользователя, ...), работать с переменными окружения, выдавать диалоговые и информационные сообщения и многое другое. Как видите, список различных возможностей WSH весьма впечатляющий. Причем, научиться с ним работать вовсе не сложно.

Из положительных особенностей Windows Script Host хотелось бы отметить возможность работы в "невидимом" режиме. Например, если вы захотите добавить какую-то информацию в реестр с помощью reg-файла, то вам будет выдан запрос с подтверждением этого действия. При запуске WSH-скрипта никаких вопросов задаваться не будет. Пользователь даже может не подозревать, что на его компьютере выполняются какие-то работы. Думаю, многим администраторам такая возможность придется по душе.


Файлы сценариев WSH представляют собой программы (да-да, это можно уже назвать программой), написанные на JScript (эти файлы имеют расширение .js) или VBScript (соответственно, файлы с расширением .vbs). Синтаксис, естественно, немного отличается, но если вам приходилось раньше сталкиваться с одним из этих языков написания скриптов, то никаких проблем возникнуть не должно.

Если вы пользователь Windows 98/ME/2000/XP то проблем с WSH у вас возникнуть не должно - библиотеки, отвечающие за обработку скриптов изначально присутствуют в системе. Если вы являетесь счастливым обладателем Windows NT, то для включения возможности обработки сценариев WSH вам придется установить сервис пак 4. Тем же, у кого на компьютере установлен Windows 95 придется заглянуть на сайт Microsoft и скачать Windows Scripting Host (msdn.microsoft.com/scripting). Если вы не уверены, есть ли у вас на компьютере Windows Scripting Host, просто запустите поиск файла wscript.exe в каталоге Windows.

Итак, для написания WSH-скрипта вам понадобится любой текстовый редактор (я предпочитаю использовать внутренний редактор FARa), немного терпения и голова на плечах.

Чтобы запустить готовый скрипт, просто дважды щелкните мышкой по файлу, либо введите полное имя файла скрипта в Пуск - Выполнить (учтите, что файл должен иметь расширение .js или .vbs).

Ну вот, на этом, пожалуй, теоретическую часть можно завершить и перейти непосредственно к написанию самих скриптов. В силу привычки я предпочитаю JScript, но по мере возможностей постараюсь приводить примеры как на JS, так и на VBS.

Так как раздел ориентирован в основном на реестр Windows, то и начать хотелось бы со скрипта, работающего с реестром. Итак, попробуем создать какой-нибудь раздел, в нем несколько параметров, а затем все это удалим. Создайте любой файл с расширением .js (например, test.js) и напишите в нем следующее:

//Пример работы с реестром на JScript var WSHShell = WScript.CreateObject("WScript.Shell"); WSHShell.Popup("Создаем раздел"); WSHShell.RegWrite("HKCU\\MyRegKey\\", "Primer"); WSHShell.Popup("Создаем строковый параметр"); WSHShell.RegWrite("HKCU\\MyRegKey\\String", 1); WSHShell.Popup("Создаем параметр DWORD"); WSHShell.RegWrite("HKCU\\MyRegKey\\DWORD", 2, "REG_DWORD"); WSHShell.Popup("Создаем двоичный параметр"); WSHShell.RegWrite("HKCU\\MyRegKey\\Binary", 3, "REG_BINARY"); WSHShell.Popup("Удаляем все параметры"); WSHShell.RegDelete("HKCU\\MyRegKey\\String"); WSHShell.RegDelete("HKCU\\MyRegKey\\DWORD"); WSHShell.RegDelete("HKCU\\MyRegKey\\Binary"); WSHShell.Popup("Удаляем раздел"); WSHShell.RegDelete("HKCU\\MyRegKey\\");



В первой строке создается объект типа WSHShell с тем же именем. Во второй строке выводится сообщение о том что создается раздел. После нажатия на "ОК" в появившемся окне в реестре будет создан новый раздел. Перед каждым действием будет появляться окно с сообщением о том, что сейчас будет сделано. В нормальном рабочем скрипте такие окна, конечно, не нужны. Здесь они добавлены просто для того, чтобы вы могли отследить изменения в реестре (для обновления информации в редакторе реестра нажимайте F5 после каждого изменения). Последние строчки удаляют наши параметры и раздел, чтобы не забивать реестр разным мусором.

Если вы обратили внимание, то корневой раздел HKEY_CURRENT_USER в скрипте обозначается как HKCU. Здесь возможны сокращенные названия корневых разделов. HKEY_LOCAL_MACHINE будет писаться как HKLM, HKEY_CLASSES_ROOT - HKCR. Остальные разделы не имеют короткого имени.

Теперь проделаем аналогичную операцию на VBScript (test.vbs):

'Пример работы с реестром на VBScript set WSHShell = WScript.CreateObject("WScript.Shell") WSHShell.Popup "Создаем раздел" WSHShell.RegWrite "HKCU\\MyRegKey\\", "Primer" WSHShell.Popup "Создаем строковый параметр" WSHShell.RegWrite "HKCU\\MyRegKey\\String", 1 WSHShell.Popup "Создаем параметр DWORD" WSHShell.RegWrite "HKCU\\MyRegKey\\DWORD", 2, "REG_DWORD" WSHShell.Popup "Создаем двоичный параметр" WSHShell.RegWrite "HKCU\\MyRegKey\\Binary", 3, "REG_BINARY" WSHShell.Popup "Удаляем все параметры" WSHShell.RegDelete "HKCU\\MyRegKey\\String" WSHShell.RegDelete "HKCU\\MyRegKey\\DWORD" WSHShell.RegDelete "HKCU\\MyRegKey\\Binary" WSHShell.Popup "Удаляем раздел" WSHShell.RegDelete "HKCU\\MyRegKey\\"

Как видите, отличия весьма незначительные (по другому задается комментарий, отсутствует ";" в конце строки, нет круглых скобок при задании параметров, var заменена на set). Подробно его разбирать, я думаю, смысла нет - все что справедливо для первого примера, справедливо и для второго.



"Это все здорово, но посоветуй-ка мне что-нибудь полезное!" - скажете вы. И посоветую. Я на 100% уверен, что абсолютно все пользователи интернета сталкивались с такой проблемой, как замена стартовой страницы Internet Explorer'a некоторыми сайтами. Причем, большинство этих сайтов не несет ничего полезного и зачастую видеть их у себя второй раз совсем не хочется. Для борьбы с ними используйте следующий скрипт:

var WSHShell = WScript.CreateObject("WScript.Shell"); //Делаем задержку 10 секунд на случай если //паразитный сайт добавил что-то в автозагрузку WScript.Sleep(10000); //Проверяем что у нас в стартовой странице StartPage = WSHShell.RegRead("HKCU\\SOFTWARE\\Microsoft\\Internet Explorer\\Main\\Start Page"); //И если там не то, что мы задумали, то меняем на свое if (StartPage!="http://www.winhowto.ru/") { WSHShell.RegWrite("HKCU\\SOFTWARE\\Microsoft\\Internet Explorer\\Main\\Start Page", "http://www.winhowto.ru/"); }

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

В конце приведу еще один небольшой скрипт, выводящий на экран окно с сообщением о версии WSH у вас на компьютере:

//Версия WSH на JScript var WSHShell = WScript.CreateObject("WScript.Shell"); WSHShell.Popup("Версия WSH "+WScript.Version);

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









 Copyright © NetworkDoc.RU Domovoy