• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
VB调用Microsoft
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
VB调用Microsoft Agent控件与电脑交谈
软件发布 VB调用Microsoft Agent控件与电脑交谈
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 文章首页 >> 编程技术 >> VB & VB.NET教程 >> VB调用Microsoft Agent控件与电脑交谈

VB调用Microsoft Agent控件与电脑交谈

添加时间: 2006-2-16 8:58:49  作者: VB教程  阅读次数:181   来源: http://www.d9soft.com

        Microsoft Agent 控 件 比Office 中 的 助 手 更 进 了 一 步, 它 提 供 的 动 画 人 物 不 仅 有 生 动、 有 趣 的 动 作, 而 且 还 能 通 过 声 卡、 麦 克 风 与 用 户 进 行 交 谈, 这 些 功 能 使 计 算 机 更 具 人 性 魅 力, 其 应 用 前 途 相 当 广 泛。Microsoft Agent 控 件 的 内 部 机 制 很 复 杂, 但 用VB 来 操 纵 它 却 是 异 乎 寻 常 的 方 便, 本 文 将 介 绍VB 6.0 调 用Microsoft Agent 控 件 的 基 本 方 法。

1. 安 装Microsoft Agent 控 件
   (1) 首 先 要 安 装Microsoft Agent 的 核 心 组 件 msagent.exe
   (2) 接 着 要 安 装Lernout & Hauspie TruVoice Text-to-Speech Engine( 完 成 从 文 字 合 成 语 音 的 工 作) cgram.exe。

   (3) 最 后 要 安 装 Microsoft Command and Control Speech Engine( 提 供 语 音 识 别 功 能) Actcnc.exe。

   (4) 另 外 还 需 要Agnet 动 画 人 物 数 据 文 件, 在 本 文 中 使 用 了Genie.acs、Robby.acs 两 个 文 件。

   上 述 文 件 均 可 从 http://www.microsoft.com/workshop/prog/agent 下 载。

2. Microsoft Agent 控 件 的 初 始 化
   先 把Microsoft Agent 控 件 添 加 到VB 的 控 制 工 具 条 上, 并 在 用 户 的Form 上 绘 制 该 控 件( 在 下 述 例 子 中, 其Name 属 性 设 为MyAgent)。 下 面 的 代 码 调 用IAgentCtlCharacters::Load() 方 法 装 入 一 个 动 画 人 物 的 数 据, 调 用IAgentCtlCharacter::Show()/Hide() 方 法 来 显 示/ 隐 藏 动 画 人 物。
Const DATAPATH = "c:\"



Dim Genie As IAgentCtlCharacter

Dim Robby As IAgentCtlCharacter

Dim GenieRequest1, GenieRequest2 As IAgentCtlRequest

Dim RobbyRequest1 As IAgentCtlRequest



Private Sub Form_Load()

' 装 入 动 画 人 物 数 据, 其 中 第 一 个 参 数 为CharacterID

MyAgent.Characters.Load "Genie", DATAPATH & "Genie.acs"

MyAgent.Characters.Load "Robby", DATAPATH & "Robby.acs"



' 获 取 与CharacterID 相 对 应 的IAgentCtlCharacter 变 量

Set Genie = MyAgent.Characters("Genie")

Set Robby = MyAgent.Characters("Robby")



' 显 示/ 隐 藏 动 画 人 物

Genie.Show

Genie.Hide

End Sub


3. Microsoft Agent 控 件 的 动 画 编 程
   每 个 动 画 人 物 都 有 自 己 特 定 的 动 作, 例 如Genie 有 听、 看、 读、 写、 发 怒、 感 谢 等 数 十 种 动 画 形 态。 可 以 调 用IAgentCtlCharacter::play() 方 法 来 设 置 动 画 动 作。 为 了 在 多 个 动 画 人 物 之 间 协 调 它 们 的 动 作, 比 如 让Robby 等 待Genie 的 某 个 动 作 执 行 完 毕 后, 方 才 做 另 外 一 个 动 作, 这 时 可 采 用IAgentCtlCharacter::Wait() 方 法 来 实 现 同 步。 在 数 十 种 动 画 动 作 中 有 一 类 比 较 特 殊( 动 作 名 以"ing" 为 后 缀, 如"Searching"), 一 旦 执 行 便 循 环 播 放 一 段 动 画, 只 有 调 用IAgentCtlCharacter::Interrupt() 方 法 才 能 终 止。 示 例 代 码 如 下:


Private Sub Command1_Click()

Genie.Show



' 执 行 名 为"Suggest" 的 动 作

Genie.Play "Suggest"

' 把Genie 移 动 到 座 标(200,200) 处,

用GenieRequest1 来 标 识 该 动 作 请 求

Set GenieRequest1 = Genie.MoveTo(200, 200)

' 执 行 名 为"Searching" 的 循 环 动 画 动 作,

用GenieRequest2 来 标 识 该 动 作 请 求



Set GenieRequest2 = Genie.Play("Searching")



' Robby 等 待Genie 的MoveTo 方 法 执 行 完 毕, 方 才 显 示

Robby.Wait GenieRequest1

Robby.Show

Robby.Play "Suggest"

Robby.Play "read"

Robby.Play "Congratulate"



' 由Robby 来 终 止Genie 的 循 环 动 画 动 作

Robby.Interrupt GenieRequest2

Genie.Play "write"

Genie.Hide

Robby.Hide

End Sub


4. Microsoft Agent 控 件 的 语 音 合 成 功 能
   Microsoft Agent 控 件 支 持 英 语 的 语 音 合 成 功 能, 只 需 输 入 句 子 的 文 字, 便 会 生 成 该 句 子 的 语 音 信 号 并 通 过 声 卡、 音 箱 播 放 出 来。 语 音 合 成 功 能 通 过 调 用IAgentCtlCharacter::Speak() 方 法 来 实 现。 输 出 中 文 时 不 能 用 上 述 方 法, 只 能 用WAV 文 件 代 替, 给Speak() 方 法 的 第 一 个 参 数 传 递 文 字 气 球 中 包 含 的 文 字, 给 第 二 个 参 数 传 递 一 个WAV 文 件 路 径。 同 样 为 同 步 多 个 动 画 人 物 的 语 音 输 出 也 必 须 使 用IAgentCtlCharacter::Wait() 方 法。 目 前Microsoft Agent 控 件 还 不 支 持 多 个 人 物 的 声 音 混 合 效 果。 具 体 实 现 代 码 如 下:


Private Sub Command2_Click()

Genie.MoveTo 100, 200

Genie.Show

Genie.Play "Greet"



' Speak() 方 法 的 第 一 个 参 数 即 为 需 进 行

语 音 合 成 的 句 子 文 字

Genie.Speak "I am Genie, your most humble and loyal servant."

Genie.Speak "Where is Robby?"

Set GenieRequest1 = Genie.Play("LookLeft")

' 等Genie 的"LookLeft" 执 行 以 后, 再 执 行Robby 的 动 作

Robby.Wait GenieRequest1

Robby.MoveTo 250, 200

Robby.Show

Robby.Play "Greet"

Robby.Speak "Sorry for the delay."

Set RobbyRequest1 =

Robby.Speak("Traffic is really busy today on the Information Superhighway.")



' 等Robby 讲 完 了,Genie 再 讲

Genie.Wait RobbyRequest1

Genie.Play "LookLeftReturn"

Genie.Speak "Welcome to the release of Microsoft Agent,

the new ActiveX technology that supports interactive characters"

' 输 出 中 文 语 音,

" 欢 迎 光 临" 的 中 文 语 音 包 含 在welcome.wav 中

Genie.Speak " 欢 迎 光 临", "c:\welcome.wav"

Genie.Hide

Robby.Hide

End Sub


5. Microsoft Agent 控 件 的 语 音 识 别 功 能
   Microsoft Agent 控 件 具 有 语 音 识 别 能 力, 用 户 可 以 向 动 画 人 物 发 出 语 音 命 令( 同 时 按 住Scroll Lock 键)。Microsoft Agent 控 件 为 每 个Agent 动 画 人 物 提 供 一 个 特 殊 物 命 令 窗 口, 用 以 显 示 该 动 画 人 物 能 够 接 受 的 所 有 语 音 命 令。 该 命 令 窗 口 中 的 命 令 不 能 用 鼠 标 或 键 盘 来 选 取, 只 能 通 过 语 音。 可 以 用IAgentComands::Add() 方 法 来 为 命 令 窗 口 添 加 自 定 义 命 令。 第 一 个 参 数 是 命 令 的 标 识 符ID, 第 二 个 参 数 是 该 命 令 在 命 令 窗 口 中 的 显 示 标 签, 第 三 个 参 数 是 该 命 令 对 应 的 语 音 识 别 句 子。 当 用 户 通 过 麦 克 风 向 动 画 人 物 发 出 命 令 时 会 激 发IAgent 的Command 事 件, 可 以 编 写 一 个 接 收Command 事 件 的 过 程 来 完 成 与 语 音 命 令 相 对 应 的 任 务。


Private Sub Command3_Click()

Static initialized As Boolean



' 添 加 自 定 义 命 令

If Not initialized Then

Genie.Commands.Add "Word", "Run Word", "word", True, True

Genie.Commands.Add "Time", "What time is it?", "What time is it?", True, True

Genie.Commands.Add "Bigger", "Bigger", "Bigger", True, True

Genie.Commands.Add "Smaller", "Smaller", "Smaller", True, True

initialized = True

End If

Genie.Show

Genie.Speak "Can I help you?"

End Sub



Private Sub MyAgent_Command(ByVal UserInput As Object)

Select Case UserInput.Name

Case "Time"

' 当 听 到"What time is it?" 后 回 答 当 前 时 间

Genie.Speak "The time is " & Time

Case "Word"

' 当 听 到"word" 后, 便 运 行MS Word

Genie.Speak "Yes,sir!"

Shell "d:\winword\winword.exe", vbNormalFocus

Case "Bigger"

' 当 听 到"bigger" 后,Genie 会 放 大

Genie.Width = Genie.Width * 1.5

Genie.Height = Genie.Height * 1.5

Case "Smaller"

' 当 听 到"samller" 后,Genie 会 缩 小

Genie.Width = Genie.Width / 1.5

Genie.Height = Genie.Height / 1.5

End Select

End Sub



/*////////////////////////////////////////////////////////////////////*/

/* 附 完 整 源 程 序 agent.frm */

VERSION 5.00

Object = "{F5BE8BC2-7DE6-11D0-91FE-00C04FD701A5}

#1.5#0"; "AGENTCTL.DLL"

Begin VB.Form Form1

Caption = "Form1"

ClientHeight = 3195

ClientLeft = 60

ClientTop = 345

ClientWidth = 4680

LinkTopic = "Form1"

ScaleHeight = 3195

ScaleWidth = 4680

StartUpPosition = 3 'Windows Default

Begin VB.CommandButton Command3

Caption = "Command3"

Height = 615

Left = 2880

TabIndex = 2

Top = 360

Width = 1095

End

Begin VB.CommandButton Command2

Caption = "Command2"

Height = 615

Left = 1320

TabIndex = 1

Top = 360

Width = 1095

End

Begin VB.CommandButton Command1

Caption = "Command1"

Height = 615

Left = 120

TabIndex = 0

Top = 360

Width = 855

End

Begin AgentObjectsCtl.Agent MyAgent

Left = 360

Top = 2520

End

End

Attribute VB_Name = "Form1"

Attribute VB_GlobalNameSpace = False

Attribute VB_Creatable = False

Attribute VB_PredeclaredId = True

Attribute VB_Exposed = False



Option Explicit



Const DATAPATH = "c:\"



Dim Genie As IAgentCtlCharacter

Dim Robby As IAgentCtlCharacter

Dim GenieRequest1, GenieRequest2 As IAgentCtlRequest

Dim RobbyRequest1 As IAgentCtlRequest



Private Sub Command1_Click()

Genie.Show

Genie.Play "Suggest"

Set GenieRequest1 = Genie.MoveTo(200, 200)

Set GenieRequest2 = Genie.Play("Searching")

Robby.Wait GenieRequest1

Robby.Show

Robby.Play "Suggest"

Robby.Play "read"

Robby.Play "Congratulate"

Robby.Interrupt GenieRequest2

Genie.Play "write"

Genie.Hide

Robby.Hide

End Sub



Private Sub Command2_Click()

Genie.MoveTo 100, 200

Genie.Show

Genie.Play "Greet"

Genie.Speak "I am Genie, your most humble and loyal servant."

Genie.Speak "Where is Robby?"

Set GenieRequest1 = Genie.Play("LookLeft")

Robby.Wait GenieRequest1

Robby.MoveTo 250, 200

Robby.Show

Robby.Play "Greet"

Robby.Speak "Sorry for the delay."

Set RobbyRequest1 = Robby.Speak

("Traffic is really busy today on the Information Superhighway.")

Genie.Wait RobbyRequest1

Genie.Play "LookLeftReturn"

Genie.Speak "Welcome to the release of Microsoft Agent, the new

ActiveX technology that supports interactive characters"

Genie.Speak " 欢 迎 光 临", "c:\welcome.wav"

Genie.Hide

Robby.Hide

End Sub



Private Sub Command3_Click()

Static initialized As Boolean



If Not initialized Then

Genie.Commands.Add "Word", "Run Word", "word", True, True

Genie.Commands.Add "Time", "What time is it?", "What time is it?", True, True

Genie.Commands.Add "Bigger", "Bigger", "Bigger", True, True

Genie.Commands.Add "Smaller", "Smaller", "Smaller", True, True

initialized = True

End If



Genie.Show

Genie.Speak "Can I help you?"

End Sub



Private Sub Form_Load()

MyAgent.Characters.Load "Genie", DATAPATH & "Genie.acs"

MyAgent.Characters.Load "Robby", DATAPATH & "Robby.acs"

Set Genie = MyAgent.Characters("Genie")

Set Robby = MyAgent.Characters("Robby")

Genie.Show

Genie.Hide

End Sub





Private Sub MyAgent_Command(ByVal UserInput As Object)

Select Case UserInput.Name

Case "Time"

Genie.Speak "The time is " & Time

Case "Word"

Genie.Speak "Yes,sir!"

Shell "d:\winword\winword.exe", vbNormalFocus

Case "Bigger"

Genie.Width = Genie.Width * 1.5

Genie.Height = Genie.Height * 1.5

Case "Smaller"

Genie.Width = Genie.Width / 1.5

Genie.Height = Genie.Height / 1.5

End Select

End Sub

 

上下文章:

 

上一篇文章: 如何在VB中终止Windows系统 下一篇文章: Visual Basic 的工程限制

相关文章:

  • 病毒猖獗,怎么打开电脑文件会较安全?
  • 从端口看电脑是否遭遇病毒或木马
  • 用组策略强化你的电脑安全性
  • 玩网吧电脑要注意的五条防护技巧
  • 暑期将至 注意给电脑防毒降温

相关软件:

  • 雨过天晴电脑保护系统 V1.0.060612
  • 诺顿电脑大师 2006 简体中文
  • COCO电脑监控系统 2008 企业版
  • Microsoft Excel档案简繁转换工具 V1.0
  • 新狐电脑传真(Faxnow) V2.6
  • 三耳电脑可视数字复读机 V6.05

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • C++程序设计之四书五经
  • VB入门教程之四
  • VB入门教程之三
  • VB入门教程之二
  • VB入门教程之一
  • 压缩被DBGIRD控件正在使用的MDB数...
  • 谈谈VB的数据库编程方式
  • 在VB中用DAO实现数据库编程
  • Data控件使用有密码的Access数据库
  • 用DAO或ADO正确访问Access 2000

VB & VB.NET教程阅读排行

  • VB入门教程之一
  • VB入门教程之二
  • VB入门教程之三
  • VB入门教程之四
  • 如何编写高质量的VB代码
  • 初学者必知:VB10个小编程
  • VB访问SQL Server数据库技术全揭密
  • 怎样在VB中控制Word?
  • 用DAO或ADO正确访问Access 2000
  • VB中列表框的使用技巧说明

编程技术阅读总排行

  • VB入门教程之一
  • Java连接数据库实例
  • 第二章 PowerBuilder 入门之创建新...
  • VC++之List Box/Check List Box控...
  • 第一章 什么是PowerBuilder
  • VC++ List Ctrl控件
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有