.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所示:
弹出【自定义工具箱】对话框,选择其中的【COM组件】页面中,在【名称】栏中选择【Microsoft Agent Control 2.0】,具体如图02所示:
单击【确定】按钮,则在【工具箱】的【Windows组件】组件栏最后中,新增了一个MsAgent组件,具体如图03所示:
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所示:
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 ( TextB