Автоматизация 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ИТ КОМПЬЮТЕР? |
- | О НЕКОТОРЫХ МЕТОДАХ ОБНАРУЖЕНИЯ ЗАКЛАДОЧНЫХ УСТРОЙСТВ |
- | Хакеры или кракеры "Что такое хорошо и что такое плохо?" |
- | Атака из сети |
|
|
Дизайн: Кулишов Андрей Напишите мне |
Файлы 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
-
-
X
X
X
X
X
-
X
-
-
X
-
-
X
X
-
X
-
X
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);
}
Назад по тексту | Содержание | Вперед по тексту