Visual Basic .NET中操作MsAgent

发表于:2007-07-01来源:作者:点击数: 标签:
.Net FrameWork SDK虽然推出了1.0正式版(版本号3705),但要用它来接管对计算机的所有操作,还不能完全实现,在用Visual Basic .Net编写应用程序的时候,很多功能的实现,往往是把.Net FrameWork SDK中的类库和Windows平台中现有的的API函数、COM组件组合在


  .Net FrameWork SDK虽然推出了1.0正式版(版本号3705),但要用它来接管对计算机的所有操作,还不能完全实现,在用Visual Basic .Net编写应用程序的时候,很多功能的实现,往往是把.Net FrameWork SDK中的类库和Windows平台中现有的的API函数、COM组件组合在一起使用。虽然这有违背微软推出Visual Basic .Net的目的,那就是开发跨平台的应用程序。但在目前.Net FrameWork SDK并没有极大丰富的情况下,这种实现方式是最简洁、最实用的。微软有可能在下一个版本的.Net FrameWork SDK中文版中将加入类似现有MsAgent的类库,并且这些类库比现有的MsAgent有一个最大的优点,就是加入了中文的Text-To-Speech引擎,也就是说能够说中文了。

  Visual Basic .Net目前操作MsAgent使用的COM组件名称是" Microsoft Agent Control 2.0"。这个COM组件并没有随着Windows系统一起发布,必须要下载、安装这个组件。"http://www.microsoft.com/msagent/downloads.htm"是微软提供的MsAgent组件的下载地址。要保证Visual Basic .Net能够成功操作MsAgent,必须要下载并安装四个程序,具体如下:

  1、 微软MsAgent核心组件(Microsoft Agent core components),如果你的机器是Windwos Me、Windows 2000、和Windows XP,那么就没有必要下载并安装这个核心组件了,因为它已经随着操作系统一起发布了。

  2、 语言组件,虽然微软在下载地址的选择框中提供了简体中文的语言组件下载,但MsAgent中的精灵依然不能说中文,因为微软没有提供Text-To-Speech的中文引擎。不过读者可以在选择框中选择"Simplified Chinese",然后下载并安装。

  3、 MsAgent中的Agent精灵。在当前地址中提供了四种精灵,分别是吉利(Genie)、莫林(MerLin)、罗比(Bobby)和彼得(Peedy)。这四种精灵都有不同的造型,不同的表情。当然如果你认为微软提供的这些精灵还不能满足你的要求,你可以通过微软当前地址提供的精灵编辑工具制造自己的精灵。为了保证下面程序正确运行,必须下载并安装全部四个精灵。

  4、 Text-To-Speech引擎。这是精灵发声的引擎,正是由于没有提供发出中文的Text-To-Speech引擎,才导致精灵无法说中文。如果你是法国人,想让精灵说出法文,必须保证在第二步中语言组件中选择"French",并且在Text-To-Speech引擎中也选择"French",当然你要精灵说的文本也应该用法文来书写。在下面的程序中,精灵要说的是英文,所以下载安装Text-To-Speech英文引擎就可以了,读者可以根据自己的爱好选择是"American English"(美国英语),还是"British Englist"(英国英语)。

  在上述的四个程序都成功下载并安装以后,下面将结合一个具体的示例来介绍Visual Basic .Net操作MsAgent的方法。

  一、 本文中程序设计、调试、运行的软件环境:

  (1).微软公司视窗2000服务器

  (2).Visual Studio .Net正式版,.Net FrameWork SDK版本号3705

  二、 Visual Basic .Net操作MsAgent的具体实现步骤

  由于" Microsoft Agent Control 2.0"是一个COM组件,COM组件是非托管代码文件,
要在Visual Basic .Net中使用COM组件,必须实现其从非托管代码组件到托管代码组件的转换。.Net框架把这种转换过程叫"互操作"。在Visual Basic .Net集成开发环境下,实现"互操作"是非常容易的。在互操作完成之后,就可以像使用其他组件那样使用转换后的MsAgent组件了。下面通过一个示例来具体介绍一下,Visual Basic .Net集成开发环境是如何对COM组件进行互操作,和转换后的MsAgent组件的使用方法。

  1、 启动Visual Studio .Net。

  2、 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。

  3、 将【项目类型】设置为【Visual Basic项目】。

  4、 将【模板】设置为【Windows应用程序】。

  5、 在【名称】文本框中输入【VB.NET使用MsAgent】。

  6、 在【位置】的文本框中输入【E:\VS.NET项目】,然后单击【确定】按钮,这样VB.NET使用MsAgent的项目文件就产生了。

  7、 把当前窗口切换到【Form1.vb [设计]】后,选择【工具箱】|【Windows窗体】,点击鼠标右键,在弹出的菜单中选择【自定义工具箱】菜单。具体如图01所示:


图01:自定义工具箱

  弹出【自定义工具箱】对话框,选择其中的【COM组件】页面中,在【名称】栏中选择【Microsoft Agent Control 2.0】,具体如图02所示:


图02:Visual Basic .Net操作MsAgent的【添加引用】对话框

  单击【确定】按钮,则在【工具箱】的【Windows组件】组件栏最后中,新增了一个MsAgent组件,具体如图03所示:


图03:成功引入MsAgent组件
  8、 切换到【Form1.vb [设计]】窗口,并从【工具箱】中的【Windows窗体组件】中往窗体中拖入下列组件,并执行相应操作:

  一个ComboBox组件,用以让读者选择要出现的精灵名称。

  一个TextBox组件,用以输入精灵朗读的文字,由于程序中设定的精灵朗诵的语言为英语,所以这里输入的是英文单词。

  一个MsAgent组件

  二个Label组件

  四个Button组件,名称分别是Button1、Button2、Button3和Button4,用以实现和MsAgent组件相关的一些功能。并在这些组件加入到窗体后,分别在【Form1.vb [设计]】窗口中双击这四个组件,这样Visual Basic .Net集成开发环境会自动产生这四个组件的Click事件对应的处理代码。

  9、 把Visual Basic .Net集成开发环境的当前窗口切换到Form1.vb的代码编辑窗口,并在Form1.vb代码中的InitializeComponent过程之前加入下列代码:

Dim PlayChar As AgentObjects.IAgentCtlCharacterEx

  10. 并用下列的代码替换Form1.vb中的由系统自动产生的InitializeComponent过程的代码,下列代码的功能是初始化上述组件:

  界面设计和功能实现的前期准备工作就完成了,具体如图04所示:


图04:Visual Basic .Net操作MsAgent程序的设计界面

  10. Visual Basic .Net中实现装入精灵。

  当程序中装入精灵后,精灵就会显示在Windows的状态栏中,具体思路是把各个精灵先强制转换成一个Object的对象,精灵对应的扩展名是"acs",然后调用MsAgent组件的"Load"方法把对象加入就可以了,并根据装入的精灵类型来初始化上面定义的一个AgentObjects.IagentCtlCharacterEx接口的实例,后面对精灵的操作就是通过这个实例中方法来实现的。具体实现方法是用下列的代码替换Form1.vb中的Button1的Click事件的处理代码:

Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs )   Handles Button1.Click
@#根据使用者的不同选择,装入不同的精灵类型
 Select Case ComboBox1.Text
  Case "Genie"
   Dim myObject As Object = CType ( "genie.acs" , Object )
   @#装入吉利
   AxAgent1.Characters.Load ( "genie" , myObject )
   PlayChar = AxAgent1.Characters ( "genie" )
  Case "MerLin"
   Dim myObject As Object = CType ( "merlin.acs" , Object )
   @#装入莫林
   AxAgent1.Characters.Load ( "merlin" , myObject )
   PlayChar = AxAgent1.Characters ( "merlin" )
  Case "Robby"
   Dim myObject As Object = CType ( "robby.acs" , Object )
   @#装入罗比
   AxAgent1.Characters.Load ( "robby" , myObject )
   PlayChar = AxAgent1.Characters ( "robby" )
  Case "Peedy"
   Dim myObject As Object = CType ( "peedy.acs" , Object )
   @#装入彼得
   AxAgent1.Characters.Load ( "peedy" , myObject )
   PlayChar = AxAgent1.Characters ( "peedy" )
 End Select
 Button1.Enabled = False
 Button2.Enabled = True
 Button3.Enabled = True 
 Button4.Enabled = True
End Sub

  11. 在Visual Basic .Net中实现精灵朗诵文字动作:

  精灵实现朗诵文字是通过AgentObjects.IagentCtlCharacterEx接口中的Speak方法,在调用Speak方法的时候,必须注意二点:其一,Speak方法有二个参数,第一个参数就是精灵朗诵的内容,在调用Speak方法时,必须保证朗诵的内容不为空;其二,在调用Speak方法朗诵之前,必须先调用其Show方法,把精灵显示出来,否则虽然调用了Speak方法,由于没有先显示精灵,也依然无法通过精灵来朗诵。具体的实现方法是用下列代码替换Form1.vb中的Button2的Click事件对应的处理代码:

Private Sub Button2_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button2.Click
 PlayChar.LanguageID = 1033
 @#设定精灵朗读的语言种类对于地ID,1033是设定为英文
 PlayChar.Show ( False )
 @#显示精灵
 If TextBox1.Text.Length <> 0 Then
 @#判断TextBox1中是否有内容
  PlayChar.Speak ( TextBox1.Text , "" )
  @#开始朗诵TextBox1中的内容
  PlayChar.Hide ( True )
 End If
End Sub

  12. 在Visual Basic .Net中实现精灵的思考动作:

  精灵思考动作和朗诵动作非常类似,最大区别是思考动作没有发出声音,而朗诵动作是有声的。实现精灵思考使用的是AgentObjects.IagentCtlCharacterEx接口中Think方法,Think方法后面有一个参数,就是精灵思考的内容。在调用Think方法的时候,所要注意的问题和Speak方法一样,读者可参阅上面调用Speak方法要注意的二个问题。具体的实现方法是用下列代码替换Form1.vb中的Button3的Click事件对应的代码:

Private Sub Button3_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button3.Click
 PlayChar.LanguageID = 1033
 @#设定精灵朗读的语言种类对于地ID,1033是设定为英文
 PlayChar.Show ( False )
 @#显示精灵
 If TextBox1.Text.Length <> 0 Then
 @#判断TextBox1中是否有内容
  PlayChar.Think ( TextBox1.Text )
  PlayChar.Hide ( True )
 End If
End Sub

  13. 卸载装入的精灵。

  由于本程序可以在一个程序中使用多个精灵,但由于变量只设定了一个,所以在使用另外一个精灵的之前,必须先卸载掉已经装入的精灵,否则就会程序异常。卸载装入的精灵使用的是Unload方法,Unload方法后面是已经装入的精灵对应的名称字符串。具体实现方法是用下列代码替换Button4的Click事件对应的处理代码:

Private Sub Button4_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button4.Click
 Select Case ComboBox1.Text
  Case "Genie"
   AxAgent1.Characters.Unload ( "genie" )
  Case "MerLin"
   AxAgent1.Characters.Unload ( "merlin" )
  Case "Robby"
   AxAgent1.Characters.Unload ( "robby" )
  Case "Peedy"
   AxAgent1.Characters.Unload ( "peedy" )
 End Select
 Button1.Enabled = True
 Button2.Enabled = False
 Button3.Enabled = False
 Button4.Enabled = False
End Sub

  在上述步骤都正确完成,并保持后,编写Visual Baisc .Net中操作MsAgent程序的全部工作就完成了。此时单击快捷键【F5】就可以运行程序了,在选择框中选择要显示的精灵类别,单击程序中的【装入】按钮,在【输入提示内容】文本框中输入要精灵提示的内容后,单击【朗诵】按钮,此时精灵就会把【输入提示内容】文本框中的内容逐个朗诵一遍,单击【思考】按钮,此时精灵就会把【输入提示内容】文本框中内容逐个显示一下,但并不朗诵。如果你想要换一个精灵来朗诵、思考【输入提示内容】文本框中的内容,请先单击【卸载】按钮,然后在【选择精灵】选择框中选择精灵,在重复上面的操作就可以了。图05和图06是程序分别选择不同精灵的运行界面:


图05:Visual Basic .Net操作MsAgent程序选择Genie精灵时的运行界面


图06:Visual Basic .Net操作MsAgent程序选择MerLin精灵时的运行界面

  三、 总结:

  本文全面介绍在Visual Basic .Net中操作MsAgent的具体的实现方法,由于篇幅所限,并没有完全介绍MsAgent中的精灵的全部动作,这些动作如"Wait"、"Listen"、"Move to"等,但是本文介绍的Speek,Show,Hide,Think动作是精灵使用的最为常用的动作,并且那些没有介绍的动作的具体实现方法和本文介绍的动作实现方法相类似,读者如使用本文没有介绍的动作时,可参照本文介绍的Speek,Show,Hide,Think动作的地实现方法,相信会对你有很大启发的


原文转自:http://www.ltesting.net