K
Karonshmily
Unregistered / Unconfirmed
GUEST, unregistred user!
本人想调用Office里的助手,但是只找到以下VB的资料;
我想知道在Delphi里如何调用Agent的,看了msdn看到一头雾水(:
Agent 控件的初始化
先 把Microsoft Agent 控件 添 加 到VB 的 控 制 工 具 条 上, 并 在 用 户的Form 上 绘 制 该 控 件( 在 下 述 例 子 中, 其Name 属 性 设 为MyAgent)。 下 面 的 代 码 调 用IAgentCtlCharacters::Load() 方 法 装 入 一 个 动 画 人 物 的 数 据, 调 用IAgentCtlCharacter::Show()/Hide() 方 法 来 显 示/ 隐 藏 动 画 人 物。
Const DATAPATH = "c:/agent/"
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
Agent控件的方法:
初始化完成后就可以开始用了。Agent的主要方法有:
Play <表情>,设定动画人物的表情,其后参数是一个String,具体表情参见下表:
表情 返回表情 描述
Acknowledge 没有 点头
Announce AnnounceReturn 举手
Blink 没有 眨眼睛
Confused ConfusedReturn 摸头
Congratulate CongratulateReturn 竖大拇指
Decline DeclineReturn 举手摇头
DontRecognize DontRecognizeReturn 举着手听
Explain ExplainReturn 伸开双手
GetAttention GetAttentionReturn 摇手臂
GlanceDown 没有 向下扫一眼
GlanceLeft 没有 向左扫一眼
GlanceRight 没有 向右扫一眼
GlanceUp 没有 向上扫一眼
Greet GreetReturn 鞠躬
Hide 没有 消失
Idle1_1 没有 歇口气
Idle2_2 没有 读
Idle2_3 没有 写
Idle3_1 Idle3_1Return 睡着
Idle3_2 没有 打呵欠
LookDown 没有 向下看
LookDownBlink 没有 眨眼睛向下看
MoveDown MoveDownReturn 飞下来
MoveLeft MoveLeftReturn 飞向左
Pleased PleasedReturn 握手和笑
Processing ProcessingReturn 旋转(循环)
Read 没有 拿出纸并阅读
ReadContinued 没有 继续阅读
Reading ReadingReturn 阅读(循环)
RestPose 没有 正常状态
Sad SadReturn 伤心的
Searching SearchingReturn 查找(循环)
Show 没有 显示
Suggest SuggestReturn 显示一个灯泡
Surprised SurprisedReturn 惊讶的
Think ThinkReturn 摸着下巴向上看
Wave WaveReturn 摇手
Write 没有 拿出纸并写
注:如果您使用了一个循环方法,在使用其它方法之前,您必须用 Interrupt方法来停止它,例如:
' 把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
Speak <说话内容〉,让动画人物说话,如果有语音合成部件,将会在显示的同时也输出声音。
Hide,隐藏动画人物。
MoveTo <x,y,speed>,在屏幕上移动动画人物。
Wait <Request as object>,等待直到Request结束,该方法可使各部件紧凑的运行,同时也保证不冲突,在多个动画人物同时工作时比较有用。
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
我想知道在Delphi里如何调用Agent的,看了msdn看到一头雾水(:
Agent 控件的初始化
先 把Microsoft Agent 控件 添 加 到VB 的 控 制 工 具 条 上, 并 在 用 户的Form 上 绘 制 该 控 件( 在 下 述 例 子 中, 其Name 属 性 设 为MyAgent)。 下 面 的 代 码 调 用IAgentCtlCharacters::Load() 方 法 装 入 一 个 动 画 人 物 的 数 据, 调 用IAgentCtlCharacter::Show()/Hide() 方 法 来 显 示/ 隐 藏 动 画 人 物。
Const DATAPATH = "c:/agent/"
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
Agent控件的方法:
初始化完成后就可以开始用了。Agent的主要方法有:
Play <表情>,设定动画人物的表情,其后参数是一个String,具体表情参见下表:
表情 返回表情 描述
Acknowledge 没有 点头
Announce AnnounceReturn 举手
Blink 没有 眨眼睛
Confused ConfusedReturn 摸头
Congratulate CongratulateReturn 竖大拇指
Decline DeclineReturn 举手摇头
DontRecognize DontRecognizeReturn 举着手听
Explain ExplainReturn 伸开双手
GetAttention GetAttentionReturn 摇手臂
GlanceDown 没有 向下扫一眼
GlanceLeft 没有 向左扫一眼
GlanceRight 没有 向右扫一眼
GlanceUp 没有 向上扫一眼
Greet GreetReturn 鞠躬
Hide 没有 消失
Idle1_1 没有 歇口气
Idle2_2 没有 读
Idle2_3 没有 写
Idle3_1 Idle3_1Return 睡着
Idle3_2 没有 打呵欠
LookDown 没有 向下看
LookDownBlink 没有 眨眼睛向下看
MoveDown MoveDownReturn 飞下来
MoveLeft MoveLeftReturn 飞向左
Pleased PleasedReturn 握手和笑
Processing ProcessingReturn 旋转(循环)
Read 没有 拿出纸并阅读
ReadContinued 没有 继续阅读
Reading ReadingReturn 阅读(循环)
RestPose 没有 正常状态
Sad SadReturn 伤心的
Searching SearchingReturn 查找(循环)
Show 没有 显示
Suggest SuggestReturn 显示一个灯泡
Surprised SurprisedReturn 惊讶的
Think ThinkReturn 摸着下巴向上看
Wave WaveReturn 摇手
Write 没有 拿出纸并写
注:如果您使用了一个循环方法,在使用其它方法之前,您必须用 Interrupt方法来停止它,例如:
' 把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
Speak <说话内容〉,让动画人物说话,如果有语音合成部件,将会在显示的同时也输出声音。
Hide,隐藏动画人物。
MoveTo <x,y,speed>,在屏幕上移动动画人物。
Wait <Request as object>,等待直到Request结束,该方法可使各部件紧凑的运行,同时也保证不冲突,在多个动画人物同时工作时比较有用。
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