WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

Pages:     || 2 | 3 | 4 | 5 |
-- [ Страница 1 ] --

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

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

Серьезность научно-технических e-book'ов разбавляет раздел развлекательной литературы (эротика, комиксы, задачи и головоломки).

Основной целью проекта является ознакомление читателей с многообразием книгопечатной продукции и помощь в выборе действительно стоящей книги для приобретения у законных издателей, их представителей или в соответствующих организациях торговли. Для покупки через Internet мы рекомендуем воспользоваться услугами интернет-магазина “Озон”.

ВНИМАНИЕ!

Данный файл представлен исключительно в ознакомительных целях!

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

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

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

Авторам и издательствам Если Вы заинтересованы в рекламе и продвижении Ваших книг на бескрайних сетевых просторах мы с удовольствием включим их в наш каталог.

АНДРЕЙ МИХАЙЛОВ ПРЕДПРИЯТИЕ 7.7/8. СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ ПРИМЕНЕНИЕ ТЕХНОЛОГИЙ OLE, COM, I ActiveX ИСПОЛЬЗОВАНИЕ СКРИПТОВ WSH И WMI ИМЕНЕНИЕ ADO SQL-DMO ПРИ РАБОТЕ БАЗАМИ ДАННЫХ ПОЛЬЗОВАНИЕ TJVE DIRECTORY RVICE INTERFACES Андрей Михайлов 1C:

ПРЕДПРИЯТИЕ 7.7/8. СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ Санкт-Петербург «БХВ-Петербург» УДК 681.3. ББК 32.973.26-018. М Михайлов А. В.

М69 1С:Предприятие 7.7/8.0: системное программирование. — СПб.:

БХВ-Петербург, 2005. — 336 с.: ил.

ISBN 5-94157-536-Х Содержится информация, предназначенная для практического применения скрытых возможностей операционной системы и разнообразных СОМ-объектов при разработке собственных информационных систем на платформе "1С:Предприятие" версий 7.7 и 8.0. Рассмотрены особенности использования объектов ActiveX, ад министрирования Windows средствами WMI и WSH, взаимодействия с базами данных посредством интерфейсов ADO и SQL-DMO, применения технологии OLE Automation и др. при работе в среде "1C:Предприятие". Материал сопровож дается большим количеством наглядных и подробно прокомментированных при меров, полные тексты которых приведены на компакт-диске.

Для программистов УДК 681.3. ББК 32.973.26-018. Группа подготовки издания:

Главный редактор Екатерина Кондукова Зам. гл. редактора Игорь Шишигин Зав. редакцией Григорий Добин Редактор Владимир Красильников Компьютерная верстка Натальи Караваевой Корректор Зинаида Дмитриева Дизайн серии Инны Тачиной Оформление обложки Игоря Цырульникова Зав. производством Николай Тверских Лицензия ИД № 02429 от 24.07.00. Подписано в печать 20.12.04.

Формат 70x100'/». Печать офсетная. Усл. печ. л. 27,09.

Тираж 4000 экз. Заказ № "БХВ-Петербург", 190005, Санкт-Петербург, Измайловский пр., 29.

Санитарно-эпидемиологическое заключение на продукцию № 77.99.02.953.Д.006421.11.04 от 11.11.2004 г. выдано Федеральной службой по надзору в сфере защиты прав потребителей и благополучия человека.

Отпечатано с готовых диапозитивов в ГУЛ "Типография "Наука" 199034, Санкт-Петербург, 9 линия, ISBN 5-94157-536-Х с Михайлов А. в., О Оформление, издательство "БХВ-Петербург", Содержание Введение Зачем нужна эта книга Структура книги Программные требования Описание сопроводительного CD-ROM Источники информации Глава 1. Применение технологий СОМ и ActiveX Технологии СОМ и ActiveX Работа с объектом Internet Explorer Определение текущего разрешения экрана '.

Анализ HTML-страниц... Работа с POST-запросами в HTML-формах Работа с объектом "Microsoft Winsock" Определение IP-адреса локального компьютера Определение IP-адреса удаленного компьютера Создание штрихкодов с использованием ActiveX ActiveBarCode..* Использование ActiveX Windows Media Player Использование помощников Microsoft Agent Понятие MS Agent Практическое применение MS Agent Интерактивное взаимодействие с MS Agent Создание HTML-редактора Регулярные выражения Глава 2. Администрирование Windows средствами WMI Понятие WMI Доступ к объектам WMI Сбор данных об аппаратном составе Работа с программным обеспечением Содержание Получение списка установленного программного обеспечения Удаление программного обеспечения Работа со службами и процессами Получение списка сервисов Установка приоритета процесса. Завершение процесса Запуск и приостановка выполнения сервиса Работа с операционной системой Определение информации об ОС Выключение компьютера Определение разрешения экрана Список элементов автозагрузки Активизация копии Windows XP/Server 2003 Просмотр учетных записей и доменов Определение домена компьютера Определение роли компьютера Определение имени текущего пользователя Определение локальных групп компьютера Определение списка пользователей и групп Работа с системной датой и временем Определение даты и времени '. Определение временной зоны Работа с журналами событий Получение информации о журнале событий Копирование и очистка журнала Просмотр записей журнала Работа с файлами и папками Переименование файлов Поиск всех файлов по расширению Открытие общего доступа к папке Работа с принтерами Добавление нового сетевого принтера Установка принтера по умолчанию Работа с заданиями планировщика Просмотр заданий в планировщике Создание заданий Работа с системным реестром Чтение значений ключей реестра Создание нового раздела Создание нового параметра Работа с сетью Отключение сетевого соединения Определение MAC- и IP-адресов Использование команды Ping Содержание Вставка текста и объектов в документ и форматирование текста Перемещение курсора по тексту Создание таблиц Обращение к свойствам документа Выгрузка метаданных в MS Word Динамическое создание и выполнение макросов MS Word Проверка орфографии текстов в MS Word Работа с Microsoft Excel Запуск MS Excel, создание и открытие рабочих книг Сохранение, печать и закрытие рабочих книг MS Excel Обращение к листам и ячейкам Создание диаграмм Выгрузка метаданных в MS Excel Создание сводных таблиц MS Excel Работа с Microsoft PowerPoint : Запуск MS PowerPoint и открытие презентаций.. Сохранение, печать и закрытие презентаций Демонстрация слайдов v Работа с Adobe Photoshop Глава 5. Использование ADO Понятие ADO Соединение с источником данных Выполнение SQL-запросов и хранимых процедур Обращение к результатам запроса Работа со структурой базы данных (ADOX) Чтение структуры базы данных... Создание баз данных и их объектов Удаление объектов базы данных Доступ к данным Microsoft Excel через OLE DB Доступ к данным Microsoft Project через OLE DB Глава 6. Использование SQL-DMO Понятие SQL-DMO Получение списка доступных серверов Перечисление спецификаций баз данных Получение списка таблиц и спецификаций полей Получение списка представлений.. Получение списка хранимых процедур Изменение структуры баз данных Создание и удаление баз данных Создание и удаление таблиц и их полей Содержание Глава 3. Использование скриптов WSH Что такое WSH Объектная модель WSH Запуск произвольного VB-скрипта (VBS) Выполнение операций с файловой системой Получение сведений о дисках, Получение сведений о папках и файлах Проверка существования определенного диска, каталога или файла Копирование файлов и папок Перемещение файлов и папок Удаление файлов и папок Создание папок Работа с текстовыми файлами Получение списка всех доступных дисков, папок и файлов Чтение свойств МРЗ-файлов Специальные папки Работа с ярлыками Windows Создание ярлыков для файлов Копирование, перемещение и удаление ярлыков Создание ярлыков для URL-адресов Работа с системным реестром Windows Понятие реестра Запись, чтение и удаление ветвей реестра Работа с сетевыми ресурсами Получение информации о сетевой идентификации Работа с сетевыми дисками Работа с сетевыми принтерами Управление программами : Управление калькулятором Управление Microsoft Word Запуск встроенного калькулятора Закрытие окна сообщений в системе "1С:Предприятие" Глава 4. Использование OLE Automation Понятие OLE Automation Использование системы "1С:Предприятие" в качестве OLE Automation сервера Использование OLE Automation сервера в версии 7.7 Использование OLE Automation сервера в версии 8.0 Использование СОМ-соединения в версии 8.0... Работа с Microsoft Word Создание и открытие документов MS Word Сохранение, печать и закрытие документов Содержание Создание SQL-скриптов Выполнение SQL-запросов Резервирование и восстановление базы данных Настройка ограничений доступа к данным Глава 7. Команды управления Windows, использующие ruiuU132 Понятие rund!132 Запуск элементов панели управления Запуск мастеров Работа с сетью Интернет Установка и удаление принтера Прочие команды Глава 8. Интернет-технологии Работа с электронной почтой Использование команды mailto Использование интерфейса MAPI Использование компоненты V7Plus.dll Использование компоненты Rom-Mail.dll Использование объекта Почта Использование объекта ИнтернетПочта Работа с протоколом FTP Использование программы ftp.exe Использование объекта FTPCoeduneme Глава 9. Использование Active Directory Service Interfaces Понятие ADSI Формирование дерева объектов WinNT Provider Вывод списка всех доменов локальной сети Вывод списка пользователей группы Создание и удаление пользователей Создание и удаление групп пользователей Манипулирование с учетными записями Вывод информации о компьютере и пользователе Приложение. Описание прилагаемого компакт-диска Предметный указатель ОАО «ТЕХНОЛОГИИ УСПЕХА» ФУНДАМЕНТ™ НАДОЕЛИ ПРОГРАММЫ-ПОЛУФАБРИКАТЫ?

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

ОАО «Технологии Успеха» спе циализируется на проектах разра ботки и внедрения заказных инфор мационных систем на платформе «1С:Предприятие 7.7/8.0». Это озна чает, что каждое Ваше требование будет учтено и реализовано точно в срок. Мы гарантируем Вам посто янную полную готовность системы к работе независимо от количества Ваших пожеланий по ее усовершен ствованию.

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

Наши телефоны: в Москве — (095) 975-0442;

в Великом Новгороде — (8162) 112- Адрес для связи: info@tehuspeh.ru Наш сайт в Интернете: www.tehuspeh.ru ые программные продукты Введение Зачем нужна эта книга Предметом изучения в данной книге является широкий спектр вопросов по профессиональному программированию в системе "1C:Предприятие" вер сий 7.7 и 8.0, а также использование скрытых и неочевидных возможностей данной системы.

Книга представляет собой практическое руководство, предназначенное для программистов, разработчиков и администраторов системы "1С:Предприятие".

В ней рассматриваются следующие темы: работа с технологиями ActiveX, COM, WMI и WSH;

OLE Automation;

интеграция с базами данных через ин терфейсы ADO и SQL-DMO;

работа с Интернетом, электронной почтой и FTP;

интеграция с внешними приложениями и многое другое.

Главная цель книги — дать читателю основы понимания того, что возмож ности системы "1C:Предприятие" не ограничиваются решением задач для автоматизации документооборота. В этой связи особо подчеркивается, что в системе "1С:Предприятие" можно использовать абсолютно разные техно логии программирования, которые активно используются программистами в других средах и языках программирования.

Книга не является традиционным учебником по программированию в среде "1С:Предприятие". Она сосредотачивает внимание читателя на неявных, скрытых, но не менее важных ее возможностях, а также возможностях опе рационной системы и разнообразных СОМ-объектов.

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

Причем примеры рассматриваются для обеих версий системы (7.7 и 8.0).

Структура книги Глава 1 "Применение технологий СОМ и ActiveX". В этой главе обсуждаются основы технологий СОМ и ActiveX. Здесь можно найти краткий обзор их воз можностей, а также получить всю необходимую информацию по использованию Введение этих технологий. Материал этой главы будет особенно полезен начинающим разработчикам, которые пока еще не работали с СОМ и ActiveX.

Теоретическая часть главы подкрепляется большим количеством примеров использования данных технологий. В частности, рассматриваются приемы работы с Internet Explorer, Microsoft Winsock, ActiveBarCode, Windows Media Player ActiveX, Microsoft Agent и многие другие.

Глава 2 "Администрирование Windows средствами WMI". В этой главе рас сматривается, каким образом возможно автоматизировать службу систем ного администратора средствами Windows Management Instrumentation (WMI).

В этой связи показывается, как выполнять различные операции с учетными записями пользователей;

доменами;

операционной системой;

файлами;

сис темным реестром;

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

Глава 3 "Использование скриптов WSH". Данная глава посвящена рассмотре нию возможностей стандартного компонента операционной системы Windows Script Host (WSH). В связи с этим, в ней подробно рассмотрена объектная модель WSH, с помощью которой можно работать с файловой системой, системным реестром, специальными папками и ярлыками Windows, ресурсами локальной сети, а также запускать процессы и контролировать ход их выполнения.

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

Глава 4 "Использование OLE Automation". Глава посвящена практическому использованию технологии OLE Automation. В ней приводится обзор самых популярных OLE-серверов, таких как Microsoft Word, Excel, PowerPoint и Adobe Photoshop. Помимо этого рассматриваются возможности использова ния системы "1С:Предприятие" версий 7.7 и 8.0 в качестве OLE Automation сервера, а также приемы работы с СОМ-соединением в версии 8.0.

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

Глава 5 "Использование ADO". Эта глава книги раскрывает вопросы интегра ции разрабатываемых конфигураций с произвольными базами данных при помощи технологии Microsoft ActiveX Data Objects (ADO).

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

Помимо ADO в главе содержится описание технологии ADO Extensions for Data Definition and Security (ADOX), которая представляет собой набор Введение объектов, позволяющих манипулировать метаданными в базах данных и управлять объектами, отвечающими за безопасность системы.

Глава 6. "Использование SQL-DMO". Здесь описывается еще одна технология доступа к базам данных Microsoft SQL Server с помощью технологии SQL Distributed Management Objects (SQL-DMO).

В ней приводятся примеры манипуляции с базами данных Microsoft SQL Server, таблицами, представлениями, хранимыми процедурами и SQL запросами. Также приводятся примеры работы с сервисными возможностя ми Microsoft SQL Server, такими как резервирование и восстановление баз данных и настройка ограничений доступа к данным.

Глава 7 "Команды управления Windows, использующие rundll32". В этой главе читатель узнает возможности использования утилиты командной строки rundll32, которая позволяет запускать некоторые команды, заложенные в DLL-файлах.

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

Глава 8 "Интернет-технологии". Данная глава посвящена использованию интернет-технологий в конфигурациях, разрабатываемых в среде системы "1С:Предприятие" версий 7.7 и 8.0.

Также здесь рассматриваются практические примеры работы с электронной почтой, включая как объекты доступа к почтовым ящикам, посредством ин терфейса Messaging Application Program Interface (MAPI), так и объекты, предназначенные для прямой работы с почтовыми серверами.

Помимо этого рассматриваются различные приемы работы с протоколом FTP.

Глава 9 "Использование Active Directory Service Interfaces". Это последняя глава книги, в которой рассматриваются вопросы работы с технологией Active Directory Service Interfaces (ADSI).

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

Программные требования Для запуска приведенных в книге практических примеров необходима установка системы "1С:Прёдприятии" версий 7.7 или 8.0. При этом реко мендуется использовать операционную систему Microsoft Windows или ХР.

Для выполнения отдельных примеров необходимо наличие установленных приложений или некоторых СОМ-объектов, которые располагаются на при лагаемом к данной книге компакт-диске.

Введение _J Описание сопроводительного CD-ROM В прилагаемом CD-ROM содержатся все исходные тексты примеров, а также СОМ-объекты, которые рассмотрены в книге. Помимо примеров, на компакт диске содержится Offline-версия интернет-проекта ERP Group (www.erpg.ru), основателем которого является автор книги.

Источники информации При написании книги использовалось множество интернет-ресурсов, ос новными из которых являются:

П http://www.ospi.ru — издательство "Открытые системы";

П http://msdn.microsoft.com — Microsoft Developer Network;

П http://rusproject.narod.ru — "Русский проект", автор А. Климов;

П http://admtech.mrsu.ru — Мордовский государственный университет им. Н. П. Огарева "Технологии администрирования Windows";

П http://avblc.narod.ru — домашняя страница Алексея Бажитова;

О http://www.erpg.ru — проект Андрея Михайлова "ERP Group".

Автор книги выражает искреннюю благодарность авторам данных информа ционных ресурсов.

г Глава Применение технологий СОМ и ActiveX Технологии СОМ и ActiveX Аббревиатура СОМ расшифровывается достаточно просто. По существу это краткая запись понятия — Component Object Model (компонентная объект ная модель). Иногда говорят — "модель СОМ".

Построение компонентной объектной модели осуществляется при помощи соответствующей информационной технологии. Суть ее заключается в том, что программы строятся из компонентов, которые в свою очередь состоят из объектов. Эти компоненты и объекты могут представлять собой непосредст венно исполняемый двоичный код или файлы (DLL, EXE), которые никак не надо "связывать" с проектом, для которого они построены. Их достаточно зарегистрировать в операционной системе и они будут доступны любой программе, исполняющейся на данной машине. Таким образом, использо вание их в программе производится без применения операций сборки моду ля. Более того, модель СОМ позволяет вызывать объекты какого-либо ком понента из своей программы без указания того, где они расположены. Здесь достаточно знать только имя объекта.

Объекты СОМ можно создавать на любом языке, способном поддерживать данный интерфейс. После этого обращаться к методам этих объектов можно будет на любом языке, в том числе и на встроенном языке системы "1С:Предприятие", позволяющем осуществлять вызовы данного двоичного интерфейса. Ни объект, ни его клиент не знают (да и зачем им это) — на каком языке написаны другие.

Технология СОМ (в дальнейшем просто — СОМ) разработана Microsoft, а поэтому первоначально была доступна для программ, работающих под управлением Microsoft Windows 9x и Microsoft Windows NT. Теперь Microsoft предоставляет поддержку СОМ и для Macintosh. Хотя Microsoft не поддер живает СОМ на других операционных системах, этот пробел заполнен 14 Глава третьими фирмами. Несколько компаний, больших и малых, предоставляют реализации СОМ и основанных на ней технологий для широкого диапазона операционных систем.

Технология ActiveX построена на основе компонентов COM. ActiveX — это технология, разработанная фирмой Microsoft с целью стандартизации про граммных компонент. Это системная технология, представляющая совокуп ность средств, с помощью которых объекты, разработанные различными разработчиками на разных языках программирования и работающие в раз ных средах могут взаимодействовать друг с другом без какой-либо модифи кации их исполняемых модулей (двоичных кодов).

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

'П Визуальные (например, Microsoft Agent, Progress Control, Slider Control, календарь, таймер и пр.);

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

Преимущества использования технологии ActiveX заключаются в следующем:

П быстрое написание программного кода, которое выражается в том, что раз работка приложений становится очень похожей на программирование, в котором используются отдельные "программные кирпичики" (элементы ActiveX);

П открытость и мобильность, являющиеся следствием спецификации дан ной технологии, недавно переданной в Open Group, как основы откры того стандарта (кроме того, Microsoft совместно с компаниями Metro werks и Bristol заканчивает реализацию технологий ActiveX для платформ Macintosh и UNIX);

П возможность написания приложений с использованием любых средств разра ботки, выражающееся в том, что программные элементы ActiveX могут использоваться в Visual Basic, Visual C++, Borland Delphi, Borland C++, 1С:Предприятие и других средствах разработки приложений;

П большое количество уже существующих программных элементов ActiveX, причем некоторые из разработанных компонентов являются бесплатны ми и могут применяться в приложениях независимых разработчиков;

П стандартность, выражающаяся в том, что технология ActiveX основана на широко используемых стандартах Интернета (TCP/IP, HTML, Java), с од ной стороны, и стандартах, введенных в свое время Microsoft и необхо димых для сохранения совместимости с СОМ и OLE, с другой.

Как ни странно, при рассмотрении проблемы расширения встроенного язы ка системы "1С:Предприятие", речь заходит только о внешних компонентах, в основу которых положена идеология СОМ, но которые должны быть на писаны по единому стандарту "1C". Следствием этого является невозмож Применение технологий СОМ и ActiveX ность использования компонентов, которые написаны в средах других язы ков программирования. В связи с этим, в данной главе будут рассмотрено большое число возможностей использования стандартных СОМ- и ActiveX объектов в системе "1С:Предприятие".

В системе "1С:Предприятие" (версия 7.7) новый экземпляр СОМ-объекта созда ется с помощью конструкции Идентификатор = СоздатьОбъект("ИмяОбъекта").

Для версии 8.8 оператор создатьОбъект заменяется на новый сомобъект.

Методы и свойства СОМ-объектов в дальнейшем становятся доступными через созданный объект.

Работа с объектом Internet Explorer СОМ-объект, предоставляемый браузером Microsoft Internet Explorer, позво ляет выполнять множество функций. Например, получение данных с раз личных Web-сайтов и использование полученной информации в своих це лях, автоматическая регистрация сайта во всех поисковых системах сразу, решение задач посылки GET и POST-запросов и др. Поскольку данный браузер присутствует в любой современной операционной системе семейст ва Windows, то использование данного компонента является одним из самых универсальных способов получения сторонних HTML-данных.

Рассмотрим ряд приемов использования данного СОМ-объекта.

Определение текущего разрешения экрана Для того чтобы определить текущее экранное разрешение, находясь в брау зере, необходимо запустить объект internet Explorer и определить, как это показано в листинге 1.1, текущее разрешение.

objIE = СоздатьОбъект("InternetExplorer.Application");

objIE.Visible =0;

// Отключаем видимость objIE.Navigate("about:blank");

// Загружаем пустую страницу Пока objIE.readyState < 4 Цикл // Ждем пока она загрузится КонецЦикла;

oScreen = objIE.document.parentWindow.screen;

Сообщить("Текущее разрешение экрана: " + oScreen.width + "х" + oScreen.height);

Приведенный код работает в системе "Ю.Предприятие 7.7". Для версии 8. необходимо в первой строке заменить "создатьОбъект" на "новый сомобъект".

16 Глава Внимание Если в цикле ожидания готовности объекта obj IE условие obj IE. readystate < заменить на objiE.busy (распространенная ошибка), то в Windows 9x прило жение будет завершаться с ошибкой примерно один раз из четырех.

Несмотря на всю привлекательность использования Internet Explorer, выше описанный подход имеет и значительные недостатки, основной из кото рых — это существенное понижение общей производительности приложе ния. Для более эффективного определения текущего разрешения экрана рекомендуется использовать объекты WSH или WMI, о которых будет под робно рассказано в последующих главах.

Анализ HTML-страниц Среди множества методов и свойств Microsoft Internet Explorer есть весьма ценное свойство Document, которое позволяет получить доступ к содержи мому объектной модели HTML документа (то есть возвращает ссылку на тот же объект, что и строка клиентского JScript: window.document). Это позволя ет в свою очередь легко и просто разбирать HTML-документы безо всяких регулярных выражений.

Рассмотрим примеры использования Internet Explorer для анализа всех ссы лок на HTML-странице, получая информацию с сайта автора www.erpg.ru (листинги 1.2 и 1.3). Данную информацию можно использовать, например, для автоматического определения наличия необходимой ссылки на свой сайт при обмене кнопками и баннерами (рекламными блоками) с дружест венными сайтами.

objIE = СоздатьОбъект("InternetExplorer.Application");

objIE.Visible = 0;

objIE.Silent = 0;

objIE.Navigate(Адрес);

Пока objIE.readyState<4 Цикл // Ждем пока она загрузится КонецЦикла;

obj Doc = objIE.Document;

AllTags = objDoc.all.tags("A");

// Получаем всю коллекцию ссылок Для Ном = 0 По AllTags.length-1 Цикл Сообщить(AllTags.item(Ном).href);

КонецЦикла;

objIE.Quit();

// Закрываем приложение objIE = " ;

" Применение технологий СОМ и ActiveX те для версии 8. objIE = Новый СОМОбъект("InternetExplorer.Application");

objIE.Visible = Ложь;

// Отключаем видимость objIE.Silent = Ложь;

objIE.Navigate(Адрес);

Сообщить("Идет загрузка страницы. Ждите...");

Пока objIE.readyState<4 Цикл // Ждем пока загрузится страница КонецЦикла;

objDoc = objIE.Document;

Для каждого а Из objDoc.all.tags("А") Цикл // Перебираем все ссылки Сообщить(a.href);

КонецЦикла;

objIE.Quit();

// Закрываем приложение objIE = Неопределено;

Существует несколько важных отличий в реализации данной задачи на раз ных версиях системы "Ю.Предприятие".

1. Создание СОМ-объекта в версии 7.7 происходит с помощью конструк ции СоздатьОбъект, а В версии 8.0 — Новый СОМОбъект.

2. Конструкция objooc.aii.tags ("А") возвращает коллекцию СОМ объектов с ссылками HTML-страницы, заключенные в тег <А>, но вер сия 7.7 не позволяет напрямую работать с подобными коллекциями. По этому для этой версии сначала определяется количество элементов в кол лекции с помощью структуры AiiTags. length, а только потом каждый элемент получаем методом ^ет(<номерэлемента>). В версии 8.0 обход элементов любой коллекции происходит с помощью конструкции для каждого...из...цикл...конеццикла, причем каждый полученный элемент цикла уже будет соответствовать очередному элементу коллекции СОМ объектов.

Работа с POST-запросами в HTML-формах Данный тип HTTP-запросов чаще всего используется для транслирования сторонней информации в тех случаях, когда для доступа к ней требуется ли бо идентификация прав доступа (предварительный ввод имени пользователя и пароля), либо автоматическое заполнение определенной HTML-формы и отправки этой информации куда-либо, например, на форум.

Обычно, для передачи данных POST-запроса, во всех популярных языках программирования применяется метод Navigate объекта InternetExplorer со 18 Глава специальным параметром PostData. Однако, несмотря на это, его практиче ское использование в среде "1С:Предприятие" сопряжено с некоторыми трудностями. Дело в том, что данный аргумент должен иметь тип — указа тель на структуру SafeArray, который не поддерживается системой "1C:Предприятие" версии 7.7.

Поэтому самым простым способом отправить POST-запрос посредством internetExpiorer.Application можно считать "эмуляцию" нажатия кнопки Submit (управляющая кнопка, используемая для передачи данных формы на сервер) на какой-либо реальной HTML-форме. Этот способ особенно инте ресен с учетом того, что многие скрипты, при обработке POST-запросов, как раз для защиты от подобной автоматизации, учитывают HTTP_REFERER, т. е. с какой страницы пришел запрос, и (или) выставляют специальные сессионные переменные или cookie на той странице, где находится форма, посылающая POST-запрос.

Листинги 1.4 и 1.5 демонстрируют примеры подобного программного эмулиро вания "интерактивного пользователя". При этом программа, написанная для версии 7.7, приведенная в листинге 1.4, демонстрирует заполнение HTML формы (рис. 1.1) форума, расположенного по адресу http://forum.erpg.ru.

;

: |Кнопка "Отправить" в форме имеет имя .

!

Предв.просмотр Отправить Рис. 1.1. Элементы HTML-формы форума HTML-формы сообщения на фору objIE = СоздатьОбъект("InternetExpiorer.Application");

objIE.Visible = 0;

objIE.Silent = 0;

objIE.Navigate("http://erpg.ru/fоrum/posting.php?mode=reply&t=34") Пока objIE.readyState<4 Цикл // Ждем пока она загрузится КонецЦикла;

objDoc = obj IE. Document;

objForm = objDoc.forms(0);

// Получаем первую форму в документе Применение технологий СОМ и ActiveX Попытка // Заполняем поле формы "Имя пользователя" objForm.elements("username").value = СокрЛП(Имя);

Исключение КонецПопытки;

objForm.elements("subject").value = СокрЛП(Тема);

objForm.elements("message").value = СокрЛП(Описание);

objIE.Visible = 1;

Сообщить("HTML-форма форума заполнена. Для отправки сообщения необходимо нажать кнопку Отправить в Internet Explorer.");

К сожалению, версия 7.7 не позволяет выполнить эмуляцию нажатия опре деленной кнопки HTML-формы из-за того, что система не опознает метод click о элемента формы, поэтому для окончательной отправки сообщения на форум пользователю необходимо вручную нажать на кнопку Отправить в окне Internet Explorer. Но если на форме имеется только одна кнопка, ис пользуемая по умолчанию, то для программной эмуляции ее нажатия можно ИСПОЛЬЗОВать метод submit: obj Form, submit О.

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

objIE = Новый СОМОбъект("InternetExplorer.Application");

objIE.Visible = Ложь;

// Отключаем видимость objIE.Silent = Ложь;

objIE.Navigate("http://erpg.ru/forum/posting.php?mode=reply&t=34");

Сообщить("Идет загрузка страницы. Ждите...");

Пока objIE.readyState<4 Цикл // Ждем пока загрузится сраница КонецЦикла;

objDoc = objIE.Document;

// Получаем объект HTML-документ objForm=objDoc.forms(0);

// Получаем первую форму в документе Попытка // Заполняем поле формы "Имя пользователя" objForm.elements("username").value = Имя;

Исключение КонецПопытки;

objForm.elements("subject").value = Тема;

20 Глава objForm.elements("message").value = Описание;

objForm.elements("post").click();

// Нажимаем на кнопку "Отправить" Сообщить("Ваше сообщение отправлено на форум по адресу: " + "http://erpg.ru/forum/viewtopic.php?t=34");

objIE.Quit();

// Закрываем приложение objIE = Неопределено;

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

На форуме используется система авторизации пользователей, и если пользо ватель был авторизирован ранее, то поле username не появляется на форме.

Работа с объектом "Microsoft Winsock" Microsoft Winsock — это объект ActiveX, который обеспечивает простой дос туп к TCP или UDP сетевым операциям. Чаще всего его используют для то го, чтобы подсоединиться к удаленному компьютеру и обмениваться дан ными в обоих направлениях.

Объект Winsock имеет следующие свойства:

П ByteRecived — возвращает количество полученных данных, находящихся в данный момент в принимающем буфере;

П LocaiHostName — возвращает имя местного компьютера;

П Locaiip — возвращает IP-адрес местного компьютера в формате (ххх.ххх.ххх.ххх);

П LocaiPort — возвращает или устанавливает местный порт использования;

К Примечание Для клиента порт используется для отправки данных. Укажите порт 0, если приложение не требует специфического порта. В этом случае элемент управ ления выберет случайный порт. После установления соединения этот местный порт используется для TCP-соединений. Для сервера этот порт является при нимающим. Если указан порт 0, будет использоваться случайный порт. После вызова функции Listen свойство содержит порт, который был выбран.

Protocol — возвращает или устанавливает протокол, используемый Winsock (либо TCP, либо UDP);

RemoteHost — возвращает или устанавливает имя или IP-адрес удален ного компьютера, с которым нужно обмениваться данными (можно ука зать IP-адрес, имя компьютера или FTP-адрес);

Применение технологий СОМ и ActiveX П RemoteHostip — возвращает IP-адрес удаленного компьютера;

П RemotePort — возвращает или устанавливает порт удаленного компьюте ра для соединения (порты, устанавливаемые по умолчанию: 80 — HTTP, 26 - FTP);

П state — возвращает состояние элемента управления в числовом выражении.

Определение IP-адреса локального компьютера Для определения IP-адреса локального компьютера используется свойство LocaiiP объекта winsock. В листинге 1.6 приведен фрагмент программы, показывающий вариант реализации этого действия.

ределение IP-адреса локального компьютера Winsock = Новый СОМОбъект("MSWinsock.Winsock");

Сообщить(Winsock.LocaiiP) ;

Winsock = Неопределено;

Определение IP-адреса удаленного компьютера Для определения IP-адреса удаленного компьютера используется свойство RemoteHostip объекта winsock. В листинге 1.7 приведен фрагмент программы, показывающий вариант реализации этого действия.

Winsock = Новый СОМОбъект("MSWinsock.Winsock");

Winsock.Connect(ИмяСервера, 139);

Пока Winsock.State = 4 Цикл // Ждем пока произойдет соединение КонецЦикла;

Сообщить(Winsock.RemoteHostIP);

Winsock = Неопределено;

Код довольно простой, но в нем есть некоторые особенности.

П Для TCP-соединения с удаленным сервером используется порт 139, кото рый, как правило, доступен всегда.

П Метод Connect является асинхронным, то есть возврат из него осуществ ляется сразу же, не дожидаясь установления соединения.

П Для ожидания соединения с удаленным компьютером в цикле анализи руется состояние соединения state.

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

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

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

Безусловно, система "1С:Предприятие" позволяет использовать техно логию штрихкодирования при автоматизации предприятия с использова нием входящего в поставку многих конфигураций ActiveX-элемента — ActiveBarCode. Он позволяет формировать образ штрихкода непосредст венно в "1С:Предприятии". Этот элемент поддерживает практически все из вестные форматы штриховых кодов, управление цветом и шрифтом выво димого штрихкода, автоматическое определение формата кода, а также вычисление контрольных цифр.

Компонент ActiveBarCode имеет множество свойств, методов и событий.

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

П Text — текст выводимый под штрихкодом (обычно номер);

П туре — тип штрихкода (полный список кодов можно найти на сайте производителя http://www.activebarcode.com);

П AutoType — признак автоматического определения типа исходя из номе ра штрихкода;

П showText — признак включения или отключения вывода текста под штрихкодом;

О ForeCoior — цвет текста штрихкода;

П Backcoior — цвет фона;

П Font — шрифт текста штрихкода.

Фактически данный компонент представляет из себя файл Barcode.ocx, который может располагаться где угодно, но перед использованием его обязательно не обходимо зарегистрировать в системе командой regsvr32 Barcode. осх.

ActiveBarCode является визуальным компонентом, т. е. его можно размес тить в диалоге или таблице. Однако следует заметить, что использование данного ActiveX-компонента несколько отличается в разных версиях систе мы "1С:Предприятие". Основное различие состоит в том, что в версии 7. невозможно размещать ActiveX-компоненты на формах (разрешено только в табличных документах). В восьмой версии таких ограничений нет.

Применение технологий СОМ и ActiveX Есть еще одна крайне неприятная особенность версии 7.7. Она заключается в том, что в этой версии нельзя штатными средствами вставить данный эле мент в табличный документ. Чтобы все-таки это сделать, необходимо вста вить ActiveBarCode в любом другом приложении (например в MS Word, "1С:Предприятие" 8.0 и др.), а потом через буфер обмена перенести его в табличный документ 7.7. Далее, для динамического вывода нужного номе ра на штрихкоде надо в свойствах данного объекта прописать необходимые свойства объекта (рис. 1.2).

Таблица.ТекцщийОбъект.Тех! = СокрЛП(Номер);

Таблица.ТекащийОбъект.ЗНоюТех! = Показывать;

ОК Таблица.ТекущийОбъект.Туре = Тип;

Расшифровка Отмена L W Защита ;

Обновить Рис. 1.2. Настройка параметров динамического формирования ActiveBarCode Для вывода табличного документа используется стандартный код "ЮПредприятия" (листинг 1.8).

Таблица.ИсходнаяТаблица("Таблица");

Таблица.ВывестиСекцию("ШтрихКод");

Таблица.Показать("Штрихкод");

В данном примере предполагается, что:

1. Элемент ActiveBarCode в табличном документе находится в секции ШтрихКод.

2. Переменные номер, Тип и Показывать, введенные в свойствах элемента, объявляются и заполняются в коде до вывода таблицы (например, из диалога или справочника).

24 Глава В версии 8.0 системы "1С:Предприятие" все намного проще. В этом случае ActiveX-элементы можно устанавливать как на форму (Форма | Вставить ActiveX и затем выбрать ActiveBarcode), так и в табличный документ (Таб лица | Рисунки | Вставить объект).

Так, если элемент ActiveBarcode находится на форме и имеет имя Штрихкод, то для его формирования достаточно написать код, приведенный в листинге 1.9.

ЭлементыФормы.ШтрихКод.Туре = Тип;

ЭлементыФормы.ШтрихКод.Text = Номер;

ЭлементыФормы.ШтрихКод.ShowText = Показывать;

ЭлементыФормы.ШтрихКод.AutoType = Автоопределение;

В результате выполнения этого кода на форме появится необходимый номер со штрихкодом (рис. 1.3).

jj ActiveB aiCode Параметры Номер: [Т23456739ШГ 0 iQS Тип: С] Аетоопраделение Рис. 1.3. Результат формирования штрихкода для версии 8. Использование ActiveX Windows Media Player ActiveX-компонент Microsoft Windows Media Player позволяет просматривать видео, прослушивать аудиофайлы, а также просматривать рисунки различ ных форматов (JPG, BMP и др.). Данный компонент бывает очень полезен, когда необходимо просмотреть определенную мультимедийную информа цию о товаре или поставщике.

Применение технологий СОМ и ActiveX Существует несколько версий Windows Media Player. Для определенности будем рассматривать версию 9.0, которую можно загрузить на сайте произ водителя http://www.microsoft.com/windows/windowsmedia/download/default.asp.

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

Для работы Windows Media Player в системе "1C:Предприятие" необходимо выполнить всего два условия.

1. Для размещения ActiveX-компонента на форме в меню Форма следует выбрать пункт Вставить ActiveX. В появившемся списке выбрать Windows Media Player.

2. Написать код, который бы передавал файл с мультимедийной информа цией в ActiveX-компонент (листинг 1.10).

Попытка ЭлементыФормы-WMP.settings.autostart = True;

// Автовоспроизведение ЭлементыФормы.WMP.URL = ИмяФайла;

Исключение Предупреждение(ОписаниеОшибки(), 10, "Ошибка");

КонецПопытки;

В данном Примере Применена КОНСТРУКЦИЯ Попытка...Исключение...КонецПопытки для предотвращения ошибок, связанных с отсутствием в системе данного компонента. Элемент формы WMP как раз и является ActiveX-компонентом.

С помощью ActiveX Windows Media Player можно также просматривать свойства файла (tag, Bitrate и пр.). В листинге 1.11 демонстрируется при мер просмотра свойств произвольного файла.

'ActiveX Windows Media Player j Попытка ЭлементыФормы.WMP.settings.autostart = False;

ЭлементыФормы.WMP.URL = ИмяФайла;

// Получаем объект, предназначенный для работы с выбранным файлом 26 Глава CM = ЭлементыФормы.ИМР.сиггегЛМес11а;

// Получение значения свойства по имени Сообщить("Полное имя файла: " + CM.getItemInfo("SourceURL"));

// Получение всего списка свойств Для Ном = 0 по CM.attributeCount-1 Цикл ИмяСвойства = CM.getAttributeName(Ном);

ЗначениеСвойства = CM.getltemlnfо(CM.getAttributeName(Ном);

Сообщить(ИмяСвойства + " = " + ЗначениеСвойства);

КонецЦикла;

Исключение Предупреждение(ОписаниеОшибки(), 10, "Ошибка");

КонецПопытки;

Использование помощников Microsoft Agent Понятие MS Agent Microsoft Agent — это набор программных средств, которые поддерживают воспроизведение интерактивных анимированных персонажей. Разработ чики могут использовать эти персонажи для создания различных инте рактивных приложений, справочных систем, в том числе и в системе " 1 С: Предприятие".

Также Microsoft Agent предлагает поддержку распознавания голосовой ин формации (на основе Microsoft Speech Application Programming Interface, SAPI 4.0), позволяя управлять приложениями на уровне голосовых команд.

Персонажи могут воспроизводить синтезированную речь (text-to-speech, TTS), аудиофрагменты или текст.

Персонажи отображаются в собственных окнах, что делает интерфейс более удобным и гибким. В состав Microsoft Agent входит компонент ActiveX, дос тупный из системы "1C:Предприятие".

Эта технология напрямую используется в Office 2000 и включена в состав ядра Windows 2000. Для установки Microsoft Agent в Windows 98 и Windows NT 4.0 требуется загрузить соответствующее программное обеспечение с Web-узла фирмы Microsoft (http://www.microsoft.com/msagent/).

В настоящее время на сайте Microsoft доступны четыре стандартных персо нажа, которые можно использовать. Это маг — Merlin, джин — Genie, ро бот — Robby и попугай — Peedy (рис. 1.4).

Применение технологий СОМ и ActiveX Рис. 1.4. Основные персонажи Microsoft Agent Кроме стандартных персонажей в сети Интернет существуют персонажи, разработанные другими разработчиками на любой вкус.

^ Примечание На том же сайте Microsoft можно загрузить Microsoft Text-To-Speech для того, чтобы "агенты" воспроизводили речь (русский голосовой модуль — Lernout&Hauspie TTS3000), а также редактор "агентов" и официальную доку ментацию Microsoft. Так, при написании материала данной главы были исполь зованы Microsoft Agent Control 2.0 и персонаж Merlin.

Практическое применение MS Agent Microsoft Agent очень удобно применять в приложениях, где необходимо выводить какие-либо сообщения, подсказки и указания пользователю, но не хочется ограничиваться штатными методами системы. Microsoft Agent по зволяет все это сделать красиво, удобно и необычно. Наверняка работать со столь дружественным интерфейсом, как показано на рис. 1.5, будет приятно любому пользователю.

В системе "1C:Предприятие" доступ к объекту Microsoft Agent создается С ПОМОЩЬЮ конструктора СоздатьОбъект ("Agent. Control. 2 " ), ДЛЯ версии 7.7, и новый сомобъект("Agent.Control.2"), для версии 8.0. После создания объекта минимальное, что нужно сделать, — это подключиться к созданно му объекту, загрузить необходимый персонаж и вывести его на экран (лис тинг 1.12).

персонажа Попытка // Устанавливаем ссылку на объект Agent = Новый СОМОбъект("Agent.Control. 2 ") 28 Глава Исключение Сообщить("MS Agent не установлен!");

Сообщить("Загрузить MS Agent можно с сайта Microsoft — http://www.microsoft.com/ms agent/");

Возврат;

КонецПопытки;

Agent.Connected = Истина;

// Подключаемся к объекту Agent.Characters.Load("Merlin", "Merlin.acs");

// Загружаем персонаж Agent.Characters("Merlin").Show();

// Выводим на экран Рассмотрим код, приведенный в листинге 1.12, более подробно.

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

идентификатор персонажа и полное имя файла персонажа или его HTTP адрес. Microsoft Agent по умолчанию ищет персонажи в каталоге %WinDir%\MSAgent\Chars (где %WinDir% — это переменная окружения, ко торая указывает путь к каталогу операционной системы Microsoft Windows).

Если файл вашего персонажа находится в другом месте, указывайте для него полный путь. Microsoft Agent поддерживает два формата для хранения дан ных доступных анимаций: одиночный файл (ACS) для локального примене ния и множественный формат (ACF, АСА), который хранит отдельные виды анимаций и используется для загрузки анимации отдельно через http-сервер.

_ПX LJ Журнал операций 1.5 ;

? Перейти в журнал проводок 'х. 1 ;

«--4 ^S М..'-^f =€}т Д ft Ч:.;

* 'Действия-- =. i,. 1 Организ эция: L Организация Н омер _ {Сшержание рпераи.ии Виидркумента | ^щ6ТЖ2оЖ12:'боЖ"'ОАб'Тяобу!?1""" Операция 0000000013 | Формирование уставного капита...

| Ж 02.06.2003 12: 00: 00 ОАО Глобус" Операция 1| ОООООООС ОООООООС Чтобы ввести новую ем 0...

it*: > 02.06.2003 19:30:22 ОАО "Глобус" Операция Ьшообга Г'ТаГ";

:;

!

операцию нажмите кнопку Операция ОАО "Глобус" оооооои .

!tf*j 103.06.20031:18:57" " ОАО 'Глобус" Операция юМа...

Операция !r* |СШ2аШ2:ОаоГ ОАО Тяобус" ОООООООшЬ и зное уставный капитал • kX i 03.06.2003 12:00:01 ОАО Тлобус" Операция 0000000018 ПродаЮговаров покупателю Ма...

f,3f "ТозЖгооз^баш" ЪАО'Тлобус"" " Операция 000066Ь020 Гбплата о? покупателя Магазин "В... v ::~ ^ ;

IE.

a Дт [С^бконто Дт !Количество Дт Кт Субконто Кт |Количеств^".;

^ i Сумма з| (Валюта KfE<«J(^ :Содержание _ _ |^ I Валюта Дт _ :Вал, сум^^ ^Номер журнала ~75.Т Тв'олковНик... ;

Волков Ник... •• •& Jm 50000,00 ;

| ^'ажена..?а59л??11::„'" I J Ч „. j k^ l j Il -^ 80" 75.1 ~ТЛиберзон М..7Г" ;

Отражена задолжен... \л \ Рис. 1.5. Пример вывода сообщения Microsoft Agent Применение технологий СОМ и ActiveX Приложение может загрузить только единственный экземпляр заданного персонажа. Но при этом можно использовать одновременно разные персо нажи.

Метод show выводит заданный персонаж на экран с одновременным проиг рыванием соответствующей анимацией и не имеет параметров. Для скрытия персонажа существует метод Hide, который тоже параметров не имеет.

Вместо загрузки заданного персонажа, жестко определяя его имя, вы можете загрузить персонаж по умолчанию (листинг 1.13). Метод ShowDefaultCharacterProperties объекта Agent ВЫВОДИТ панель настройки свойств для выбора персонажа по умолчанию. В качестве аргументов в ме тод можно (но не обязательно) передавать пару координат (X, Y), задающие горизонтальную и вертикальную координаты экрана в пикселах для вывода окна.

Листинг 1.13. Создание объекта MS Agent и вывод персонажа по умолчанию Попытка Agent = Новый СОМОбъект("Agent.Control.2");

Исключение Сообщить("MS Agent не установлен!");

Возврат;

КонецПо'пытки ;

Agent.Connected = Истина;

// Подключаемся к объекту // Вывод панели настройки свойств для выбора персонажа по умолчанию Agent.ShowDefaultCharacterProperties(4, 4);

Agent.Characters.Load(,);

// Загружаем персонаж по умолчанию Agent.Characters("").Show();

// Выводим на экран персонаж по умолчанию После вывода персонажа на экран было бы очень хорошо "оживить" его, т. е. анимировать. Для анимации персонажа MS Agent предоставляет два ме тода: MoveTo и Play. Важно отметить, что эти методы не объекта Agent, а методы конкретного загруженного персонажа (листинг 1.14).

—- -^—------------.——-—- -j г----'"'""'-------—--"--•"-•-—"- ! Листинг 1.14. Анимация персонажа MS Agent Попытка Agent = Новый СОМОбъект("Agent.Control.2");

Исключение Сообщить("MS Agent не установлен!");

30 Глава Возврат;

КонецПопытки;

Agent.Connected = Истина;

// Подключаемся к объекту Agent.Characters.Load("Merlin", "Merlin.acs");

// Загружаем персонаж Characters = Agent.Characters("Merlin");

// Получаем ссылку на персонаж Characters.Show(};

// Выводим на экран // Перемещаем персонаж Characters.MoveTo(100, 100);

// Перемещаем в координаты (X, Y) Characters.MoveTo(200, 0, 500);

// 500 — скорость анимации Characters.MoveTo(300, 100, 0);

//0 - без анимации // Проигрываем заданную анимацию Для Ном = 1 По 5 Цикл // Волшебник постучится в монитор Characters.Play("GetAttentionContinued");

КонецЦикла;

Characters.Play("Search");

// Волшебник покажет волшебный шар Метод MoveTo перемещает персонаж в указанное место и имеет три пара метра. Первые два являются обязательными и задают новые координаты персонажа (X, Y) относительно всего экрана. Третий параметр необязатель ный и означает время перемещения персонажа. По умолчанию используется 1000 миллисекунд. При использовании нулевого значения персонаж пере мещается без анимации.

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

Для того чтобы получить весь список возможных имен анимаций для пер сонажа, существует метод AnimationNames, который возвращает коллекцию этих имен. К сожалению, версия 7.7 системы "1C:Предприятие" не позволя ет получить все элементы этой коллекции. В версии 8.0 код вывода всех возможный анимаций персонажа будет выглядеть так, как это показано в листинге 1.15.

Попытка Agent = Новый СОМОбъект("Agent.Control.2");

Исключение Сообщить("MS Agent не установлен!");

Применение технологий СОМ и ActiveX Возврат;

КонецПопытки;

Agent.Connected = Истина;

// Подключаемся к объекту Agent.Characters.Load("Merlin", "Merlin.acs");

// Загружаем персонаж Characters = Agent.Characters("Merlin");

// Получаем ссылку на персонаж // Получение всех возможных анимаций. Перебор элементов коллекции.

Для каждого Имя Из Characters.AnimationNames() Цикл Сообщить(Имя);

КонецЦикла;

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

Microsoft Agent имеет также одну интересную особенность. Например, если статус персонажа не меняется несколько секунд, то Agent начинает само стоятельно проигрывать некоторые виды анимаций.

Для того чтобы остановить анимацию персонажа, применяется метод stop, а для того чтобы остановить все (анимацию, перемещение, речь) — метод StopAll.

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

Для того чтобы персонаж вывел какой-либо текст, существует метод Think, а для воспроизведения текста — метод Speak (листинг 1.16).

f текстов персонажем MS Agent Попытка Agent = Новый СОМОбъект("Agent.Control.2");

Исключение Сообщить("MS Agent не установлен!");

Возврат;

КонецПопытки;

Agent.Connected = Истина;

// Подключаемся к объекту Agent.Characters.Load("Merlin", "Merlin.acs");

// Загружаем персонаж 32 Глава л Characters = Agent.Characters("Merlin");

// Получаем ссылку на персонаж Characters.Show();

// Выводим на экран Characters.Think("Добрый день, приятной работы!");

// Вывести текст // Воспроизвести одну фразу из заданных Characters.Speak("Хорошая погодка!]Не пора ли на обед?");

Characters.Speak(" " "welcome.wav");

// Воспроизвести WAV—файл, Метод Think выводит заданный текст в особом окне в виде облачка (как в комиксах).

Метод speak воспроизводит заданный текст или звуковой файл для задан ного персонажа и имеет два параметра. Первый задает воспроизводимую строку и является необязательным. Второй — строка, содержащая местопо ложение звукового файла (WAV или LWV). Здесь указывается либо местопо ложение файла (абсолютный или относительный адрес), либо URL-адрес (если анимация персонажа реализуется через http-протокол).

^ Примечание Хотя оба параметра являются необязательными, но один из них непременно должен присутствовать. Используйте пробел в первом параметре, чтобы вос произвести звуковой файл без вывода текста.

Используйте вертикальную черту (|) в первом параметре в качестве раздели теля между фразами. Это позволит выбирать в случайном порядке текст при каждом вызове операции. Можно также использовать специальные теги — Speech Output Tags, предназначенные для изменения голоса (громкость, тембр и т. п.). Пример использования тегов, характеристика которых приво дится ниже, приведен в листинге 1.17.

О Тег \chr\ — определяет голос, каким произносится текст и может при нимать значения Normal (нормальный голос), Monotone (монотонно) и whisper (шепотом). По умолчанию Normal.

П Тег \ctx\ — определяет контекст произносимого текста. Параметр может принимать значения Address — адреса или телефонные номера, E-mail — адреса электронной почты и Unknown — неизвестный контекст. По умол чанию Unknown.

П Тег \Lst\ — позволяет повторить текст, вызванный ранее.

П Тег \мар\ — позволяет произносить один текст, а показывать другой.

П Тег \раи\ — позволяет выдерживать паузу в произносимой фразе. Дли тельность паузы задается в миллисекундах (\Раи=юоо\).

П Тег \ P i t \ — позволяет управлять высотой голоса персонажа. Частота произносимого текста в герцах (\pit=so\).

Применение технологий СОМ и ActiveX П Тег \Spd\ — позволяет изменять скорость чтения текста. Число, указы ваемое как параметр, определяет количество произносимых слов в мину ту (\Spd=100\).

П Тег \vol\ — позволяет определять громкость произносимого текста. Па раметр может принимать значения от 0 до 65 535 (\voi=65535\).

// Текст, воспроизводимый шепотом Characters.Speak("\Chr=""Whisper""\Тихо, всем спать...");

// Указываем, что воспроизводим электронный адрес Characters.Speak("Пишите мне: \Ctx=""E-mail""\mav@erpg.ru");

// Повторяем предыдущий текст Characters.Speak("\Lst\") ;

// Выводим один текст, а воспроизводим другой Characters.Speak("\map=""Посетите наш сайт!""=""Добро пожаловать на сайт www.erpg.ru""\");

// Выдерживаем паузу между фразами Characters.Speak("Привет!\Раи=1000\Почему не отвечаешь?");

// Плавно изменяем интонацию голоса Characters.Speak("\pit=50\He делай этого! \pit=300\CTOU! \pit=500\He на до!");

// Воспроизводим текст в медленном режиме Characters.Speak("\Spd=100\KaK я тебе завидую!");

// Воспроизводим текст с пониженной громкостью Characters.Speak("\Vol=20000\He ори, все спят!");

До сих пор мы рассматривали только методы объектов. Помимо методов MS Agent имеет еще свойства и события. На событиях останавливаться не будем, т. к. их невозможно создать средствами системы "1С:Предприятие".

Рассмотрим основные свойства MS Agent.

П Name — возвращает имя персонажа (Джинн, Маг, Робби, Кеша);

П Description — возвращает описание персонажа;

П ExtraData — возвращает расширенные сведения о персонаже;

О version — возвращает версию персонажа;

П visible — возвращает 0, если персонаж скрыт методом Hide, и —1, если персонаж видим на экране;

П AutoPopupMenu — с помощью этого свойства можно включить или вы ключить показ контекстного меню, появляющегося при щелчке правой 2 Зак. 34 Глава кнопки мыши на персонаже или иконке в трэйбаре (возвращает текущее состояние свойства);

О Languageio — возвращает или устанавливает языковой идентификатор для персонажа;

П Height — устанавливает или возвращает значение высоты кадра для за данного персонажа;

О width — устанавливает или возвращает значение ширины кадра для за данного персонажа;

П Left — получает или устанавливает левый край кадра персонажа;

О тор — получает или устанавливает верхний край кадра персонажа;

О OriginalHeight — возвращает значение высоты, определенное как на стоящее (оригинальное) для заданного персонажа;

П originaiwidth — возвращает значение ширины, определенное как на стоящее (оригинальное) для заданного персонажа;

П TTSModeiD — возвращает или устанавливает идентификатор голосового движка Text-to-Speech (TTS) для персонажа.

В листинге 1.18 показан пример вывода свойств.

Попытка Agent = Новый СОМОбъект("Agent.Control.2");

Исключение Сообщить("MS Agent не установлен!");

Сообщить("Загрузить MS Agent можно с сайта Microsoft — http://www.microsoft.com/msagent/");

Возврат;

КонецПопытки;

Agent.Connected = Истина;

// Подключаемся к объекту Agent.Characters.Load("Merlin", "Merlin.acs");

// Загружаем персонаж Characters = Agent.Characters("Merlin");

// Получаем ссылку на персонаж Characters.Show();

// Выводим на экран // Вывод основных свойств Сообщить("Имя = " + Characters.Name);

Сообщить("Описание = " + Characters.Description);

Сообщить("Дополнительные сведения = " + Characters.ExtraData);

Применение технологий СОМ и ActiveX Сообщить("Версия = " + Characters.Version);

Сообщить("Видимость = " + Characters.Visible);

Сообщить("Показ контекстного меню = " + Characters.AutoPopupMenu );

// Увеличиваем персонаж вдвое Characters.Height = Characters.Height * 2;

Characters.Width = Characters.Width * 2;

// Выключаем показ меню Characters.AutoPopupMenu = Ложь;

Рассмотрим еще один объект — Balloon.

Объект Balloon — это область вывода текстов персонажа, который имеет ряд свойств.

П BackCoior — цвет фона;

П Bordercoior — цвет рамки;

О Enabled — возвращает признак включения окна сообщений;

О FontcharSet — номер набора таблицы символов (например, 0 — ANSI);

П FontName — имя шрифта;

П FontBoid — признак полужирного выделения шрифта;

П Font italic — признак курсивного выделения шрифта;

О Fontsize — размер шрифта;

П Fontunderiine — признак подчеркивания текста;

П Forecoior — цвет текста;

П NumberOfLines — количество строк для вывода текста;

П style — стиль окна сообщений;

П visible — признак видимости окна сообщений.

Свойства BackCoior, BorderColor, FontBoid, Fontltalic, FontUnderline, Forecoior являются свойствами только для чтения. Изменить их значения можно лишь на странице свойств Microsoft Agent, причем только одновре менно для всех персонажей. Пример изменения свойств окна сообщений приведен в листинге 1.19.

Characters.Balloon.FontName = "Comic Sans MS";

Characters.Balloon. FontSiz-e = 24;

Characters.Think("Добрый день, приятной работы!") 36 Глава Интерактивное взаимодействие с MS Agent Все, о чем говорилось ранее, так или иначе связано с односторонним обще нием персонажа с пользователем. Чтобы организовать интерактивное взаи модействие пользователя с MS Agent (организация предупреждения, ввода значений, выбора из списков и т. п.), необходимо прибегнуть к сторонним разработкам, т. к. сама по себе технология MS Agent не позволяет этого делать.

Существует множество подобных разработок, большая и лучшая часть кото рых являются коммерческими, хотя и не дорогими (обычно не более $10).

Для однозначности остановимся на разработке BalloonDialog 6.5 ActiveX компании SommyTech.

^ Примечание Загрузить демо-версию BalloonDialog 6.5 можно на сайте производителя — http://www.sommytech.com.ar.

Компонент BalloonDialog позволяет:

П работать совместно с MS Agent;

О выводить модальные предупреждения (замена стандартного оператора Предупредить);

П выводить сообщения с флажком (замена стандартного оператора сооб щить);

П выводить вопросы с предложением различных вариантов ответов (замена стандартного оператора вопрос);

CD показывать диалог ввода текста (замена стандартного оператора ВвестиСтроку);

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

Ошибка!

Вы не имеете прав для входа в данный ОК Рис. 1.6. Вывод модального окна предупреждения BalloonDialog совместно с Microsoft Agent Применение технологий СОМ и ActiveX Начнем по порядку. Приведем пример создания объекта BaiioonDiaiog, вы вода предупреждения и связи с персонажем MS Agent (листинг 1.20).

На рис. 1.6 показан вид окна предупреждения.

Попытка // Устанавливаем ссылку на объект Agent = Новый СОМОбъект("Agent.Control.2");

Исключение Сообщить("MS Agent не установлен! " ;

) Сообщить("Загрузить MS Agent можно с сайта Microsoft — http://www.microsoft.com/msagent/");

Возврат;

КонецПопытки;

Попытка // Создаем объект BaiioonDiaiog Balloon = Новый СОМОбъект("BlnDialogT.Balloon");

// Сброс всех установок свойств в значения по умолчанию Balloon.ResetProperties();

Исключение Сообщить("BaiioonDiaiog не установлен!");

Сообщить("Загрузить BaiioonDiaiog можно с сайта SommyTech — http://www.sonmytech.com.ar");

Возврат;

КонецПопытки ;

Agent.Connected = Истина;

// Подключаемся к объекту Agent.Characters.Load("Merlin", "Merlin.acs");

// Загружаем персонаж Characters = Agent.Characters("Merlin");

// Получаем ссылку на персонаж Characters.Show();

// Выводим на экран // Вывод модального предупреждения Balloon.MsgBalloon("Вы не имеете прав для входа в данный модуль!",, "Ошибка!", Characters);

Создание объекта Balloon в версии 8.0 системы "1С:Предприятие" выполня ется С ПОМОЩЬЮ конструктора— Новый СОМОбъект("В1п01а1од. Balloon"), в версии 7.7 — СоздатьОбъект ("BinDialog. Balloon"). Если вы используете Глава демо-версию, то имя СОМ-объекта будет "BinDialogT.Balloon", при этом каждый раз при инициализации будет появляться окно с информацией о про изводителе и просьбе зарегистрироваться.

Метод MsgBaiioon выводит рядом с персонажем диалог и ждет, пока пользо ватель нажмет кнопку. Он возвращает целое число — номер, соответствую щий нажатой кнопке и имеет четыре параметра. Первый параметр метода — строка сообщения;

второй — целое число, определяющее набор кнопок диа лога и тип отображаемой на поле диалога иконки;

третий — строка заголовка диалога;

четвертый — ссылка на персонаж MS Agent. Используя последний параметр, окно диалога автоматически позиционируется на экране в зависи мости от положения персонажа. Кроме того, при перетаскивании персонажа пользователем диалог объекта Balloon перемещается вместе с ним.

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

Внимание вопрос!

Вы действ1<гтелы-ю хотите закрыть обработку?

Рис. 1.7. Вывод модального окна с вопросом BalloonDialog совместно с Microsoft Agent // Вывод модального вопроса Ответ = Balloon.MsgBaiioon("Вы действительно хотите закрыть обработку?", 36, "Внимание вопрос!", Characters);

Если Ответ = 6 Тогда Сообщить("Вы выбрали ответ ""Да ';

) Иначе Сообщить("Вы выбрали ответ ""Нет""");

КонецЕсли;

Применение технологий СОМ и ActiveX По сравнению с предыдущим кодом в методе MsgBaiioon появился второй параметр. Как уже было сказано, второй параметр означает целое число, определяющее набор кнопок диалога и тип отображаемой на поле диалога иконки. Точнее этот параметр определяется суммой двух чисел: кодом набо ра кнопок и кодом типа иконки диалога.

Например, число 36 (4+32) обозначает, что диалог будет содержать кнопки Yes и No (код 4) и отображаться иконка с вопросом (код 32).

Все возможные наборы кнопок, которые применяются в BaiioonDialog, приведены ниже.

П о — отображается только кнопка ОК.

П 1 — отображаются кнопки ОК и Cancel.

CJ 2 — отображаются кнопки Abort, Retry и Ignore.

П з — отображаются кнопки Yes, No и Cancel.

О 4 — отображаются кнопки Yes и No.

О б — отображаются кнопки Retry и Cancel.

Кроме этого, в BaiioonDialog допускается пять типов иконок диалога.

П 16 — отображается иконка Ошибка.

П 32 — отображается иконка Вопрос.

П 4 8 — отображается иконка Предупреждение.

П 64 — отображается иконка Информация.

П 80 — отображается произвольная иконка, определяемая свойствами IconPicture ИЛИ URLIconPicture.

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

П 1 — если пользователь нажал кнопку ОК.

П 2 — если пользователь нажал кнопку Cancel.

П з — если пользователь нажал кнопку Abort.

П 4 — если пользователь нажал кнопку Retry.

П 5 — если пользователь нажал кнопку Ignore.

О б — если пользователь нажал кнопку Yes.

П 7 — если пользователь нажал кнопку No.

Так как система "1С:Предприятие" в основном используется в России и с рус ским интерфейсом, то крайне желательно, чтобы все кнопки выводились на русском языке. Чтобы изменить названия кнопок, существует свойство ButtonsCaptions. Вообще говоря, с помощью этого свойства можно пере именовывать кнопки абсолютно произвольным образом (рис. 1.8).

40 Глава Внимание вопрос!

Предлагаю отдохнуть и перекусить!

Чай Сок Кофе Рис. 1.8. Замена названий кнопок в сообщениях BalloonDialog Рассмотрим пример вывода диалога с произвольными кнопками (лис тинг 1.22).

// Задаем произвольные названия для кнопок Balloon.ButtonsCaptions="&OK;

&Сок;

П&рервать;

&Повторить;

&Игнорировать;

&Чай ;

&Кофе";

// Выводим модальный вопрос Ответ = Balloon.MsgBalloon("Предлагаю отдохнуть и перекусить!", 35, "Вни мание вопрос!", Characters);

Если Ответ = 6 Тогда Сообщить("Чай закончился!");

ИначеЕсли Ответ = 1 Тогда Сообщить("Кофе не закупили!");

ИначеЕсли Ответ = 2 Тогда Сообщить("Сок выпил кот!");

КонецЕсли;

// Вернем названия кнопок в более привычный вид, причем русский Balloon. ButtonsCaptions='40K;

0&TMeHa;

n&pepBaTb;

Повторить ;

Шрнорировать;

& Да;

&Нет";

Символ & в заголовке кнопки ставится перед "горячим" или подчеркнутым символом для отработки комбинации +<подчеркнутый символХ Применение технологий СОМ и ActiveX Для заметы стандартной функции "1С:Предприятия" ввестиСтроку в BalloonDialog применяется метод inputBalloon (рис. 1.9).

Имя пользователя В ведите Ваше имя.

ихайлов JQK_ j | Обмена Рис. 1.9. Поле ввода текста в сообщениях BalloonDialog Данный метод предназначен для формирования модального диалога при вводе текста и возвращает введенную пользователем строку (листинг 1.23).

// Диалог ввода текста Имя = Balloon.InputBalloon("Введите Ваше имя.", "Имя пользователя", "Андрей Михайлов", Characters);

// Сообщение, выводящее введенный текст Balloon.MsgBalloon(Имя,, "Здравствуйте!", Characters);

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

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

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

после выбора справочника должна от крываться его форма списка (рис. 1.10).

42 Глава Открыть справочник Список справочников в Банковские счета в Валюты в Виды деятельности • Контрагенты О Нематериальные активы В диалоге показаны первые справочников и Отмена \\ Рис. 1.10. Вывод сложных диалогов BalloonDialog с кнопками, радиокнопками и сообщениями Для того чтобы код работал в произвольной конфигурации, немного услож ним задачу и сделаем так, чтобы имена справочников и форм брались из метаданных конфигурации. А так как работа с метаданными и формами су щественно различается в версиях 7.7 и 8.0, рассмотрим примеры работы в обеих версиях (листинги 1.24 и 1.25).

чг 1.24. Выбор справочника из радиокнопок в BalloonDialog для версии 7. // Добавление кнопки Balloon.FormBalloon.Buttons.Add("&0тмена");

// Добавление радиокнопок Для Ном = 1 По Мин(Метаданные.Справочник(), 5) Цикл Balloon.FormBalloon.OptionButtons.Add(Метаданные.Справочник(Ном). Пред ставление () ) ;

КонецЦикла;

Balloon.FormBalloon.TextBox = 0;

// Поле ввода не показываем Balloon.FormBalloon.TBoxLines = 3;

// Трехстрочный текст Применение технологий СОМ и ActiveX 43_ // Текст по умолчанию Balloon.FormBalloon.TBoxText = "Некоторый текст для ввода";

Balloon.FormBalloon.Title = "Открыть справочник";

// Заголовок диалога Balloon.FormBalloon.Message = "Список справочников";

// Сообщение диалога // Комментарий Balloon.FormBalloon.Comment = "В диалоге показаны первые 5 справочников";

Balloon.FormBalloon.SepLine = 1;

// Признак вывода разделителя // Показать сложный диалог Balloon.ShowFormBalloon(Characters);

// Если была выбрана радиокнопка, а не кнопка Отмена Если Balloon.FormBalloon.ButtonPressed = 0 Тогда // Получаем номер выбранной позиции НомерПозиции = Balloon.FormBalloon.OptionPressed;

//Из метаданных получаем имя справочника ИмяСправочника = Метаданные.Справочник(НомерПозиции).Идентификатор;

ОткрытьФорму("Справочник." + ИмяСправочника);

// Открываем форму КонецЕсли;

ОКНОПОК В BalloonDialog для Е // Добавление кнопки Balloon.FormBalloon.Buttons.Add("&OTMeHa");

// Добавление радиокнопок Количество = 1;

Для каждого Справочник Из Метаданные.Справочники Цикл Balloon.FormBalloon.OptionButtons.Add(Справочник.Представление()) Количество = Количество + 1;

Если Количество = 6 Тогда Прервать;

КонецЕсли;

КонецЦикла;

Balloon.FormBalloon.TextBox = Ложь;

// Поле ввода не показываем Balloon.FormBalloon.TBoxLines = 3;

// Трехстрочный текст _44. Глава /I Текст по умолчанию Balloon.FormBalloon.TBoxText = "Некоторый текст для ввода";

Balloon.FormBalloon.Title = "Открыть справочник";

// Заголовок диалога Balloon.FormBalloon.Message = "Список справочников";

// Сообщение диалога Balloon.FormBalloon.Comment = "В диалоге показаны первые 5 справочников";

// Комментарий Balloon.FormBalloon.SepLine = Истина;

// Признак вывода разделителя // Показать сложный диалог Balloon.ShowFormBalloon(Characters);

// Если была выбрана радиокнопка, а не кнопка Отмена Если Balloon.FormBalloon.ButtonPressed = 0 Тогда // Получаем номер выбранной позиции НомерПозиции = Balloon.FormBalloon.OptionPressed;

//Из метаданных получаем имя справочника ИмяСправочника = Метаданные.Справочники[НомерПозиции—1].Имя;

// Получаем ссылку на форму Форма = Справочники[ИмяСправочника].ПолучитьФормуСписка();

Форма.Открыть();

// Открываем форму КонецЕсли;

Оба приведенных листинга различаются только работой с объектом мета данных. Все остальные методы почти идентичны.

Метод Buttons.Add объекта FormBalloon добавляет на форму кнопку. Ме тод optionButtons. Add добавляет радиокнопку.

Метод ShowFormBalloon открывает модально сконструированный диалог и ждет пока пользователь сделает свой выбор. Данный метод имеет единст венный параметр — ссылку на персонаж MS Agent.

После возвращения управления программой в "1C:Предприятие" становится доступно свойство ButtonPressed, которое может принимать два значения:

П о — диалоговое окно закрылось без нажатия на кнопку;

П 1 — диалоговое окно пользователь закрыл нажатием на какую-либо кнопку.

Для определения номера позиции выбранной пользователем радиокнопки используется СВОЙСТВО OptionPressed.

Работа с метаданными преднамеренно не описывается, т. к. это не является темой данной главы.

Применение технологий СОМ и ActiveX Вы так же можете изменить шрифт текстов, выводимых в диалоге. Для этого у объекта Balloon есть свойство Font:

П Balloon.Font.Bold — признак полужирного выделения текста;

П Balloon. Font.charset — номер набора символов;

П Balloon.Font.italic — признак выделения текста курсивом;

П Balloon. Font.Name — ИМЯ шрифта;

П Balloon.Font.size — размер шрифта;

П Balloon.Font.strikethrough — признак зачеркнутого текста;

П Balloon.Font.underline — признак подчеркивания текста.

Создание HTML-редактора Для создания полноценного HTML-редактора с возможностью визуального редактирования больше всего подходит ActiveX-компонент Microsoft Internet Explorer.

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

На рис. 1.11 изображена форма HTML-редактора, реализованная средствами встроенного языка системы "1C:Предприятие 8.0".

ii HTML Editor 1.0 e MAV _ПX :

J? trl

~~ ;

:'JL*i^Z Обычный forum.erpg.ru ••> Работа о системе 1С.:Г1редпр*ятие В.о | лучший форум о систем. leva Ваше мнение о курсам i дистанционного обучения по Вт Июн 08, 2004 9 : 4 4 рт Valentin 8.0 Андрей Михайлов aka MAV * ! VU.Application Пи Июн 07, 2004 Ili42 «m kaliki Пт Июи 04, 2004 7|4в рт Прошу помочь в освоении 8.0 Helen ;

kaliki ^D Wv !| Методичка по работе в 1C V8 ;

Чт Июн 03, 2004 5:52 ргш sov ' Полубвнский Алексей CALX) Ср Июн 02, 2004 12:37 pm Гость ^ {! Создание Внешний Компонент Be Май 30, 2004 10:31 am 12S для v8 6RP <3roup TO ^ Об авторе" Закрыть ;

Рис. 1.11. Визуальный HTML-редактор Глава 46_ Основным элементом данной формы является Полентмьдокумента, который имеет один очень важный метод — перейти, и одно не менее важное свойство — документ. Метод перейти переводит элемент управления Полентмьдокумента на страницу с заданным адресом, который определяется в единственном параметре метода. Свойство документ возвращает значение типа сомобъект, которое предоставляет доступ к HTML-документу.

Рассмотрим основные методы объекта документ.

П Open ( ) — открывает новый поток для методов write и writeLn;

О Close ( ) — закрывает текущий документ;

П write (Text) — записывает HTML-текст в текущий открытый поток;

О writeLn (Text) — аналогичен методу write, но добавляет в конец возврат каретки;

П ExecCommand (Command, Userlnterface, V a l u e ) — выполняет команду над всем выбранным фрагментом, при этом переменные метода опреде ляются как:

• Command — идентификатор команды, подлежащей выполнению;

• Userlnterface — признак того, нужно ли при необходимости предос тавлять графический интерфейс (необязательный параметр);

• value — значение команды (необязательный параметр);

П QueryCommandEnabied (Command) — возвращает двоичное значение, пока зывающее, доступна ли заданная команда;

О QueryCommandValue (command) — возвращает текущее значение заданной команды;

О ElementFromPoint (x, Y) — возвращает элемент, которому принадлежит точка, заданная координатами х и у;

П QueryCommandSupported (Command) — возвращает признак, доступна ЛИ заданная команда;

П QueryCommandstate (Command) — возвращает текущее состояние команды;

П QueryCommandlndetermtCommand) — Возвращает Признак, НЗХОДИТСЯ ЛИ команда в неопределенном состоянии или нет;

О createEiement (Tag) — создает объект элемента заданного тега;

Рассмотрим пример формирования простейшей HTML-страницы (лис тинг 1.26).

Применение технологий СОМ и ActiveX Документ = ЭлементыФормы.ПолеНТМЬДокумента.Документ;

Документ.Open();

Документ. WriteLn("IIpHMep формирования HTML страницы");

Документ.Write("<Р>Пишите <А href=""mailto:mav@erpg.ги"">письма");

Документ.Close();

Данный пример демонстрирует динамическое формирование HTML документа, но не редактирование его. Для реализации возможности полноценного редактирования документа предназначен метод ExecCommand(Command, Userlnterf асе, V a l u e ). Здесь, как уже было сказа но ранее, command — это имя выполняемой команды, Userinterface — не обязательный логический параметр (принимает значения истина или ложь), который отвечает за вывод пользовательского интерфейса команды (если таковой имеется). Если данный параметр опущен, то его значение будет — ложь, value — необязательный параметр, указывающий дополнительные значения для команды.

Важно отметить, что метод ExecCommand может работать с выделенным тек стом.

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

наклонный;

задавать цвет фона;

цвет текста;

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

// Раскрасить выделенный фрагмент в красный цвет Документ.execCommandC'ForeColor", Ложь, "FFOOOO");

// Выделить текст полужирным шрифтом Документ.execCommand("Bold", Ложь};

// Вставить рисунок Документ.execCommand("Insertlmage", Ложь, "C:\Img\mav.jpg");

// Отформатировать текст по правому краю Документ.execCommandC'JustifyRight", Ложь);

// Установить для выделенного фрагмента текста шрифт Arial Документ.execCommand("FontName", Ложь, "Arial");

// Отформатировать текст как заголовок второго уровня Документ.execCommand("FormatBlock", Ложь, "<Н2>");

Глава Приведем полный список доступных команд.

П Backcoior — устанавливает или получает цвет фона текущего выделения (value должно содержать имя цвета или его шестнадцатеричный RGB эквивалент, например, FFCCOO);

П Bold — переключает начертание текста текущего выделения между полу жирным и нормальным;

П сору — копирует выделение в буфер обмена;

П createBookmark — получает имя якоря или создает его для текущего вы деления (value — строка, содержащая имя якоря);

П CreateLink — получает URL-ссылки или создает новую ссылку (пара метр value должен содержать URL);

П cut — вырезает текущее выделение в буфер обмена;

П Delete — очищает текущее выделение (удаляет все его содержимое);

О Find — находит текст, заданный в параметре value в текущем выделении;

О FontName — устанавливает шрифт для текущего выделения, причем value содержит описание этого шрифта (как в теге );

П Fontsize — устанавливает размер шрифта (value — число от 1 до включительно);

О ForeCoior — устанавливает цвет текста, при этом Value должно содер жать имя цвета или его шестнадцатеричный RGB-эквивалент (например, FFCCOO);

П FormatBiock — устанавливает или получает форматирование текущего блока (value может содержать теги-описатели);

П indent — увеличивает отступ выделенного текста на одну единицу при ращения;

О InsertButton — перезаписывает идентификатор кнопки вместо текущего выделения (value — строка, содержащая идентификатор кнопки);

П insertFieidset — вставляет поля ввода;

П insertHorizontaiRuie — вставляет горизонтальную полосу;

О insertiFrame — вставляет встроенный фрейм (IFRAME);

О insertimage — вставляет изображение;

П insertinputButton — вставляет кнопку;

П InsertlnputCheckbox — вставляет флажок (checkBox);

П insertinputFiieUpioad — вставляет элемент выбора файла;

П insertinputHidden — вставляет скрытое поле (hidden);

П insertinputimage — вставляет изображение;

Применение технологий СОМ и ActiveX П insertinputPassword — вставляет поля ввода пароля;

О insertinputRadio — вставляет радиокнопку (Radio);

П insertinputReset — вставляет кнопку Reset;

П insertinputsubmit — вставляет кнопку submit;

П insertinputText — вставляет поля ввода текста;

П insertParagraph — вставляет новый раздел (абзац);

П insertorderedList — переключает стиль текущего выделения между ну мерованным списком и простым текстом;

П insertunorderedList — переключает стиль текущего выделения между маркированным списком и простым текстом;

П insertseiectoropdown — записывает элемент Drop-down вместо теку щего выделения (value должно содержать идентификатор элемента);

П InsertTextArea — вставляет элемент TextArea;

О italic — переключает начертание текста текущего выделения между на клонным и обычным;

П Justifycenter — устанавливает выравнивание по центру для всего блока, в котором расположено текущее выделение;

П j u s t i f y L e f t — устанавливает выравнивание по левому краю для всего блока, в котором расположено текущее выделение;

О justifyRight — устанавливает выравнивание по правому краю для всего блока, в котором расположено текущее выделение;

О outdent — уменьшает отступ для всего блока, в котором расположено выделение, на одну единицу;

П overwrite — переключается между режимами вставки текста и замены текста при вводе (значением value может быть истина — замена, ложь — вставка);

О Paste — вставляет текст из буфера обмена вместо текущего выделения;

П Refresh — обновляет текущий документ;

П Remove Format — удаляет из текущего фрагмента все теги форматирова ния;

П SeiectAil — выделяет все содержимое документа;

П unBookmark — удаляет все закладки из текущего выделения;

П underline — переключает начертание текста текущего выделения между подчеркнутым и обычным;

П unlink — удаляет все гиперссылки из текущего выделенного фрагмента;

П unselect — снимает выделение.

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

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

г -~""—;

---——-——--—————-------—-—..-..,„-..,.-..,-.., | Листинг 1.28. Процедура переключения между режимами Процедура ПереключитьРежим(Документ, ПредыдущийРежим, НовыйРежим) Если НовыйРежим = "Текст" Тогда Документ.Body.InnerText = Документ.Body.InnerHTML;

ИначеЕсли ПредыдущийРежим = "Текст" Тогда Документ.Body.InnerHTML = Документ.Body.InnerText;

КонецЕсли;

Если НовыйРежим = "Просмотр" Тогда Документ.Body.ContentEditable = "false";

Иначе Документ.Body.ContentEditable = "true";

КонецЕсли;

КонецПроцедуры Данная процедура имеет три параметра:

П документ — ссылка на объект документ;

П ПредыдущийРежим — строка, описывающая ранее использованный режим документа, причем этот параметр может принимать значения текст И Просмотр;

П НовыйРежим — строка, описывающая новый режим документа.

При использовании процедуры, описанной в листинге 1.29, для переключе ния в режим редактирования HTML-кода существует довольно большой не достаток — весь код отображается одним цветом, что очень затрудняет его чтение и понимание, в то время как все современные редакторы выделяют разными цветами различные группы тегов. Чтобы раскрасить код в окне ре дактора, необходимо запустить специальный скрипт, который будет выпол няться средствами компоненты Internet Explorer.

Приведем пример процедуры переключения между режимами с возмож ностью раскраски тегов (рис. 1.12) в режиме редактирования HTML кода (листинг 1.29).

Применение технологий СОМ и ActiveX ш HTML Editoi 1.0 *MAV _DX I У ol Х'&ф :,. •••'., %, :_S = <• * жxч Б s Тй м ;

~ ;

~ ;

г ;

.*..;

, >V

riepeHTn на форум >

>

<ЯО>

<Н2>Голосование<1— ^Include virtua!="po!l ssi.php?poll _id=2" -
<Н2>Новости проекта :

number=40" — ><ДО>,

<Н2>Подписка на новости проекта' <Р>Чтобы первыми узнавать все новости нашего проекта - подпишитесь на них и Вы никогда не пропустите ничего интересного.

< INPUT maxLength=100 value="Bam e-mail" пзте=егпаП> < INPUT tvpe=hidden value = list сотр. soft. ргоаегоа name=src;

Об авторет Закрьггь Рис. 1.12. Цветовая раскраска тегов в HTML-редакторе оцедура переключения между режимами с цветовой Процедура Переключить Режим(Документ, ПредыдущийРежим, НовыйРежим) Если НовыйРежим = "Текст" Тогда sExpression = " I document.body.innerText = document.body.innerHTML;

|document.body.innerHTML = colourCode(document.body.innerHTML);

I function colourCode(code) |{ | htmlTag = /(sit;

([\s\S]*?)sgt;

)/gi | tableTag = /(<

(table!tbody|th|tr|td|\/tableI\/tbodyI\/th|\ /tr|\/td)([\s\S]*?)sgt;

)/gi | commentTag = /(Sit;

!—([\s\S]*?)>

)/gi | imageTag = /(<

img([\s\S]*?)>

)/gi I linkTag = / (sit;

(a|\/a) ([\s\S]*?)>

)/gi | scriptTag = / (<

(script I\/script) ([\s\S]*?)>

)/gi I code = code.replace(htmlTag,""$K/font>"") | code = code.replace(tableTag,""$K/font>"") 52 Глава I code = code.replace(commentTag, ""$K/font>"") I code = code.replace(imageTag,""$K/font>"") I code = code.replace(linkTag,""$K/font>"") I code = code.replace(scriptTag,""$K/font>"") I return code;

IP;

Документ.parentWindow.execScript(sExpression);

ИначеЕсли ПредыдущийРежим = "Текст" Тогда Документ.Body.InnerHTML = Документ.Body.InnerText;

КонецЕсли;

Если НовьйРежим = "Просмотр" Тогда Документ.Body.ContentEditable = "false";

Иначе Документ.Body.ContentEditable = "true";

КонецЕсли;

КонецПроцедуры Регулярные выражения Регулярные выражения — это очень мощный механизм для обработки строк.

С его помощью можно легко найти нужные части текста, проверить, удовле творяет ли строка определенной маске, и т. п. Такие выражения встроены во многие языки программирования, такие как Perl, JavaScript, Visual Basic.

К сожалению, встроенный язык системы "1С:Предприятие" не позволяет напрямую работать с регулярными выражениями, поэтому для решения по добных задач используются СОМ-объекты.

Регулярные выражения являются частью технологии Microsoft Windows Script Technologies и входят в VBScript. Для использования движка регуляр ных выражений вам необходимо иметь библиотеку vbscript.dll. Данная биб лиотека включена в Internet Explorer 4 и выше.

С помощью регулярных выражений можно производить поиск, замену под строк, используя шаблоны. Шаблоны состоят из обычных символов и так называемых метасимволов (metacharacters) — управляющих символов. Спи сок метасимволов достаточно обширен. Наиболее часто используемые мета символы приведены в табл. 1.1.

Применение технологий СОМ и ActiveX Таблица 1.1. Основные метасимволы регулярных выражений Символ Назначение Соответствует выражению, находящемуся до знака "*", взятому ноль или большее количество раз. Например, шаблон " [0-9] *" определяет стро ку, содержащую ноль или большее количество цифр \ Предназначен для определения символа, являющегося метасимволом.

Например, шаблон "." соответствует любому символу, а шаблон "\." бу дет соответствовать точке Определяет начало входной строки $ Определяет конец входной строки + Соответствует выражению, находящемуся до знака "+", взятому один или более раз. Например, шаблон " [ 0 - 9 ] + " определяет строку, содер жащую одну или более цифр. (точка) Определяет любой символ, кроме символа перевода строки I Разделяет два выражения. Например, шаблону "а |Ь" будут соответство вать строки "а" и "Ь" [a-z] Определяет диапазон символов. Например, шаблон " [0-9]" определяет цифру [Л • • • ] Определяет любой символ, не соответствующий заданному набору. На пример, шаблон " [ Л 0 - 9 ] " определяет любой символ, кроме цифры \w Слово. То же, что и [a-zA-z_0-9] Все, кроме слов. То же, что и [ A a-zA-z_0-9] \w \s Любое пустое место \s Любое непустое место \d Десятичная цифра. То же, что и [0-9] He цифра. То же, что и [ А 0 - 9 ] \D {} В фигурных скобках указывается количество символов, подходящих по описанное ранее правило () С помощью круглых скобок можно объединять метасимволы в группы Для лучшего понимания синтаксиса регулярных выражений рассмотрим несколько примеров.

П " (два | три) богатыря" — соответствует как строке, которая может при нимать значение как "два богатыря", так и "три богатыря".

". + @. + \.. + " — соответствует e-mail-адресу.

П 54 Глава П " а (. ) \1с" — соответствует одному символу "а", затем любым двум оди наковым символам, потом символу "с". Например, шаблон совпадет С "аххс", НО не С "ахус".

CJ " ( \ d \ d ) \. \ 1 \. \ d \ d \ d \ d " — соответствует дате, у которой число и месяц одинаковы, то есть дата "09.09.2001" - подойдет, а дата " 0 9. 1 2. 2 0 0 1 " — нет.

П " \ d { 2 } - \ d { 5 } " — данный шаблон проверяет правильность номера иден тификатора, состоящего из двух цифр, дефиса, и еще пяти цифр.

П " < (. * ) >. *<\/\1>'.'— шаблон соответствует тегу HTML.

Для использования в системе механизма регулярных выражений необходимо создать СОМ-объект с идентификатором VBScript.RegExp.

Объект RegExp имеет следующие свойства:

Р Global — признак поиска соответствия во всей строке, причем если свойство принимает значение истина, то поиск ведется во всей строке, если ложь — то только до первого совпадения;

П ignorecase — признак игнорирования регистра символов при поиске (свойство может принимать значение истина и л о ж ь ) ;

О Pattern — строковый шаблон для поиска;

П MultiLine — признак, является ли текст многострочным или нет (свой ство может принимать значение истина и л о ж ь ).

Рассмотрим три метода объекта RegExp.

П Test (ИсходнаяСтрока) — метод Test позволяет протестировать строку исходнаяСтрока на соответствие ее шаблону (pattern). Возвращает значе ние истина, если строка, переданная в качестве параметра, соответствует определенному шаблону, ложь — иначе.

П Execute (ИсходнаяСтрока) — метод выполняет поиск всех совпадений регулярного выражения в строке исходнаяСтрока и возвращает коллек цию MatchCoiiection, которая содержит в себе всю информацию о сов падениях. Метод Execute может быть использован, например, для извле чения всех e-mail-адресов из строки ИсходнаяСтрока.

П Replace(ИсходнаяСтрока, НоваяСтрока) — МСТОД Replace дает ВОЗМОЖ НОСТЬ заменить все совпадения регулярного выражения строкой но ваяСтрока.

В листинге 1.30 приведен пример использования метода Execute и разбора коллекции MatchCoiiection.

Применение технологий СОМ и ActiveX // Описание регулярного выражения (шаблона) РегулярноеВыражение = "";

// Определение строки ТестоваяСтрока = "3TO пример ";

// Создание объекта работы с регулярными выражениями RegExp = Новый СОМОбъект("VBScript.RegExp");

RegExp.MultiLine = Ложь;

RegExp.Global = Истина;

RegExp.IgnoreCase = Истина;

RegExp.Pattern = РегулярноеВыражение;

// Поиск совпадений регулярного выражения в строке Matches = RegExp.Execute(ТестоваяСтрока);

// Обход элементов коллекции MatchCollection Для каждого Match Из Matches Цикл Сообщить("Номер первого совпавшего символа: " + Match.Firstlndex);

Сообщить("Длина совпавшего образца: " + Match.Length);

Сообщить("Первый совпавший образец: " + Match.SubMatches(0));

Сообщить("Полный образец: " + Match.Value);

КонецЦикла;

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

П первая — число б (свойство Firstlndex) определяет номер первого сов павшего символа (т. е. символа "Ь");

П вторая строка — 46 (свойство Length) определяет длину совпавшего об разца;

П третья строка— "bgcoior=#FFAABBxp>3To пример" является первым совпавшим образцом, т. е. текст, попавший в скобки " ( • * ) " в шаблоне (для второго совпадения нужно выполнить метод SubMatches ( i ) и т. д.);

П последняя строка — "это пример " (свойство value) представляет полный образец.

Для того чтобы получить цвет фона, определенного в теге в пере менной ТестоваяСтрока достаточно изменить регулярное выражение на 56 Глава строку " (# [0-9A-F] { 6 } ) ". При этом свойство SubMatches ( 0 ) вернет как раз необходимую строку "#FFAABB", содержащую цвет в шестнадцатеричной системе счисления.

Для проверки совпадения строки с регулярным выражением используется метод Test. В листинге 1.31 приведен пример такой проверки.

.31. Проверка совпадений регулярного вь // Описание регулярного выражения (шаблона) РегулярноеВыражение = " ( # [ О - 9 A - F ] { б } ) ";

// Определение строки ТестоваяСтрока = "3ro пример ";

// Создание объекта работы с регулярными выражениями RegExp = Новый СОМОбъект("VBScript.RegExp");

RegExp.MultiLine = Ложь;

RegExp.Global = Истина;

RegExp.IgnoreCase = Истина;

RegExp.Pattern = РегулярноеВыражение;

// Проверка совпадений регулярного выражения в строке Если RegExp.Test(ТестоваяСтрока) Тогда Сообщить("Найдены совпадения!");

Иначе Сообщить("Совпадений н е т ! " ) ;

КонецЕсли;

Данный пример приведен для системы "1С:Предприятие 8.0". В версии 7. метод Test будет возвращать -1 при значении истина и о при значении Ложь.

Для демонстрации работы метода Replace рассмотрим пример, приведен ный в листинге 1.32, который заменит текст, находящийся в тегах <р>, на другой.

на совпадения регулярного выражения в строке // Определение строки ТестоваяСтрока = "3ro пример ";

// Определение регулярного выражения Применение технологий СОМ и ActiveX _ RegExp. Pattern = "<р> (. *?) ";

// Замена текста в переменной ТестоваяСтрока на другую НовыйТекст = RegExp. Replace (ТестоваяСтрока, "<Р>Новый текст в теге // Вывод нового текста Сообщить ("Текст после замены:" + Символы. ПС + НовыйТекст);

В результате работы метода Replace переменная НовыйТекст будет содержать строку "Новый текст в теге P! ".

В данном случае в тестируемой строке будет только одна пара тегов <РХ/Р>.

Но вы можете сами добавить еще одну пару и проверить работоспособ ность кода.

Глава Администрирование Windows средствами WMI Понятие WMI Одной из базовых технологий компании Microsoft, предназначенной для централизованного управления и слежения за работой различных частей компьютерной сети, под управлением Windows, является Windows Management Instrumentation (WMI).

Объектную модель WMI можно использовать практически в любых языках и средах программирования, в том числе и в системе "1С:Предприятие".

Кроме этого, в операционных системах Windows Xp или Server 2003 реали зован механизм доступа к WMI из командной строки и обычных пакетных файлов (технология WMI Command line, WMIC). Применение WMI позво ляет автоматически выполнять административные задачи практически лю бой степени сложности, включая отслеживание и обработку событий, свя занных с теми или иными изменениями в информационной системе (например, появление определенной записи в журнале событий на локаль ном или удаленном компьютере, заполнение жесткого диска сервера до оп ределенного предела и т. п.).

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

Это обусловлено тем, что данные о компонентах системы хранятся в раз личных источниках (база пользователей SAM, журнал событий Event Log, системный реестр и т. д.), доступ к которым осуществлялся с помощью раз ных утилит (диспетчер пользователей — User Manager, просмотрщик журна ла событий — Event Log Viewer, редактор реестра — Regedit) и программных интерфейсов (Network API — для работы с данными о пользователях, Event Log API — для просмотра сведений о произошедших событиях, Registry API — для чтения или редактирования системного реестра). Понятно, что это неудобно, т. к., во-первых, приходилось осваивать множество не связан ных друг с другом технологий и инструментов, а во-вторых, усложнялось Глава взаимодействие разных компонентов компьютерной системы друг с другом (например, настройки в локальном реестре рабочей станции могли кон фликтовать с политиками безопасности, которые заданы на сервере).

С появлением Windows 2000 эта ситуация была в основном исправлена.

Появилась встроенная в операционную систему консоль управления ММС (Microsoft Management Console), с помощью которой можно из одной точ ки управлять большинством логических и физических компонентов ком пьютерной сети, построенной на основе Windows. В свою очередь, это стало возможным именно благодаря применению технологии WMI. Дан ная технология, во-первых, делает доступ к информации о самых различ ных компонентах информационной системы (журнал событий, системный реестр, подсистема производительности, драйверы устройств и т. д.) неза висимым от типа этих компонентов, а во-вторых, осуществляет управле ние любой подсистемой стандартным, не зависящим от реализации этой подсистемы, методом.

Итак, технология WMI — это глобальная концепция настройки, управления и слежения за работой различных частей корпоративной компьютерной се ти. В частности, используя WMI, можно с помощью специальных утилит или сценариев Windows Script Host (WSH) решать ряд важных задач.

П Управление различными версиями операционной системы Windows. С по мощью сценариев WMI можно обращаться к системным счетчикам про изводительности, анализировать журналы событий (Event Logs), работать с файловой системой, установленными принтерами, управлять запущен ными процессами и сервисами, просматривать и изменять настройки реестра, создавать и удалять совместно используемые ресурсы и т. д. При этом все операции можно выполнять одинаковым образом, как на ло кальной, так и на удаленной машине.

П Управление ресурсами и службами сети. Сценарии WMI позволяют на страивать сетевые службы (DNS, DHCP и т. п.) и управлять сетевыми устройствами, поддерживающими технологию SNMP (Simple Network Management Protocol).

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

П Управление серверными приложениями Windows. С помощью WMI можно управлять различными приложениями Microsoft: Application Center, Operations Manager, Systems Management Server, Internet Information Server, Exchange Server, SQL Server.

Администрирование Windows средствами WMI Доступ к объектам WMI Для программирования WMI разработан набор классов, которые осуществ ляют управление объектами WMI. Ввиду большого их количества, ограни чимся рассмотрением только основных, с которыми обязательно придется работать.

О swbemLocator — обеспечивает доступ к объекту swbemServices, который осуществляет подключение к WMI. Предоставляет дополнительные воз можности проверки подлинности при установлении соединения.

П swbemServices — обеспечивает доступ к экземплярам управляемых объ ектов, выполняет запросы к классам WMI, выполняет другие связанные с WMI операции.

П swbemobjectset — является коллекцией объектов swbemobject. Создать объект swbemobjectset и получить к нему доступ можно при помо щи нескольких методов, принадлежащих объектам swbemServices И SWbemObject.

П swbemobject — представляет собой определение одного класса WMI в форме экземпляра объекта.

Подробное описание всех объектов, их свойств и методов можно найти на сайте Microsoft Developer Network Library (MSDN) — http://msdn.microsoft.com/library/.

Для доступа к WMI через библиотеку сценариев WMI из системы "1 (^Предприятие" нужно сделать три шага, которые являются общими для большинства сценариев WMI. Первое — необходимо подключиться к служ бе Windows Management Service, второе — получить экземпляры управляе мых объектов WMI, третье — вызвать метод или получить доступ к свойст вам управляемого объекта. После знакомства с интерфейсами, которые используются для выполнения этих трех шагов, гораздо увереннее чувству ешь себя на пути к вершине искусства написания сценариев.

Самое неприятное в этих основных трех шагах то, что код их написания до вольно коренным образом отличается в разных версиях "1C: Предприятия" (7.7 и 8.0). Причем многие конструкции в версии 7.7 штатными средствами просто не выполнить, поэтому приходится прибегать к внешним вспомога тельным инструментам.

Для доступа к объектам WM1 из "1С:Предприятия" версии 8.0 вполне хвата ет стандартных языковых конструкций внутреннего языка, поэтому сначала будут описаны алгоритмы подключения именно для этой версии.

Рассмотрим пример подключения к классу win32_Logicaioisk (листинг 2.1).

62 Глава // Создать указатель на объект SWbemLocator Попытка Locator = Новый СОМОбъект("WbemScripting.SWbemLocator");

Исключение Сообщить(ОписаниеОшибки());

Возврат;

КонецПопытки;

// Шаг 1. Подключение к WMI на локальном компьютере ServicesSet = Locator.ConnectServer(".");

// Шаг 2. Извлечение экземпляров класса Win32_LogicalDisk ObjectSet = ServicesSet.InstancesOf("Win32_LogicalDisk");

// Шаг З. Просмотр SWbemObjectSet, содержащего экземпляры Для каждого Item Из ObjectSet Цикл Сообщить("Имя: " + Item.Caption);

КонецЦикла;

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

Для этого необходимо в предыдущем коде только изменить первый шаг (листинг 2.2).

// Шаг 1. Подключение к WMI на удаленном компьютере ServicesSet = Locator.ConnectServer("MainServer", "root\cimv2", "Admin", "password");

Рассмотрим каждый из параметров метода ConnectServer в отдельности.

П Первый — имя удаленного компьютера (для локального указывается точ ка ".").

П Второй — имя пути для WMI. По умолчанию root\cimv2 можно не ука зывать;

О Третий — имя пользователя (для авторизации).

П Четвертый — пароль пользователя (для авторизации).

Администрирование Windows средствами WMI Иногда возникает необходимость подключиться к компьютеру создав СОМ объект с помощью расширенной функции получитьсомобъект (аналог Getobject в Visual Basic и Visual Basic Script). Пример такого подключения показан в листинге 2.3.

! Листинг 2.3. Подключение к серверу с помощью моникера для версии 8. ИмяКомпьютера = " ".;

// Шаг 1. Подключение к WMI на локальном компьютере ServicesSet = ПолучитьСОМОбъект("winmgmts:{impersonationLevel=impersonate}!\\ " + ИмяКомпьютера + "\root\cimv2");

// Шаг 2. Извлечение экземпляров класса Win32_LogicalDisk ObjectSet = ServicesSet.ExecQuery("Select * from Win32_LogicalDisk");

// Шаг З. Просмотр SWbemObjectSet, содержащего экземпляры Для каждого Item Из ObjectSet Цикл Сообщить("Имя: " + Item.Caption);

КонецЦикла;

В данном примере для подключения к WMI на целевом компьютере и дос тупа ко всем экземплярам класса win32_Logicaioisk используется WMI моникер (moniker) winmgmts. Моникер — это специальный СОМ-объект, ко торый отыскивает в сети или создает и инициализирует экземпляр объекта и возвращает клиенту указатель на него. Для повышения безопасности WMI моникер использует встроенные средства аутентификации, а также позволя ет устанавливать дополнительные маршруты к объектам.

Сценарий возвращает каждый экземпляр win32_LogicaiDisk как swbemobject из коллекции SWbemObjectSet. SWbemObjectSet И SWbemObject — ЭТО ЛИШЬ Два ИЗ нескольких интерфейсов, которые предоставляет библиотека сценариев WMI. Так как SWbemObjectSet является коллекцией, то доступ к ее элементам можно орга низовать При ПОМОЩИ КОНСТРУКЦИИ Для каждого..Лз...Цикл...КонецЦикла. ВнуфИ цикла организован доступ к свойству caption, которое определено в классе Win32_LogicalDisk.

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

64 Глава Модифицируем последний пример так, чтобы он выводил информацию только о жестких дисках (HDD) и не показывал CD-ROM, дисководы FDD и т. п. (листинг 2.4).

нг 2.4. Пример извлечения экземпляров класса с условием для версии 8.

// Шаг 2. Извлечение экземпляров класса Win32_LogicalDisk ObjectSet = ServicesSet.ExecQuery("Select * from Win32LogicalDisk Where DriveType=3");

// Шаг З. Просмотр SWbemObjectSet,' содержащего экземпляры Для каждого Item Из ObjectSet Цикл Сообщить("Имя: " + Item.Caption) ;

КонецЦикла;

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

Хотя варианты подключения с помощью моникера и объекта swbemLocator функционально одинаковы, они демонстрируют действие различных меха низмов, заложенных в библиотеке WMI. Новичкам может показаться, что синтаксис моникера излишне запутан, поэтому вначале они могут поработать С SWbemLocator. С ТОЧКИ ЗрСНИЯ фунКЦИОНЗЛЬНОСТИ МСТОД ConnectServer, который предоставляет swbemLocator, позволяет распределять полномочия, необходимые для проведения аутентификации WMI-соединения. Синтаксис моникера предоставляет возможность выполнения нескольких действий в од ной строке кода.

Теперь рассмотрим, как все то же самое выполняется в системе "1С:Предприятие" версии 7.7.

Сразу необходимо отметить, что в версии 7.7 невозможно штатными средст вами:

П перебрать элементы коллекции, так как в 7.7 нет цикла, аналогичному КОНСТРУКЦИИ Для каждого...Из...Цикл...КонецЦикла;

П получить доступ к экземплярам классов, если используется WMI-моникер, так как в 7.7 нет аналога функции получитьсомобъект.

Это довольно серьезные ограничения, связанные с работой СОМ-объектов, но вполне решаемые с помощью вспомогательных внешних компонент или дополнительных СОМ-объектов, которые можно написать на любом другом языке программирования. Так как эта глава книги (как, впрочем, и многие другие) посвящена СОМ-технологиям, то и для обхода ограничений версии 7. будет использоваться СОМ-объект.

Администрирование Windows средствами WMI Для обхода данных ограничений понадобятся всего три функции (лис тинг 2.5):

О функция получения очередного элемента коллекции;

П функция получения количества элементов в коллекции;

П функция, заменяющая функцию получитьсомобъект в версии 8.0.

I Листинг 2.5. Пример кода СОМ-объекта на яз 'Функция возвращает элемент коллекции ObjSet по номеру Number Public Function EnumerateCollection(ObjSet, Number) Dim Current As Integer Current = 0.

For Each Obj In Ob j Set If Current = Number Then Set EnumerateCollection = Obj Exit Function End If Current = Current + Next End Function.

'Функция возвращает количество элементов коллекции ObjSet Public Function GetCountCollection(ObjSet) Dim Current As Integer Current = For Each Obj In ObjSet Current = Current + Next GetCountCollection = Current End Function 'Функция возвращает СОМ-объект по моникеру или имени файла Public Function GetCOMObject(Str) Set GetCOMObject = GetObject(Str) End Function Данный пример является частью кода СОМ-объекта, созданного в среде Visual Basic. После компиляции мы получим библиотеку COMServices.dll, которая представляет СОМ-объект — coMServices. COM.

3 Зак. 66 Глава Местоположение файла COMServices.dll не важно, главное зарегистрировать его в системе командой regsvr32 COMServices.dll.

Теперь рассмотрим, как описанные ранее три шага подключения к WMI будут выглядеть в версии 7.7 с использованием вспомогательного СОМ объекта COMServices (листинг 2.6).

иммнищщив доступа к объектам WMI для версии 8. // Создать указатель на объект COMServices Попытка COMServices = СоздатьОбъект("COMServices.COM");

Исключение Предупреждение("Ошибка загрузки СОМ-объекта COMServices.");

Возврат;

КонецПопытки;

// Создать указатель на объект SWbemLocator Попытка Locator = СоздатьОбъект("WbemScripting.SWbemLocator");

Исключение Сообщить(ОписаниеОшибки());

Возврат;

КонецПопытки;

// Шаг 1. Подключение к WMI на локальном компьютере ServicesSet = Locator.ConnectServer(".");

// Шаг 2. Извлечение экземпляров класса Win32_LogicalDisk ObjectSet = ServicesSet.InstancesOf("Win32_LogicalDisk") ;

// Шаг З. Просмотр SWbemObjectSet, содержащего экземпляры Для Ном = 0 По ObjectSet.Count-1 Цикл Item = COMServices.EnumerateCollection(ObjectSet, Ном);

Сообщить("Имя: " + Item.Caption);

КонецЦикла;

В данном примере используется конструкция цикла Для...По...Цикл...конецЦикла от нуля до количества элементов (свойство count) коллекции минус один.

Внутри цикла вызывается метод EnumerateCollection объекта COMServices, Администрирование Windows средствами WMI в который передается ссылка на коллекцию objectset и номер извлекае мого элемента коллекции. Во всем остальном код ничем не отличается от аналогичного кода в версии 8.0. Важно отметить, что не каждый класс имеет свойство Count. Если оно отсутствует, то для определения количества эле ментов в коллекции применяется метод GetcountCoiiection объекта COMServices.

Рассмотрим второй вариант подключения к объектам WMI с помощью мо никеров в версии 7.7 (листинг 2.7).

„,—.., —,, Листинг 2.7. Подключение к серверу с помощью моникера для версии 7. // Сетевое имя компьютера, к которому производится подключение ИмяСервера = " ".;

// Шаг 1. Подключение к WMI на локальном компьютере ServicesSet = COMServices.GetCOMObject ("winmgmts:{impersonationLevel=impersonate}!\\" + ИмяСервера + "\root\cimv2");

// Шаг 2. Извлечение экземпляров класса Win32_LogicalDisk ObjectSet = ServicesSet.ExecQuery("Select * from Win32_LogicalDisk");

// Шаг З. Просмотр SWbemObjectSet, содержащего экземпляры Для Ном = 0 По ObjectSet.Count-1 Цикл Item = COMServices.EnumerateCollectiori(ObjectSet, Ном);

Сообщить("Имя: " + Item.Caption);

КонецЦикла;

Данный пример модифицировался лишь в том, что на первом шаге добавил ся вызов метода GetCOMObject для получения объекта swbemServices.

В следующих частях этой главы будут показаны примеры практического применения технологии WMI. Большинство примеров будет написано толь ко для версии 8.0 системы "1С:Предприятие". При необходимости перевести их в формат версии 7.7 не составит труда.

Сбор данных об аппаратном составе В листинге 2.1 приведен пример вывода названий всех имеющихся логических дисков локального компьютера. Помимо названий класс win32_LogicaiDisk имеет еще очень большое количество свойств, таких как описание, файло Глава вал система, метка диска и т. п. В листинге 2.8 приведен пример вывода ос новных свойств каждого элемента класса win32_Logicaioisk.

// Создать указатель на объект SWbemLocator Попытка Locator = Новый СОМОбъект("WbemScripting.SWbemLocator");

Исключение Сообщить(ОписаниеОшибки(}};

Возврат;

КонецПопытки;

// Шаг 1. Подключение к WMI на локальном компьютере ServicesSet = Locator.ConnectServer(".");

// Шаг 2. Извлечение экземпляров класса Win32_LogicalDisk ObjectSet = ServicesSet.InstancesOf("Win32_LogicalDisk");

// Шаг З. Просмотр SWbemObjectSet, содержащего экземпляры Для каждого Item Из ObjectSet Цикл Сообщить("Имя: " + Item.Caption);

Сообщить("Описание: " + Item.Description);

Сообщить("Файловая система: " + Item.FileSystem);

Сообщить("Свободное место: " + Item.FreeSpace);

Сообщить("Метка диска: " + Item.VolumeName);

Сообщить ("=======================") ;

КонецЦикла;

Для вывода всех имеющихся свойств класса win32_LogicaiDisk необходимо модифицировать только третий шаг (листинг 2.9).

| Листинг 2.9. Вывод всех свойств класса win32_Logic L.._ ;

', „ „., _7Г.' // Шаг 3. Просмотр SWbemObjectSet, содержащего экземпляры Для каждого Item Из ObjectSet Цикл Сообщить("Диск: " + Item.Caption);

// Выборка по всем свойствам Для каждого Свойство Из Item.Properties_ Цикл Администрирование Windows средствами WMI Сообщить(Свойство.Name + " = " + Свойство.Value);

КонецЦикла;

КонецЦикла;

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

Помимо класса win32_Logicaioisk есть еще ряд классов, позволяющих по лучать информацию об аппаратном составе локального или удаленного ком пьютера. Наиболее интересные из них следующие:

С) win32_Processor — информация о процессорах;

П win32_BaseBoard — информация о материнской плате;

П win32_DiskDrive — информация о дисковых накопителях (HDD);

П win32_physicaiMemory — информация о физической памяти (RAM);

П win32_SoundDevice — информация о звуковых картах;

О win32_NetworkAdapter — информация о сетевых адаптерах;

П win32_CDROMDrive — информация о приводах CD-ROM;

П win32_FioppyDrive — информация о дисководах (Floppy);

G win32_DesktopMonitor — информация о мониторах;

П win32_videocontroiier — информация о видеосистеме;

П win32_printer — информация о принтерах;

П win32_Keyboard — информация о клавиатуре;

П win32_PointingDevice — информация о точечных манипуляторах (мы ши, трекболы и т. п.);

П win32_usBHub — информация о портах USB.

Работа с программным обеспечением Для работы с программным обеспечением предназначен класс win32_Product.

Единственное ограничение данного класса состоит в том, что он работает только с тем программным обеспечением, которое было установлено с по мощью Microsoft Windows Installer (MSI).

Основные свойства класса win32_Product:

О Name — название продукта;

П Description — описание;

П identifyingNumber — идентификационный номер продукта (например серийный номер или номер аппаратного устройства);

70 Глава П instaiioate — дата инсталляции;

П instaliLocation — путь к продукту;

О vendor — производитель;

П version — версия.

Основные методы win32_Product:

П I n s t a l l ( P a c k a g e L o c a t i o n, Options, A l l U s e r s ) — установка продукта, причем параметры метода определяются как:

• PackageLocation — путь К файлу установки;

• Options — параметры командной строки;

• Aiiusers — признак установки продукта для всех пользователей;

П Reinstall (ReinstaiiMode) — переустановить продукт с параметром:

• ReinstaiiMode — режим переустановки продукта (например i — ско пировать только недостающие файлы, б — обновить все файлы).

П uninstaiio — удалить целиком продукт.

Внимание Все методы возвращает о, если они завершены успешно. Иначе возвращается ЧИСЛО 2 1 4 7 5 4 9 4 4 5.

Получение списка установленного программного обеспечения Пример получения всего списка установленного на данном компьютере программного обеспечения, с помощью класса win32_Product, представлен в листинге 2.10.

иг 2.10. Получение списка установленного программного обеспечения ServicesSet = Locator.ConnectServer(ИмяКомпьютера, "root\cimv2", Пользователь, Пароль);

Items = ServicesSet.ExecQuery("Select * from Win32_Product");

Для каждого Item Из Items Цикл Сообщить("Имя: " + Item.Name + " (Вер." + Item.Version + " " ;

)) КонецЦикла;

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

Приведем пример получения списка всех продуктов компании Microsoft, установленных в операционной системе (листинг 2.11).

Администрирование Windows средствами WMI,..

...-,,--. — -. ——'i | Листинг 2.11. Получение списка продуктов Microsoft ServicesSet = Locator.ConnectServer(ИмяКомпьютера, "root\cimv2", Пользователь, Пароль);

Items = ServicesSet.ExecQuery("Select * from Win32_Product Where Vendor LIKE '%Microsoft%'");

Для каждого Item Из Items Цикл Сообщить("Имя: " + Item.Name + " (Вер." + Item.Version + " " ;

)) КонецЦикла;

В данном примере используется фильтр по маске — "%Microsoft%". Это оз начает, что в запрос попадут все объекты, у которых свойство vendor содер жит строку "Microsoft".

Удаление программного обеспечения Для удаления какого-либо программного продукта используется метод uninstaii класса win32_product. Приведем пример удаления программы Adobe Acrobat 6.0 Professional (листинг 2.12).

ИмяПрограммы = "Adobe Acrobat 6.0 Professional";

Если Вопрос("Вы уверены, что хотите удалить " + ИмяПрограммы + " " ?, РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда ServicesSet = Locator.ConnectServer(ИмяКомпьютера, "root\cimv2", Пользователь, Пароль);

Items = ServicesSet.ExecQuery("Select * from Win32_Product Where Name = ' + ИмяПрограммы + " " ;

" ') Для каждого Item Из Items Цикл Item.Uninstaii();

КонецЦикла;

КонецЕсли;

Работа со службами и процессами Для работы со службами (сервисами) в WMI используется класс win32_service. Класс имеет довольно большое количество свойств. Рас смотрим только основные:

П Accept Pause — признак возможности приостановить службу;

П Acceptstop — признак возможности остановить службу;

Глава 72_ П Name — название службы;

П Description — описание;

П DisplayName — имя службы, показываемое пользователю;

П PathName — Путь К файлу;

О Process id — идентификатор процесса;

П started — признак, показывающий, запущена служба или нет;

О State — строка, описывающая состояние службы (stopped, Start Pending, Stop Pending, Running, Continue Pending, Pause Pending, Paused, Unknown).

Рассмотрим основные методы класса win32_service:

О startservice ( ) — запускает службу;

П stopserviceo — останавливает службу;

П PauseService ( ) — приостанавливает работу службы;

П ResumeService ( ) — восстанавливает работу после приостановления;

П Delete ( ) — удалить службу;

О create (...) — создать службу (метод имеет множество параметров, кото рые не будут рассматриваться в рамках данной книги).

Для работы с процессами в WMI используется класс Win32_process. Рас смотрим основные свойства класса:

П Description — описание процесса;

П Process id — идентификатор процесса;

П Name — имя процесса;

П Priority — приоритет (от 0 до 37);

П virtuaisize — объем памяти, необходимый процессу.

Основные методы класса win32_Process:

П setPriority (Priority) — установить приоритет процесса, при этом па раметр Priority может принимать значения:

• 64 — Idle (Ожидание, наиболее низкий приоритет);

• 16384 — Below Normal (Ниже нормального);

• 32 — Normal (Обычный);

• 32768 — Above Normal (Выше нормального);

• 128 — High Priority (Высокий приоритет);

• 256 — Realtime (Приоритет реального времени, наивысший при оритет).

О Terminate о — завершить процесс и выгрузить его из памяти.

Администрирование Windows средствами WMI Получение списка сервисов Для получения списка установленных сервисов используется класс Win32_Service (ЛИСТИНГ 2.13).

ServicesSet = ПолучитьСОМОбъект("winmgmts:{impersonationLevel=impersonate}!\\ " + ИмяКомпьютера + "\root\cimv2");

Items = ServicesSet.ExecQuery("Select * from Win32_Service");

Для каждого Item Из Items Цикл Сообщить("Сервис: " + Item.DisplayName + " (" + Item.State + ")");

КонецЦикла;

Для определения списка сервисов, которые возможно остановить, использу ется также класс win32_service. Однако запрос ограничивается условием того, что свойство Acceptstop равно True (истина). Пример определения такого списка показан в листинге 2.14.

ServicesSet = ПолучитьСОМОбъект("winmgmts:{impersonationLevel=impersonate}! \\" + ИмяКомпьютера + "\root\cimv2");

Items = ServicesSet.ExecQuery("Select * from Win32_Service Where Acceptstop = True");

Для каждого Item Из Items Цикл Сообщить("Имя процесса: " + Item.DisplayName);

КонецЦикла;

Установка приоритета процесса Рассмотрим пример (листинг 2.15) установки среднего приоритета для за пущенного процесса Notepad.exe (блокнот).

Листинг 2.15. Установка приоритета процесса ABOVE_NORMAL = 32768;

ServicesSet = ПолучитьСОМОбъект("winmgmts:{impersonationLevel=impersonate}!\\" + ИмяКомпьютера + "\root\cimv2");

Items = ServicesSet.ExecQuery("Select * from Win32_Process Where Name = _74 Глава 'Notepad.exe'") ;

Для каждого Item Из Items Цикл Item.SetPriority(ABOVE_NORMAL);

КонецЦикла;

Завершение процесса Для завершения процесса используется метод Terminate без параметров (листинг 2.16).

ServicesSet = ПолучитьСОМОбъект ("winmgmts:{impersonationLevel=impersonate}!\\" + ИмяКомпьютера + "\root\cimv2");

Items = ServicesSet.ExecQuery("Select * from Win32_Process Where Name = 'Notepad.exe'");

Для каждого Item Из Items Цикл Item.Terminate();

КонецЦикла;

Запуск и приостановка выполнения сервиса Для запуска сервиса используется метод startservice (листинг 2.17). Для приостановки — метод stopservice. Оба метода используются без пара метров.

нг 2.17. Приостановление ServicesSet = ПолучитьСОМОбъект ("winmgmts:(impersonationLevel=impersonate)!\\" + ИмяКомпьютера + "\root\cimv2");

Items = ServicesSet.ExecQuery("Select * from Win32_Service Where Name ='Alerter'");

// Оповещатель Для каждого Item Из Items Цикл Item.StartService();

// Запустить процесс КонецЦикла;

В запросе метода ExecQuery используется фильтрация списка сервисов по имени Alerter (Оповещатель). Таким образом, в выборку попадает всего один сервис — Оповещатель, который и запустится после выполнения мето да StartService.

Администрирование Windows средствами WMI Работа с операционной системой Для работы с операционной системой в WMI существует несколько классов, ОСНОВНЫМ ИЗ КОТОРЫХ ЯВЛЯетСЯ — Win32_OperatingSystem. Рассмотрим ОС новные свойства данного класса:

П Name — название операционной системы;

П BootDevice — имя физического диска, с которого загружается операци онная сиситема;

П SystemDrive — символ логического диска, на котором установлена сис тема;

О windowsDirectory — папка, в которой установлена система;

П Description — описание к объекту класса;

П FreePhysicaiMemory — размер свободной физической памяти (в килобайтах);

П FreeVirtuaiMemory — размер свободной виртуальной памяти (в килобайтах);

П Manufacturer — производитель операционной системы. Обычно данное свойство имеет значение "Microsoft Corporation";

О NumberOfProcesses — количество запущенных процессов;

П organization — название организации, на которую зарегистрирована данная копия системы;

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

П SeriaiNumber — регистрационный номер;

О osbanguage— языковая версия системы. Например оооэ — английская, 0419 — русская и т. д.;

П озтуре — тип операционной системы. Например, и — WIN98, 18 — WINNT, зо - SunOS и т. д.;

П Primary — признак основной операционной системы;

П version — версия системы;

П BuiidNumber — номер сборки операционной системы;

Основные методы класса Win32_OperatingSystem:

П Reboot ( ) — перезагрузить систему;

П shutdown ( ) — выключить компьютер;

П win32shutdown(Fiag) — управление функциями выключения компьютера (для\Ут32-операционных систем). Параметр Flag может принимать сле дующие значения:

• о — завершить работу пользователя (Log Off);

76 Глава 4 — принудительное завершение работы пользователя (Forced Log Off);

• • i — выключение компьютера (Shutdown);

• 5 — принудительное выключение компьютера (Forced Shutdown);

• 2 — перезагрузка (Reboot);

• 6 — принудительная перезагрузка (Forced Reboot);

• 8 — выключение питания (Power Of!);

• 12 — принудительное выключение питания (Forced Power Off).

Определение информации об ОС Рассмотрим пример вывода основных свойств операционной системы. В про граммном коде, представленном в листинге 2.18, показан пример вывода названия, пути установки и номера версий установленных операционных систем (их может быть несколько).

ServicesSet = Locator.ConnectServer(ИмяКомпыотера, "root\cimv2", Пользователь, Пароль);

Items = ServicesSet.ExecQuery("Select * from Win32_OperatingSystem");

Для каждого Item Из Items Цикл Сообщить("Название: " + Item.Caption);

Сообщить("Путь: " + Item.WindowsDirectory);

Сообщить("Версия: " + Item.Version);

КонецЦикла;

Выключение компьютера Рассмотрим пример выключения компьютера с помощью метода Win32Shutdown (ЛИСТИНГ 2.19).

i Листинг 2.19. Выключение компьютера ServicesSet=nony4HTbCOM06beKT("winmgmts:{impersonationLevel=impersonate, (Shutdown)}!\\" + ИмяКомпыотера + "\root\cimv2");

Items = ServicesSet.ExecQuery("Select * from Win32_OperatingSystem");

Для каждого Item Из Items Цикл Item.Win32Shutdown(5);

// Выключение КонецЦикла;

Pages:     || 2 | 3 | 4 | 5 |



© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.