use MSAgent in C#

查资料的时候突然看到 MSAgent 编程,找了些资料动手写了几行代码。

如果没有 MSAgent runtime 或者 SDK 的话,可以去 www.microsoft.com 下载,如果用 VC++, 则需要下载两个头文件。

创建 .net 项目以后,添加一个引用,选择 COM 页,然后选择 Microsoft Agent Server 2.0 。并在需要使用 Agent 的地方引用 AgentServerObject 的名字空间。

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using AgentServerObjects;

using System.Threading;

namespace HelloAgent

{

///

1<summary>
2
3///  Form1  的摘要说明。 
4
5///  </summary>

public class Form1 : System.Windows.Forms.Form

{

private System.Windows.Forms.Button btnDelegate;

private AgentServer agentServer = null ;

private IAgentEx agentEx = null ;

private IAgentCharacterEx characterEx = null ;

private IAgentNotifySink sink = null ;

private int dwCharID = 0;

private int dwReqID = 0;

private int dwSinkID = 0;

private string strCharName = "C:\\WINDOWS\\msagent\\chars\\merlin.acs";

///

1<summary>
2
3///  必需的设计器变量。 
4
5///  </summary>

private System.ComponentModel.Container components = null ;

public Form1()

{

//

// Windows 窗体设计器支持所必需的

//

InitializeComponent();

//

// TODO: 在 InitializeComponent 调用后添加任何构造函数代码

//

}

///

1<summary>
2
3///  清理所有正在使用的资源。 
4
5///  </summary>

protected override void Dispose( bool disposing )

{

if ( disposing )

{

if (components != null )

{

components.Dispose();

}

}

base .Dispose( disposing );

}

#region Windows 窗体设计器生成的代码

///

1<summary>
2
3///  设计器支持所需的方法  \-  不要使用代码编辑器修改 
4
5///  此方法的内容。 
6
7///  </summary>

private void InitializeComponent()

{

this .btnDelegate = new System.Windows.Forms.Button();

this .SuspendLayout();

//

// btnDelegate

//

this .btnDelegate.Location = new System.Drawing.Point(96, 32);

this .btnDelegate.Name = "btnDelegate";

this .btnDelegate.TabIndex = 0;

this .btnDelegate.Text = "delegate";

this .btnDelegate.Click += new System.EventHandler( this .btnDelegate_Click);

//

// Form1

//

this .AutoScaleBaseSize = new System.Drawing.Size(6, 14);

this .ClientSize = new System.Drawing.Size(292, 273);

this .Controls.Add( this .btnDelegate);

this .Name = "Form1";

this .Text = "Form1";

this .Load += new System.EventHandler( this .Form1_Load);

this .ResumeLayout( false );

}

#endregion

///

1<summary>
2
3///  应用程序的主入口点。 
4
5///  </summary>

[STAThread]

static void Main ()

{

Application.Run( new Form1());

}

private void InitAgent()

{

agentServer = new AgentServerObjects.AgentServerClass();

if ( agentServer == null )

{

MessageBox.Show( "Agent 初始化失败 " );

}

agentEx = (IAgentEx)agentServer;

agentEx.Load(strCharName, out dwCharID, out dwReqID);

agentEx.GetCharacterEx(dwCharID, out characterEx);

characterEx.Show(100, out dwReqID);

characterEx.Speak("Hello", null , out dwReqID);

string strName = "";

characterEx.GetName( out strName);

characterEx.Speak("My name is " + strName, null , out dwReqID);

sink = new AgentEvent( new SpeakDelegate(SpeakSomething) );

agentEx.Register(sink, out dwSinkID);

}

private void Form1_Load( object sender, System.EventArgs e)

{

InitAgent();

}

public delegate void SpeakDelegate( string str);

public void SpeakSomething( string str)

{

if (InvokeRequired)

{

BeginInvoke( new SpeakDelegate( SpeakSomething ), new object []{str});

return ;

}

characterEx.Wait(1000, out dwReqID);

Thread.Sleep(1000);

characterEx.Speak(str, null , out dwReqID);

}

private void ThreadProc()

{

SpeakSomething("Hello,this is use delegate.");

}

private void btnDelegate_Click( object sender, System.EventArgs e)

{

Thread thread = new Thread( new ThreadStart(ThreadProc) );

thread.IsBackground = true ;

thread.Start();

}

}

<SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 新

Published At
Categories with Web编程
Tagged with
comments powered by Disqus