创建酷炫的 Agent 用户界面






4.20/5 (12投票s)
2001年5月23日
4分钟阅读

258063

3202
本文介绍了如何使用 Microsoft Agent 创建显示角色的用户界面,类似于 Office 2000 中的 Office 助手。
目录
- 概述
- 要求
- 将 Microsoft Agent 与 .NET Framework 结合使用
- 编程代理
- Hello World 示例
- 使用语音识别
- 交互式 Hello World 示例
- AgentDemo 应用程序
- 关于您的应用程序的说明
概述
Microsoft Office 2000 使用动画角色,称为 Office 助手,来帮助用户并提供协助。通过 Microsoft Agent,您可以将此类角色添加到您自己的应用程序中。您甚至可以使用 Office 助手本身,例如 The Genius 或 F1。专为 Agent 设计的角色可以执行多种任务,除了显示各种动画外,还可以进行语音合成和识别。
要求
要能够使用此技术,您必须拥有
- Microsoft Agent 核心组件。
- Microsoft Agent 角色 – Genie、Merlin、Robby 和 Peedy。
- 至少针对美国英语的 Lernout and Hauspie 文本转语音引擎。
- Microsoft Speech API 4.0a 运行时。
- Microsoft 语音识别引擎。
所有这些组件都可以在 http://microsoft.com/msagent/downloads.htm 找到。此外,要使用 Microsoft Office 角色,您必须拥有 Office 2000。Office 97 角色与 Agent 不兼容。
将 Microsoft Agent 与 .NET Framework 结合使用
Microsoft Agent 作为 ActiveX 控件 DLL 提供。要在 .NET 中使用它,您可以使用 .NET Framework SDK 附带的 AxImp.exe 工具。创建一个您想保留导入库的文件夹,然后使用命令
aximp %systemroot%\msagent\agentctl.dll
下载中包含的 makefile 会为您完成此操作。此命令应创建两个文件:AxAgentObjects.dll 和 AgentObjects.dll。现在您可以准备在 .NET 中使用 Agent 了。
编程代理
Agent 编程很容易,因为它完全依赖于 COM,我们不必处理 PInvoke 或其他类似的东西。使用 Agent 的第一步是将 AxAgentObjects.dll 中的 Agent ActiveX 控件添加到您的项目中。将其放在窗体上的任何位置;运行时它是不可见的。接下来,您应该在类中添加一个类型为 AgentObjects.IAgentCtlCharacterEx(来自 AgentObjects.dll)的成员变量。您应该将 AgentObjects 命名空间导入到您的应用程序中;这会简化许多任务。本质上,您至少必须
- 加载您想要的字符,并提供一个描述性名称来引用它。在 Hello World 示例中,这通过以下行实现:AxAgent.Characters.Load("Genie", (object)"GENIE.ACS");
- 将您的字符变量设置为您刚刚加载的字符。在 Hello World 示例中,这通过以下行实现:Character = AxAgent.Characters["Genie"];
- 设置要使用的正确语言Character.LanguageID = 0x409;将语言设置为美国英语。
- 显示角色Character.Show(null);
这些步骤将简单地加载并显示角色。
Hello World 示例
必需的 Hello World 示例需要 Genie 角色。该示例只是加载角色并显示他。您还可以让他说些什么。要让角色说话,请调用角色的 speak 方法,如下所示:
if(TextToSpeak.Text.Length == 0) // Don't speak a zero-length return; // string. //Make the character speak. Character.Speak(TextToSpeak.Text, null);
如您所见,使用 Agent 非常简单。
使用语音识别
与 Office 助手不同,您可以让 Agent 角色说话,还可以响应语音命令。您添加的任何命令也将可以在角色的上下文菜单中找到。默认情况下,只有当您按住滚动锁定键时,语音识别才会被启用。您只需要向角色对象的 Commands 集合添加新命令。然后,您必须为 Agent 控件的 Command 事件添加一个事件处理程序。一个装箱的 IAgentCtlUserInput 对象作为参数提供给事件处理程序。您可以通过 IAgentCtlUserInput 对象的 Name 属性访问识别出的命令。
交互式 Hello World 示例
交互式 Hello World 示例演示了基本的语音识别以及播放动画。首先,加载并初始化控件和角色(Robby),然后添加两个命令:
protected void LoadButton_Click(object sender, System.EventArgs e) { // Load the Robby character. AxAgent.Characters.Load("Robby", (object)"ROBBY.ACS"); Character = AxAgent.Characters["Robby"]; StatusLabel.Text = Character.Name + " loaded."; // Set the language to US English. Character.LanguageID = 0x409; // Display the character. Character.Show(null); LoadButton.Enabled = false; // Display name for the commands. Character.Commands.Caption = "Hello World"; Character.Commands.Add("Hello", // Command name (object)"Say Hello", // Display name (object)"([say](hello | hi) | good (day | morning | evening))", // SR String (object)true, // Enabled (object)true); // Visible Character.Commands.Add("Goodbye", // Command name (object)"Goodbye", // Display name (object)"(bye | goodbye | exit | close | quit)", // SR String (object)true, // Enabled (object)true); // Visible PromptLabel.Visible = true; }
语音识别字符串提供了用户可以说的几个选项;例如,说“goodbye”、“bye”和“close”具有相同的效果。在所有情况下,命令名称都会传递给事件处理程序,因此您不必考虑识别出的字符串的各种变化。在事件处理程序中,会进行一个命令测试:
protected void AxAgent_Command(object sender, AxAgentObjects._AgentEvents_CommandEvent e) { IAgentCtlUserInput ui; ui = (IAgentCtlUserInput)e.userInput; if(ui.Name == "Hello") { Character.Speak((object)"Hello. My name is Robby." + " Pleased to meet you.", null); PromptLabel.Text = "Say goodbye to dismiss Robby."; } if(ui.Name == "Goodbye") { Character.Speak((object)"It was nice talking to" + " you. Goodbye.", null); Character.Play("Wave"); Character.Play("Hide"); } }
使用 character 对象的方法 play 来播放动画。
AgentDemo 应用程序
如果您查看 Microsoft Agent 网站,您会看到一个枚举角色中所有动画的 Visual Basic 示例。AgentDemo 应用程序也做同样的事情,只是用 C# 语言。您可以加载所有 Agent 和 Microsoft Office 角色并查看动画列表。这是截图(加载了 Office 2000 F1 角色):
这个应用程序现在有点冗余,因为 Microsoft 随 Beta 2 提供了类似的示例。我只是将我为 Beta 1 所做的转换成了 Beta 2 代码。
关于您的应用程序的说明
许多人认为 Office 助手很烦人。您必须注意不要让您的角色令人烦恼,而是要乐于助人,并始终提供一个易于访问的选项来关闭它们。
历史
2002年3月15日 - 更新了源文件。