图1
在.NET架构中使用微软AGENT
微软Agent不是以ActiveX控制DLL的形式提供的。要在.NET中使用它,可以使用由.NET框架SDK提供的AxImp.exe工具:
AxImp -- ActiveX控制-Win窗体组合体生成器
Syntax: AxImp [/? | [[/source] OCXName]]
Aximp agentctl.dll
上面的命令生成二个文件:AxAgentObjects.dll和AgentObjects.dll。通过使用这二个文件,我们就可以在.NET中使用Agent了。
C#中的微软Agent:
要在C#中使用微软Agent,我们必须在程序中添加二个DLL文件:AxAgentObjects.dll和AgentObjects.dll。加载动画角色的代码是相当简单的:
AxAgent.Characters.Load("Genie",(object)"C:/Windows/Msagent/chars/GENIE.acs");Character = AxAgent.Characters["Genie"];file://将语言设置为美国英语Character.LanguageID = 0x409;file://该行代码显示角色Character.Show(null);
让角色说话的代码如下所示:
Character.Speak ("Welcome you sir VISIT www.onlinecsharpteach.netfirms.com ",null);
下面我们来看一个例子:
The Example:
using System;using System.Drawing;using System.WinForms;using AgentObjects;public class Hello: Form{private System.ComponentModel.Container components;private System.WinForms.Button button2;private System.WinForms.Button button1;private System.WinForms.TextBox textBox1;private AxAgentObjects.AxAgent AxAgent;private IAgentCtlCharacterEx Character;public Hello(){InitializeComponent();}public static void Main(string[] args){Application.Run(new Hello());}private void InitializeComponent(){this.components = new System.ComponentModel.Container();this.button1 = new System.WinForms.Button();this.button2 = new System.WinForms.Button();this.textBox1 = new System.WinForms.TextBox();this.AxAgent = new AxAgentObjects.AxAgent();AxAgent.BeginInit();button2.Click += new System.EventHandler(button2_Click);button1.Location = new System.Drawing.Point(88, 208);button1.BackColor =(System.Drawing.Color)System.Drawing.Color.FromARGB((byte)255, (byte)128, (byte)128);button1.Size = new System.Drawing.Size(152, 32);button1.TabIndex = 1;button1.Text = "Load character";button2.Location = new System.Drawing.Point(120, 240);button2.BackColor =(System.Drawing.Color)System.Drawing.Color.FromARGB((byte)255, (byte)128, (byte)128);button2.Size = new System.Drawing.Size(96, 24);button2.TabIndex = 2;button2.Text = "SPEAK";textBox1.Location = new System.Drawing.Point(48, 8);textBox1.Text = " ";textBox1.Multiline = true;textBox1.TabIndex = 0;textBox1.Size = new System.Drawing.Size(248, 200);textBox1.BackColor =(System.Drawing.Color)System.Drawing.Color.FromARGB((byte)255, (byte)128, (byte)128);this.Text = "MSAGENT DEMO";this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);this.WindowState = System.WinForms.FormWindowState.Maximized;this.BackColor =(System.Drawing.Color)System.Drawing.Color.FromARGB((byte)255, (byte)192, (byte)192);this.ClientSize = new System.Drawing.Size(344, 301);this.Controls.Add(button2);this.Controls.Add(button1);this.Controls.Add(textBox1);this.Controls.Add(AxAgent);button1.Click += new System.EventHandler(button1_Click);AxAgent.EndInit();}protected void button2_Click(object sender, System.EventArgs e){if(textBox1.Text.Length == 0)return;Character.Speak(textBox1.Text, null);}protected void button1_Click(object sender, System.EventArgs e){OpenFileDialog openFileDialog = new OpenFileDialog();openFileDialog.AddExtension = true;openFileDialog.Filter = "Microsoft Agent Characters (*.acs)|*.acs";openFileDialog.FilterIndex = 1 ;openFileDialog.RestoreDirectory = true ;if(openFileDialog.ShowDialog() != DialogResult.OK)return;try { AxAgent.Characters.Unload("CharacterID"); }catch { }AxAgent.Characters.Load("CharacterID", (object)openFileDialog.FileName);Character = AxAgent.Characters["CharacterID"];Character.LanguageID = 0x409;Character.Show(null);Character.Play ("announce");Character.Speak ("welcome you sir",null);}}
输出:
图2
图3
结束语:
微软的Agent API提供了支持动画角色显示的服务,被配置为OLE Automation(COM)服务器时,它能够使多个被称为客户或客户端应用软件的应用程序同时托管或使用其动画、输入、输出服务。