在Vs.net中使用MSN即时通讯软件(上) 选择自 adonis2222 的 Blog

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);
     
     
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值