Сообщений 2    Оценка 345        Оценить  
Система Orphus

Использование MS Agent в .NET Framework

Автор: Александр Климов
Источник: RSDN Magazine #3-2004
Опубликовано: 02.01.2005
Исправлено: 10.12.2016
Версия текста: 1.0
Предисловие
Запуск IDE
Кодирование
Подводя итоги

vbagent.zip – пример для VB.NET
csagent.zip – пример для C#

Предисловие

В данной статье речь пойдет об использовании технологии MS Agent в Microsoft .NET Framework. Основной упор будет сделан на использовании в среде VB.NET. Но С#-программистам не составит большого труда на основании данной статьи понять основные принципы работы с MS Agent.

Прежде чем перейти к разбору примеров, давайте посмотрим на область применения технологии MS Agent. Сначала MS Agent являлась отдельным продуктом, который можно было скачать с сайта Майкрософт. Российские пользователи могли познакомиться с данной технологией, приобретая программный продукт известной питерской компании PROMT под названием Magic Gooddy 98. Волшебный гусь представлял собой переводчик, ориентированный на детскую аудиторию. Но его услугами с удовольствием пользовались и взрослые, плохо знающие английский язык. Переводчик представлял собой обычый текстовый редактор, разделенный на две части. Вводимые в одну часть редактора слова автоматически переводились на другой язык. Фишка заключалась в том, что можно было воспользоваться услугами виртуального персонажа, который мог воспроизвести текст вслух! Этот пример иллюстрирует, для чего собственно была разработана данная технология.

Исследования показали, что у части пользователей существует определенный страх перед машиной. Диалог с машиной с помощью клавиатуры и мыши пугает пользователя. Исследователи установили, что общение с компьютером станет более эффективным, если будет происходить в форме человеческого общения. Майкрософт решила попробовать воплотить эти рекомендации в жизнь. Была предложена концепция общения через виртуального персонажа. Это не обязательно должен быть человек, но, например, симпатичный зверек или знакомый предмет. Наиболее известным продуктом, в котором применили новую форму общения, стал MS Office 97, где пользователи смогли познакомиться со Скрепкой. На основе этой и целого ряда других разработок Майкрософт выпустила на рынок технологию MS Agent. Причем проект получился настолько обнадеживающим, что, начиная с Windows Me/2000, MS Agent является уже составной частью операционной системы. MS Office XP также использует помощников MS Agent.

ПРИМЕЧАНИЕ

Скрепка из Office 97 не является персонажем MS Agent, несмотря на свою определенную схожесть. А в MS Office XP ассистент Скрепка уже полноценный персонаж MS Agent.

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

Запуск IDE

Рассмотрим пример использования MS Agent в VB.NET. Запускаем среду разработки Microsoft Visual Studio .NET 2003, выбираем вкладку New Project. У вас откроется окно выбора типа проекта. Выбираем Windows Application и щелкаем на кнопке OK. Добавим на форму несколько элементов управления: список ListBox1, две кнопки Button1 и Button2. Свойству Text для кнопок присвоим значения Женский голос и Мужской голос соответственно.

ПРИМЕЧАНИЕ

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

О назначении этих элементов мы поговорим позже, а пока приступим к подключению MS Agent к проекту. Так как мы собираемся использовать MS Agent через ActiveX control, то необходимо добавить ссылку на данный элемент. В меню Project выбираем пункт AddReference. Затем в следующем окне надо выбрать вкладку COM и найти в списке строку Microsoft Agent Control 2.0. Выделите найденную строку и нажмите кнопку Select (рисунок 1).


Рисунок 1. Окно Add Reference

Следующим шагом будет добавление элемента на панель инструмента. В меню Tools щелкаем на пункте Add/Remove Tools Item и в появившемся диалоговом окне Customize Toolbox переходим на вкладку COM Components, ставим галочку напротив Microsoft Agent Control 2.0 (рисунок 2)и щелкаем на кнопке OK.


Рисунок 2. Окно Customize Toolbox.

Теперь, если вы посмотрите на панель инструментов, то увидите на ней новый значок Microsoft Agent Control 2.0.

ПРИМЕЧАНИЕ

В реализации .NET Framework данный объект носит имя AxAgent, в отличие от имени Agent, которое применялось в Visual Basic 6.0.

Дальше все уже знакомо по прежней версии, VB 6.0. Добавляем на форму элемент AxAgent1 (см. рисунок 3). Подготовительная работа закончена. Можно приступать к кодированию.


Рисунок 3. Элемент AxAgent1 на форме.

В результате всех манипуляций в папках проекта создаются два файла - Interop.AgentObjects.dll и AxInterop.AgentObjects.dll. Причины появления этих файлов выходят за рамки статьи, просто примите это к сведению.

Кодирование

Написание кода для VB.NET 2003 принципиально ничем не отличается от кода на VB 6.0. Практически вся документация по технологии MS Agent на http://msdn.microsoft.com написана применительно к Visual Basic. Тем, кто не очень дружит с английским языком, могу посоветовать скачать русскоязычный Справочник по MS Agent в среде VB, доступный по адресу http://rusproject.narod.ru/guide.htm. Для начала создадим глобальную переменную для загружаемого персонажа:

      Dim MyChar As AgentObjects.IAgentCtlCharacterEx

Теперь можно загружать персонаж. Удобнее всего это делать при загрузке формы:

      Private
      Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
  ' Загружаем персонаж
  AxAgent1.Characters.Load("CharacterID")
  MyChar = AxAgent1.Characters("CharacterID")
  ' Заполняем список анимаций
  ListBox1.Items.Clear()
  ForEach animation In MyChar.AnimationNames
    ListBox1.Items.Add(animation)
  NextEndSub

Одновременно с загрузкой персонажа мы выведем список доступных анимаций выбранного персонажа. Цикл For Each…Next перебирает все доступные анимации персонажа, которые хранятся в коллекции AnimationNames и выводит их в список.

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

      Private
      Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  ' Показываем персонаж
  MyChar.Show()
  ' Устанавливаем русский язык
  MyChar.LanguageID = &H419
  ' Устанавливаем женский голос
  MyChar.TTSModeID = "{06377F80-D48E-11d1-B17B-0020AFED142E}"' Говорим
  MyChar.Speak("Здравствуйте, я ваша тетя!")
EndSub

Метод Show выводит персонаж на экран. Затем мы устанавливаем соответствующие язык и голос для персонажа, который должен сказать заданные слова (см. рисунок 4).

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

      Private
      Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  ' Мужской голос
  MyChar.TTSModeID = "{06377F81-D48E-11d1-B17B-0020AFED142E}"
  MyChar.Speak("Извините, я пошутил!")
EndSub


Рисунок 4. Приложение в действии.

ПРЕДУПРЕЖДЕНИЕ

Для того, чтобы персонаж заговорил (через динамики), необходимо установить несколько дополнительных файлов. В частности, для возможности говорить по-русски, нужно установить соответствующий голосовой движок Lernout & Hauspie TTS3000 TTS engine – Russian. А владельцам машин под управлением Windows XP придется также установить поддержку SAPI 4.0. Дело в том, что в Windows XP уже имеется встроенная SAPI 5.1, не обладающая обратной совместимостью с SAPI 4.0. Это вызвало волну недоумения на форумах, посвященных MS Agent. Не проходит месяца, чтобы очередной новичок не задал вопрос – «Почему на моем компьютере под WinXP персонажи не говорят?». Эти две версии могут сосуществовать вместе в одной системе. Более подробную информацию об установке необходимых файлов вы можете посмотреть на странице http://www.microsoft.com/msagent/downloads/user.asp

Подводя итоги

Мы рассмотрели простейший пример работы с персонажами MS Agent 2.0 на VB.NET 2003. Следует отметить, что в C# принципы подключения элемента MS Agent к проекту будут аналогичны приемам, используемым при работе на VB.NET. Разница заключается только в синтаксисе языка. Повторяем последовательность действий, которую мы уже делали для примера на VB.NET: Project-Add Reference-COM-Microsoft Agent Control 2.0. Добавляем выбранный элемент на форму, и у нас все готово к написанию примера. Повторяю, что меняется только синтаксис языка, поэтому нет смысла описывать подробно все строчки кода. Готовый пример поставляется вместе со статьей. Обратите внимание, что в примере на C# явно указыван путь к файлу персонажа, который находится в стандартной папке Windows\MSAgent\chars. Если вы распространяете собственный персонаж вместе с программой, то укажите его полное имя (путь и имя файла). Всем, кто заинтересовался персонажами, советую прогуляться на сайт http://characters.narod.ru/, на котором собрана внушительная коллекция помощников на любой вкус. Удачного вам программирования!


Эта статья опубликована в журнале RSDN Magazine #3-2004. Информацию о журнале можно найти здесь
    Сообщений 2    Оценка 345        Оценить