开发 MSN Messenger 插件 - Windows Live Messenger Add-ins

来源:互联网 发布:集群控制算法 编辑:程序博客网 时间:2024/06/05 18:16
微软 Windows Live Messenger 8.0 开放了其 add-ins 开发接口,尽管功能有限,有些实验性质,但我们依然可以做很多事情。诸如自动回复、消息加密、MSN Mini 群等等。

运行/开发环境:

1. Windows Live Messenger 8.0
2. Microsoft .NET Framework 2.0
3. Visual Studio.NET 2005 (可选)

安装 Messenger 后(最好不要使用绿色版本,可能会出错。),你会在其安装目录(C:/Program Files/MSN Messenger)中找到一个名为 "MessengerClient.dll" 的文件,这就是我们需要的。创建一个 Class Library 项目,引用该文件,在VS2005解决方案资源管理器中双击该引用名称打开对象浏览器,你就能找到我们的目标——IMessengerAddIn。
public interface IMessengerAddIn
{
  void Initialize(MessengerClient messenger);
}

IMessengerAddIn 接口非常简单,我们要开发的 add-ins 必须实现该接口。Messenger 通过调用 Initialize() 传入 MessengerClient 对象并初始化 add-ins。

相关类型信息
public sealed class MessengerClient : MarshalByRefObject, IPlugInNotifyInternal, IDisposable
{
  // 接收到消息时触发
  public event EventHandler<IncomingTextMessageEventArgs> IncomingTextMessage;

  // 发送消息前触发
  public event EventHandler<OutgoingTextMessageEventArgs> OutgoingTextMessage;

  // 显示设置对话框时触发
  public event EventHandler ShowOptionsDialog;

  // 关闭 Messenger 时触发
  public event EventHandler Shutdown;

  // 好友(buddy)或者本地用户(local user)状态发生改变时触发
  public event EventHandler<StatusChangedEventArgs> StatusChanged;

  // 发送动作消息(前面不会添加"某某人说"字样),如 SendActionMessage("小机器人眼睛乱转...", args.UserFrom);
  public void SendActionMessage(string actionText, User userTo);

  // 发送闪屏
  public void SendNudgeMessage(User userTo);

  // 发送文本消息
  public void SendTextMessage(string text, User userTo);

  // Add-ins 信息
  public AddInProperties AddInProperties { get; set; }

  // 本地用户信息
  public User LocalUser { get; }

  // Add-ins 用来保存状态信息的属性。该信息保存到注册表,可在下次启动时读取。
  public string SavedState { get; set; }
}

public sealed class User
{
  // 获取用户所在组。(一般用来获取好友所在的组,对本地用户没意义。)
  public string[] GetGroupNames();

  // 登录所用的 Email 账号。
  public string Email { get; }

  // 用户名称
  public string FriendlyName { get; }

  // 个人状态消息(就是在线状态下面你输入的那行用来搞怪的文字。:-) )
  public string PersonalStatusMessage { get; }

  // 在线状态
  public UserStatus Status { get; }

  // 唯一用户编号
  public string UniqueId { get; }
}

public class AddInProperties
{
  // 作者
  public string Creator { get; set; }

  // 详细说明
  public string Description { get; set; }

  // 名称
  public string FriendlyName { get; set; }

  // 启用 Add-ins 时,设置本地用户个人状态消息。
  public string PersonalStatusMessage { get; set; }

  // 启用 Add-ins 时,设置本地用户在线状态。
  public UserStatus Status { get; set; }

  // 暂时无用。
  public Uri Url { get; set; }

  // 设置本地用户显示图片。
  public Image UserTile { get; set; }
}

uploads/200608/25_145128_snap6.gif


---------------------

在开始编写我们自己的 Add-ins 之前,还有些工作要做。

1. Messenger Add-ins 缺省并没有被启用,我们需要修改注册表打开。在 "HKEY_CURRENT_USER/Software/Microsoft/MSNMessenger" 中新建 "AddInFeatureEnabled DWORD 1"。再次启动 Messenger,登录后你会在选项对话框中看到 "加载项",这就是装载 Add-ins 的地方。

2. Add-ins 对文件名有严格限制,文件名必须是实现 IMessengerAddIn 接口类的全限定名(Namespace.ClassName.dll)。可以在项目属性对话框中修改程序集名称,使其符合该要求。

OK,我们开始编写我们自己的 Add-ins。
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Messenger;

namespace MyMessenger
{
  public class Bot : IMessengerAddIn
  {
    MessengerClient msn;

    public void Initialize(MessengerClient messenger)
    {
      msn = messenger;

      msn.AddInProperties.Creator = "Q.yuhen";
      msn.AddInProperties.Description = "Copyright (c) RainTrail Studio. China 2006";
      msn.AddInProperties.FriendlyName = "自动回复机器人";
      msn.AddInProperties.Status = UserStatus.Away;

      msn.IncomingTextMessage += new EventHandler<IncomingTextMessageEventArgs>(OnIncommingMessage);
    }

    public void OnIncommingMessage(object sender, IncomingTextMessageEventArgs args)
    {
      msn.SendTextMessage("[自动回复] 我暂时不在,有事请留言,我会尽快回复。", args.UserFrom);
    }
  }
}

编译该项目,获取程序集文件 MyMessenger.Bot.dll。接下来我们装载并进行测试。

1. 打开Messenger,登录。打开选项对话框,在装载项中单击 "添加至 Messenger (D)..." 按钮。

uploads/200608/25_144442_snap1.gif


2. 在选择文件对话框中选择 MyMessenger.Bot.dll。

uploads/200608/25_144447_snap2.gif


3. Add-ins 被成功装载。要启动 Add-ins 有两种方法,第一种就是装载项对话框中的自动运行,另外就是在状态菜单中启动。

uploads/200608/25_144450_snap3.gif

uploads/200608/25_144454_snap4.gif


4. 找个朋友给你发条消息试试看。

uploads/200608/25_144458_snap5.gif


--------------------------

上面的例子虽然很简单,只要发挥你的想象力还是可以做出很多东西的。
更详细的信息请查看MSDN文档《Messenger Add-In API》(英文)。

点击下载