Microsoft Agent 2.0
Объектная модельMicrosoft Agent 2.0
Использование Microsoft Agent 2.0 в Internet
Управление из скриптовых программ
Использование Microsoft Agent в программах
Подключение компонента ActiveX
Персонажи в Microsoft Office 2000
Будущее пользовательских интерфейсов
Использование интерфейсов IEnumXXX
Microsoft Agent — это набор программных сервисов, которые поддерживают воспроизведение интерактивных анимированных персонажей в рамках интерфейса Microsoft Windows. Разработчики могут использовать эти персонажи для создания различных интерактивных приложений, справочных систем, электронных пособий, а также для представления информации в HTML-документах различными способами.
Microsoft Agent позволяет разработчикам и Web-дизайнерам использовать новую форму взаимодействия с пользователями, основанную на принципах социального общения. В дополнение к поддержке обычного способа ввода информации с помощью клавиатуры и мыши Microsoft Agent предлагает поддержку распознавания голосовой информации (на основе Microsoft Speech Application Programming Interface, SAPI 4.0), позволяя управлять приложениями на уровне голосовых команд. Персонажи могут воспроизводить синтезированную речь (text-to-speech, TTS), аудиофрагменты или текст в специальном окне.
Программный интерфейс Microsoft Agent позволяет управлять воспроизведением персонажей, вводом и выводом информации. Персонажи отображаются в собственных окнах, что делает интерфейс более удобным и гибким. В состав Microsoft Agent входит компонент ActiveX, доступный из любых языков программирования и средств разработки, поддерживающих технологию COM, а также из скриптовых языков VBScript и JavaScript при включении данного компонента в состав HTML-документов при помощи элемента <OBJECT>.
Microsoft Agent войдет в состав операционной системы Windows 2000. Для установки Microsoft Agent в Microsoft Windows 98 и Windows NT 4.0 требуется загрузить соответствующее программное обеспечение с Web-узла фирмы Microsoft (http://msdn.microsoft.com/workshop/imedia/agent/agentdl.asp).
Ниже мы рассмотрим следующие темы:
-
Объектная модель Microsoft Agent 2.0.
-
Использование Microsoft Agent 2.0 в Internet с примерами на JavaScript.
-
Использование Microsoft Agent в программах с примерами на Delphi.
-
Персонажи в Microsoft Office 2000.
В приложение вынесен список стандартных анимаций, которые должны поддерживать персонажи и список состояний и соответствующих им анимаций.
Объектная модельMicrosoft Agent 2.0
Для программного управления Microsoft Agent в распоряжение программистов предоставляется объектная модель, которая доступна как из скриптовых языков (для управления Microsoft Agent из HTML-документов), так и из языков программирования, поддерживающих COM-технологии.
В центре объектной модели располагается невидимый пользователям объект Agent, а также объект Request. Персонажи представлены коллекцией Character, доступные команды — коллекцией Command, а специальное окно для вывода информации — объектом Balloon. Также объект Agent включает объекты SpeechInput, CommandsWindow, AudioOutput и PropertySheet. Иерархия объектов Microsoft Agent представлена на следующем рисунке.
Давайте кратко рассмотрим свойства, методы и события основных объектов объектной модели Microsoft Agent.
Объект Request
Объект Request используется для получения информации о состоянии выполнения методов Get, Hide, Interrupt, Load, MoveTo, Play, Show, Speak и Wait. Чтобы узнать статус метода, необходимо получить доступ к специальной переменной:
var Rq; Rq = Char.Get “Animation”, “Sad”
Объект Request имеет три метода:
Метод | Описание |
---|---|
status | Возвращает целочисленный статус команды, находящейся в очереди |
number | Возвращает код ошибки |
description | Возвращает строку с описанием ошибки |
Объект Agent
Данный объект является родительским объектом для всех остальных объектов Microsoft Agent. Объект Agent представляет собой сервер и поддерживает свойства и события, показанные в табл. 1.
Объект Agent также имеет один метод — showDefaultCharacterProperties, с помощью которого можно отобразить на экране панель настройки свойств Microsoft Agent по умолчанию.
Объект Characters
Данный объект наиболее важен при управлении отдельным персонажем и содержит все необходимые для этого методы и события. Так как Microsoft Agent позволяет одновременно использовать несколько персонажей, данный объект представляет собой коллекцию, к которой можно обращаться либо напрямую, либо через объект Character.
Для того чтобы иметь доступ к объекту Characters, мы должны указать идентификатор персонажа. Так как мы часто используем методы и свойства именно этого объекта, имеет смысл сохранить идентификатор персонажа в переменной:
Char = agent.characters.character(“Genie”)
Объект Characters поддерживает свойства и методы, указанные в табл. 2.
Объект Commands
С помощью этого объекта мы можем задавать собственные команды, которые появляются в локальном меню персонажа, вызываемом по нажатию правой кнопки мыши. Данный объект, как и объект Characters, представляет собой коллекцию, поэтому обращение к нему осуществляется следующим образом:
myCmd = Agent.Characters.Character(“Genie”).Commands.Command(“myCmd”);
Объект Commands поддерживает свойства и методы, указанные в табл. 3.
Объект Balloon
Данный объект служит для задания характеристик специального окна, в котором происходит вывод текстовой информации. Объект Balloon поддерживает свойства, указанные в табл. 4.
Ознакомившись с основными объектами, составляющими объектную модель Microsoft Agent, перейдем к вопросам, касающимся использования Microsoft Agent в HTML-документах и программах.
Использование Microsoft Agent 2.0 в Internet
Поскольку Microsoft Agent представляет собой компонент ActiveX, он может использоваться в составе HTML-документов. Компонентом можно управлять из скриптовых языков JScript или VBScript. Такие документы должны просматриваться с помощью браузера Microsoft Internet Explorer либо с помощью Netscape Navigator с подключенным расширением фирмы NCompass.
Для включения Microsoft Agent 2.0 в состав HTML-документов мы используем стандартный элемент <OBJECT>:
<OBJECT ID=”Agent” Width=0 Height=0 ClassID=”CLSID:D45FD31B-5C6E-11D1-9EC1-00C04FD7081F” CodeBase=”#VERSION=2,0,0,0"> </OBJECT>
Данный элемент загружает соответствующий компонент ActiveX (заданный атрибутом ClassID). Если ядро MSAgent не было установлено на компьютере, оно загружается с Web-узла фирмы Microsoft — так работает механизм загрузки любого компонента ActiveX.
После того как сам компонент ActiveX загружен, необходимо указать имя файла, в котором находится тот или иной персонаж. Это может быть либо локальный для сервера файл, либо URL-адрес на любом из серверов Internet. Стандартные персонажи фирмы Microsoft расположены по адресу:
http://agent.microsoft.com/agent2/chars/имя_персонажа/имя_персонажа.acf
где имя_персонажа может быть Genie, Merlin, Peedy или Robby.
На следующем примере показано, как загрузить персонаж с помощью скриптовой программы на JScript:
Agent.Characters.Load (“Merlin”, “merlin.acs”); Merlin = Agent.Characters.Character(“Merlin”);
Управление из скриптовых программ
После того как персонаж загружен, мы можем вызывать его команды, обращаясь к нему по имени, заданному во второй строке предыдущего примера:
Merlin.Show(); X -= 60; Y += 50; Merlin.MoveTo(X, Y); Merlin.Play(“Greet”); Merlin.Speak(“Привет”);
Приведенная выше последовательность команд отображает персонаж (Show), перемещает его в другое место экрана (MoveTo), выполняет команду Greet (Play) и заставляет персонаж произнести: «Привет» (Speak). Отметим, что команды, выполняемые с помощью функции Play, специфичны для каждого конкретного персонажа. В разделе «Использование Microsoft Agent в программах» мы узнаем, как получить список команд, доступных для того или иного персонажа.
Локальное меню
Microsoft Agent поддерживает возможность включения собственных команд в локальное меню, вызываемое нажатием правой кнопки мыши. Для этого необходимо сначала добавить команду в коллекцию Commands:
Merlin.Commands.Add(“Demo”, “Demo”, “”);
а затем создать соответствующий обработчик события, который может выглядеть так:
<SCRIPT Language=”JavaScript” For=”Agent” Event=”Command(UserInput)”> switch(UserInput.Name) { case “Demo” : alert (“Вызвана команда Demo”); break; } </SCRIPT>
Данный обработчик будет использоваться для всех пользовательских команд, поэтому в нем применена конструкция switch.
Отметим, что мы задаем обработчик не для персонажа (Merlin в нашем примере), а для компонента ActiveX (Agent в нашем примере).
Позиционирование персонажа
Прежде чем мы завершим обсуждение использования Microsoft Agent в составе HTML-документов, следует сказать несколько слов о позиционировании персонажей. Окна браузера живут самостоятельной жизнью, и вся поддержка координатной системы ведет свой отсчет от левого верхнего угла окна. Естественно, что такие координаты не подходят для позиционирования персонажей, так как они не связаны с экранными координатами. Мне удалось найти не самый очевидный способ преобразования координат. Он заключается в следующем. Предположим, у вас есть форма, для каждого элемента которой отображается подсказка в виде сообщения, выводимого персонажем. Хотелось бы переместить персонаж в область соответствующего элемента формы. Как известно, каждый элемент формы поддерживает событие onFocus, которое возникает при получении элементом фокуса. В обработчике этого события мы получаем координаты элемента относительно всего экрана (screenX, screenY) и с помощью метода MoveTo перемещаем персонаж в необходимую нам точку:
<input type=’text’ size=40 onFocus=’doFocus()’> ... function doFocus() { X = window.event.screenX; Y = window.event.screenY; Peedy.MoveTo(X, Y); }
Другим вариантом получения координат для позиционирования персонажа может быть размещение в необходимых нам точках элемента <SPAN> с соответствующим идентификатором (атрибут ID) и обработчиком события onClick. Когда нам необходимо переместить персонаж, мы вызываем метод click соответствующего элемента <SPAN> и извлекаем его координаты.
Использование Microsoft Agent в программах
Как мы отмечали выше, Microsoft Agent представляет собой компонент ActiveX, поэтому его можно использовать не только в составе HTML-документов, но и в собственных программах, написанных на Visual Basic, Visual C++, Visual J++ или Borland Delphi. Ниже мы рассмотрим, как использовать Microsoft Agent в программах, создаваемых средствами Borland Delphi.
Подключение компонента ActiveX
Работу с любым компонентом ActiveX мы начинаем с включения его в палитру компонентов. Для этого выполняем команду Component|Import ActiveX Control. В списке доступных компонентов выбираем Microsoft Agent Control 2.0 (компонент реализован в библиотеке AGENTCTL.DLL) и нажимаем кнопку Install.
После того как компонент будет установлен, он станет доступным в палитре компонентов на вкладке ActiveX как компонент Agent.
Размещение компонента в форме приводит к тому, что у нас появляется объект Agent1 типа TAgent.
type TForm1 = class(TForm) Agent1: TAgent; private { Private declarations } public { Public declarations } end;
Теперь можно приступать к программированию. Начнем с загрузки персонажей. Она выполняется практически так же, как и в случае использования Microsoft Agent в составе HTML-документа, за исключением того, что здесь мы указываем COM-интерфейсы:
var Char : IAgentCtlCharacterEx; … Agent1.Characters.Load(‘Char’, ‘peedy.acs’); Char := Agent1.Characters.Character(‘Char’) as IAgentCtlCharacterEx;
После этого мы можем вызывать методы и выполнять команды, поддерживаемые тем или иным персонажем.
Char.Show; Char.Think(‘Полезная мысль...’); Char.Play(‘Greet’);
и так далее...
Получение списка команд
Существует два способа получения списка команд, поддерживаемых тем или иным персонажем. Первый, самый простой и очевидный, — обращение к соответствующей документации, где теоретически должны быть описаны все команды и действия, выполняемые по этим командам. Но это, как ни странно, может оказаться не самым удобным решением. Поэтому мы и предлагаем второй способ, который, может быть, чуть сложнее первого, но зато гарантирует, что мы всегда будем иметь список команд, актуальных для данного персонажа. Данный способ базируется на использовании COM-интерфейса IAgentCtlAnimationNames.
Интерфейс IAgentCtlAnimationNames возвращается через значение свойства AnimationNames основного интерфейса COM-объекта Microsoft Agent (IAgentCtlCharacterEx) и имеет всего лишь одно свойство — Enum типа IUnknown. Вероятнее всего, Enum — это указатель на один из интерфейсов IEnumXXX, который, как известно, используется для перебора каких-либо элементов коллекции. Остается только подобрать соответствующий интерфейс. Стандартная документация не предлагает никакого решения этой проблемы, поэтому подходящий интерфейс подбирается экспериментально, благо интерфейсов типа IEnumXXX не так много. Подходящим для нашей задачи оказался интерфейс IEnumVariant (см. врезку «Использование интерфейсов IEnumXXX»). Таким образом, код для получения списка команд, поддерживаемых тем или иным персонажем, может выглядеть так:
var ANames : IAgentCtlAnimationNames; Enum : IEnumVariant; V : OLEVariant; Fetched : LongInt; S : TStringList; ... procedure TForm1.UpdateCommandsList; begin { Очистить список } S.Clear; { Получить интерфейс IAgentCtrlAnimationNames } ANames := Char.AnimationNames; { и интерфейс для перебора } Enum := ANames.Enum as IEnumVariant; { Перебрать все команды } Fetched := $ff; Repeat Enum.Next(1, V, @Fetched); If VarToStr(V) <> ‘’ Then S.Add(V); Until Fetched = 0; { Сохранить в списке } ListBox1.Items := S; end;
После того как мы получили список команд, поддерживаемых персонажем, мы, естественно, можем их использовать. Знание этого списка освобождает нас от необходимости проверять, поддерживается ли та или иная команда — в списке будут только те команды, которые «актуальны» для загруженного персонажа.
Локальное меню
Как и при использовании Microsoft Agent в составе HTML-документов, мы можем задавать собственные команды, доступные через локальное меню, вызываемое нажатием правой кнопки мыши. Сначала задаем команду:
Char.Commands.Add(‘Test’, ‘&Test’, 1, 1, True); Char.Commands.Add(‘Demo’, ‘&Demo’, 1, 1, True);
а затем в обработчике события OnCommand описываем выполняемые ими действия:
procedure TForm1.Agent1Command(Sender: TObject; const UserInput: IDispatch); var Cmd : IAgentCtlUserInput; begin Cmd := UserInput as IAgentCtlUserInput; If Cmd.Name = ‘Test’ Then Char.Think(‘Вызвали команду Test’); If Cmd.Name = ‘Demo’ Then Char.Think(‘Вызвали команду Demo’); end;
В данном примере мы вызываем метод Think, с помощью которого выводится соответствующее сообщение.
Использование «закладок»
Microsoft Agent поддерживает механизм «закладок», с помощью которого можно вставить в выводимый текст указание на необходимость активизации какой-либо команды. Для этого задаем «закладку»:
procedure TForm1.Button2Click(Sender: TObject); begin Char.Speak(‘Пример использования \mrk=255\ закладки’, ‘’); end;
а затем в обработчике события OnBookmark выполняем необходимые действия:
procedure TForm1.Agent1Bookmark(Sender: TObject; BookmarkID: Integer); begin If BookmarkID = 255 Then ShowMessage(‘Закладка!’); end;
Пример
На CD-ROM, прилагаемом к этому номеру КомпьютерПресс, вы найдете полный исходный текст примера использования Microsoft Agent в Delphi-программе.
В нем показаны все рассмотренные выше действия, и реализована возможность использования любого персонажа, расположенного в каталоге WINDOWS\MSAGENT\CHARS.
Персонажи в Microsoft Office 2000
В Microsoft Office 2000 будет поддерживаться технология Microsoft Agent и будут использоваться персонажи, схожие по характеристикам с основными персонажами Microsoft Agent, но отличающиеся по размеру (12x93 вместо 120x120) и набору стандартных действий. В табл. 5 приведен список анимаций, которые отображаются для персонажей Microsoft Office 2000, — вы можете сравнить этот набор с набором стандартных анимаций, приведенным в приложении 1.
Персонажи, используемые в Microsoft Office 2000, располагаются в папке Microsoft\Office\Actors внутри папки Application Data пользователя.
Заключение
В этой статье мы рассмотрели технологию Microsoft Agent 2.0, с помощью которой можно создавать социальные, ориентированные на определенные группы пользователей интерфейсы с поддержкой стандартного и речевого ввода. Microsoft Agent станет технологией, интегрированной в Microsoft Windows 2000 и Microsoft Office 2000.
В версии Microsoft Agent 3.0 будет реализована более динамичная анимационная модель, расширена поддержка речевого ввода и, возможно, добавлены дополнительные сервисы, схожие с технологией IntelliSense.
За последний год Microsoft активно старалась привлечь внимание разработчиков к технологии Microsoft Agent. Вот только несколько фактов, подтверждающих это:
-
Microsoft неоднократно показывала использование персонажа Peedy и возможностей распознавания голосового ввода в Outlook.
-
Microsoft Agent включен в состав MSDN и Platform SDK.
-
Поддержка Microsoft Agent включена в Visual Studio 6.0.
-
Поддержка Microsoft Agent включена в Office 2000 developer Edition.
-
Эта технология напрямую используется в Office 2000 и включена в состав ядра Windows 2000.
Технология Microsoft Agent уже используется на ряде коммерческих и любительских Web-узлов, в образовательных программах, в интрасетях и т.п. На CD-ROM вы найдете список Web-узлов, использующих эту технологию, список узлов, посвященных использованию Microsoft Agent и содержащих информацию для разработчиков, узлов фирм, разрабатывающих персонажи, а также коллекцию персонажей, которых вы можете использовать в собственных программах.
В заключение отметим, что в состав Microsoft Agent SDK входят две программы — Microsоft Agent Character Editor для разработки собственных персонажей и Microsoft Linguistic Information Sound Editing Tool для создания файлов с речевой информацией.
КомпьютерПресс 7'1999