---- Microsoft Agent是微软公司于1997年9月发布的一项代理软件开发技术,
而后被集成到Internet Explorer 4.0 Plus及更高版本中,目前版本为2.0,支持简体中文。
作为一种软件代理工具,Agent以其强大的交互功能、鲜明的人性特点、优美的操作界面和
简便统一的编程方法,对由菜单、按钮、提示框等组成的传统人机交互方式产生了很大影响,
在多媒体创作、Web应用、教育软件、软件帮助系统和辅助工具制作等方面,具有广阔的应用前景。

一、 Microsoft Agent技术简介

---- Agent一词的中文意思是“代理”,故名思意,这类代理软件的主要作用是提供一种
易于理解和使用的操作界面,接受用户的指令、代替用户完成某些复杂繁琐的工作、或为用户
提供帮助。科学研究表明:从人机工程的角度考虑,赋予电脑或程序更多人性化色彩,如支持
语音合成输出信息、语音识别输入指令、智能提示、动画等,能够充分提高人机交互的有效性
和易用性。

---- 我们知道,在Office 97帮助系统中有一种叫作Office助手的代理软件,其中幽默风趣的
动画人物,如“大眼夹”,能够根据用户的操作步骤“智能化”地提出一些建议或帮助信息。
与Office助手相比,Agent功能更加丰富强大,表现在:

Office助手沿用传统的不透明矩形窗口,窗口后面的背景被完全挡住;Agent动画人物本身是
一个“AlwaysOnTop”窗口,只有人物身体部分挡住背景,其余部分透明。

Office助手只允许Office 97的各个组件调用,Agent动画人物可由任何Windows程序调用;

Agent支持文字气球和输入提示条,在输出语音的同时把文字输出至一个卡通式文字气球中。
如果电脑系统中安装有Agent语音识别引擎,当用户按住输入键,如Scroll Lock键,在Agent
人物下方出现一个输入命令窗口,表示它正在“聆听”用户的语音命令。

Agent提供Genie、Merlin、Bobby和Peedy等动画人物,不仅具有优美诙谐的动作,而且可以
通过声卡、麦克风与用户交谈。

二、 Microsoft Agent安装方法

---- Agent是一种ActiveX控件,其服务器程序(C:\WINDOWS\MSAGENT\Agentsvr.exe)运行
在Win95/98/NT操作平台上,为其它调用Agent的客户程序提供服务。客户程序可以是利用VB、
C++、Delphi、VFP、PB等开发的应用软件,也可以是HTML文件中的Visual Script、Java Script
脚本语言代码。

安装Agent核心组件Msagent.exe。

安装Lernout & Hauspie TruVoice Text-to-Speech Engine(完成从文字合成语音的工作,
目前版本只支持英语)Cgram.exe。

安装Microsoft Command and Control Speech Engine(提供语音识别功能,目前版本只支持
英语)Actcnc.exe。

Agent动画人物人物数据文件。Agent支持单结构角色文件(.acs,角色数据与动画数据存于同一个文件),
也支持分离结构角色文件(.acf,角色数据存于.acf中,动画数据存于.aca中)。基于本地硬盘和网络的
应用程序可采用.acs文件,基于Web页面的HTML文件在浏览器中访问时会自动调用,习惯上多使用.acs文件。

---- 上述文件可从 http://www.microsoft.com//workshop/imedia/agent/default.asp下载。

三、 Microsoft Agent编程要点

---- 1、 在Delphi中添加Agent控件

---- 在Delphi IDE中选择菜单Component,Import ActiveX Control——在Import ActiveX
下的列表框中选择Microsoft Agent Control 2.0(Version 2.0),点击按钮Install——在
Install对话框中点击按钮OK——在Confirm对话框中点击按钮Yes——在对话框中点击按钮OK。
至此,Agent控件被添加到Delphi组件板ActiveX页上。

---- 2、 在Delphi中调用Agent控件

---- ⑴、在Delphi IDE 中新建Project1(包含Form1),在Form1上放置Agent1
(Name属性为MyAgent)、Button1。

---- ⑵、定义变量。

Var

  Peedy: IagentCtlCharacterEx;

  Request1,Request2: IagentCtlRequest;

---- ⑶Agent主要属性、方法、事件。

 

---- ①Characters属性与Load、Unload方法:初始化Agent,加载动画数据,卸载动画人物

---- Request1 := MyAgent.Characters.Load( 'Peedy', 'C:\Windows\System\Peedy.acs' );

---- Peedy := MyAgent.Characters.Character( 'Peedy' );

---- MyAgent.Characters.Unload('Peedy');

---- ②Show与Hide方法:显示、隐藏Agent动画人物。参数Fast表示动画人物显示、隐藏的
速度。Fast为0表示Agent飞入、飞出,Fast为1表示Agent直接出现、消失,没有动画过程。

---- Peedy.Show(0);

---- Peedy.Hide(1);

---- ③StopAll、Stop方法:停止所有动作。

---- Peedy.StopAll('');

---- Peedy.Stop(Request);

---- ④Connected属性:Agent是否与Microsoft Agent服务器连接。

---- MyAgent.Connected := True;

---- ⑤Get_Height、Get_Width、Set_Height、Set_Width方法:获得、设置Agent动画人物的高度、宽度。

AgentHight := Peedy.Get_Height;

AgentWidth := Peedy.Get_Width;

Peedy.Set_Height( round(AgentHeight / 2 ));

Peedy.Set_Width( round( AgentWidth / 2 ));

---- ⑥MoveTo方法:参数x,y表示Agent动画人物移动到的坐标,参数Speed表示移动的速度。

---- Peedy.MoveTo( (Screen.Width-Peedy.Get_Width) Div 2, (Screen.Height-Peedy.Get_Height) Div 2, 2 );

---- ⑦Interrupt方法:中断指定角色的动画。在几十种动画动作中,有一类后缀名为“ing” 的动作
比较特殊,如“processing”、“searching”、“reading”、“writing”,一旦执行就必须通过调用
另外一个动画人物的Interrupt方法才能中断 。角色不能中断自身的动作,否则会导致异常。

Request1 := Robby.Play('reading');

Peedy.Interrupt(Request1);