在Vs.net中使用MSN即时通讯软件(上)

作者:杨忠勋
专业:计算机软件开发及应用
语言能力:TOFEL633 GRE2140
Email:[email protected]

把 MSN 嵌入到 Vs.net 中使用?是不是听起来很奇妙?但这是真的,下面的步骤就逐步的教你如何将 MSN嵌入 到 Vs.net 中使用。

** 引用 (referrence) **

由于 Vs.net 中存在某个 bug ,在这里无法直接引用 Messenger ActiveX 组件。你需要手动修改由 _ TLBImp _ _ 生成的代码中的两个方法 _ ,然后重新编译 , 具体方法如下:

1 使用 _ Tlbimp.exe _ _ 生成一个 _ _ Messenger Interop _ _ 组件 _ _ _

_ _ tlbimp msmgs.exe /out:Messenger.dll ( 缺省路径: _ C:\Program Files\Messenger _ )

2 反汇编此 Interop 组件 , 然后将其保存为 IL 文件 :

ildasm /text Messenger.dll /out:Messenger.il

3 使用任一文本编辑器打开此 IL 文件,然后更改如下代码 ( 将类的 private 属性改为 public):

更改 . class private auto ansi sealed DMsgrObjectEvents_SinkHelper
为 . class public auto ansi sealed DMsgrObjectEvents_SinkHelper

更改 . class private auto ansi sealed DMsgrObjectEvents_EventProvider

为 . class public auto ansi sealed DMsgrObjectEvents_EventProvider

4 编译此 IL 文件

ilasm /dll Messenger.il

5 现在我们就可以在工程里引用编译后的 dll 文件了

** 创建外接程序 (creating an add-in) **

选择 新建项目 \ 其他项目 \ 扩展性项目 \Visual Studio .NET 外接程序,出现向导对话框。

1 选择“使用 Visual C# 创建外接程序”

2 选择使用此外接程序的开发环境,我两个都选择了。

3 给你的外接程序起个好听的名字。

4 根据你的爱好进行选择。

5 是否生成“帮助”菜单中的“关于”信息。

6 选择“完成”

** 创建工具窗口 **

我们需要把这个外接程序做成一个工具窗口。如何来做呢?我们可以使用微软提供的一个 在 .NET 中制作工具窗口 的例子。

1 引用由 VSUserControlHost 生成的 ActiveX 控件。

2 在此外接程序中的 Connect.cs 文件中的 OnConnection 方法中添加以下代码

1.       object objTemp = null;


2.     string guidstr = "{716238D9-8ED3-48aa-A7A0-A73CA6FDF1EF}";


3.      


4.     EnvDTE.Window windowToolWindow = 


5.         applicationObject.Windows.CreateToolWindow (


6.         addInInstance,


7.         "VSUserControlHost.VSUserControlHostCtl",


8.         "Messenger", guidstr, ref objTemp);


9.         


10.  windowToolWindow.Visible = true;


11.   


12.  VSUserControlHostLib.IVSUserControlHostCtl objControl =


13.      (VSUserControlHostLib.IVSUserControlHostCtl)objTemp;


14.      


15.  objControl.HostUserControl(


16.      System.Reflection.Assembly.GetExecutingAssembly().Location,"MsgAddin.HostUserControl");

** MSN ** ** 编程 **

现在我们就进入到了对 MSN 本身的编程了。在“项目”中选择“添加用户控件”。用户控件的处理方式和 windows 窗体的处理方式是一样的。然后在此“用户控件”上添加一个 ” 发送 ” 按钮,“编辑”框及一个 ListView 。我们需要用到用户控件类中的两个成员:

** 初始化 ** ** **

    Messenger.MsgrObjectClass msg;


Messenger.IMsgrUser CurrentUser;


Messenger.IMsgrUsers Users;

在构造函数中添加如下代码

msg = new Messenger.MsgrObjectClass();


 


try


{


  _// 检查MSN是否已经登录_


  if(msg.LocalState == Messenger.MSTATE.MSTATE_OFFLINE)


  {


    Messenger.MessengerAppClass app = 


        new Messenger.MessengerAppClass();


 


    app.IMessengerApp_LaunchLogonUI();


 


    _// 等待登录完成_


    while(msg.LocalState != Messenger.MSTATE.MSTATE_ONLINE)


      System.Threading.Thread.Sleep(5000);


  }


 


  _// 获取用户列表_


  Users = msg.get_List(Messenger.MLIST.MLIST_CONTACT);


 


  for(int i = 0; i < Users.Count; i++)


  {


    Messenger.IMsgrUser u = Users.Item(i);


    userList.Items.Add(new ListViewItem(u.FriendlyName, GetStateImage(u.State)));


  }


 


  _// 获取新信息通知_


  msg.OnTextReceived +=


    new Messenger.DMsgrObjectEvents_OnTextReceivedEventHandler


                                     (this.OnTextRecieved);


 


  _// 获取用户状态改变通知_


  msg.OnUserStateChanged += new 


    Messenger.DMsgrObjectEvents_OnUserStateChangedEventHandler


                                     (this.OnUserStateChanged);


         


}


_// 异常处理_


catch(Exception e)


{


         MessageBox.Show(e.Message);

}

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