夜的第七章

WEB开发个人博客。

« 走近Linux世界:Linux与Windows特性比较XML中的XPath介绍[转] »

利用MSN的AddIn做MSN机器人

环境:VS2005 + Windows XP + DotNet2.0

1.修改注册表,打开AddIn选项。默认情况下,MSN的AddIn选项是隐藏的,在注册表中添加如下键 HKEY_CURRENT_USER\Software\Microsoft\MSNMessenger\AddInFeatureEnabled   DWORD   1,重启MSN,查看属性,就能看到“加载项”了。

2008-01-04_103158

2.创建一个类库项目

3.引用MessengerClient.dll 在MSN的安装目录中。

4.创建一个类,并且从 IMessengerAddIn接口继承,实现其Initialize方法。

2008-01-04_115723

MessengerClient.dll说明

void Initialize(Microsoft.Messenger.MessengerClient messenger)

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

相关数据类型说明

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; }
}



 

5. 修改项目属性中的程序集名称为Namespace.ClassName



 

2008-01-04_120319



 



Add-ins 对文件名有严格限制,文件名必须是实现 IMessengerAddIn 接口类的全限定名(Namespace.ClassName.dll)。



 

6.OK,终于可以编写自己的代码了

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Messenger;

namespace AutoSave
{
public class MsnSave : IMessengerAddIn
{
MessengerClient msn;

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

msn.AddInProperties.Creator = "David Hu";
msn.AddInProperties.Description = "Copyright (c) David Hu. China 2008";
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);
}
}
}



 

7.打开MSN并登陆,打开选项->加载项,单击 "添加至 Messenger (D)..." 按钮



 

2008-01-04_121000



 

8.在选择文件对话框中选择 AutoSave.MsnSave.dll



 

2008-01-04_121141



 

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



 

2008-01-04_121348



 

2008-01-04_121458



 

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



 

MsnAddin6



 

到此一个简单的MSN Add-In机器人完成。当然了,这个例子比较简单,但是却给了我们一些想象空间,其实还是能做出一些事情的。我打算下一步用这个做一个小插件,功能很简单就是自定义自动回复和聊天内容自动保存到服务器。因为MSN一直没有提供保存聊天记录到服务器的功能,以至于我一直都是用Google Talk来跟MSN好友沟通,毕竟不是原生的客户端,很多事情不能做。



 

11.需要注意的一些事项:



 

MSN Add-In是运行在Internet Zone中的,所以很多操作受到安全限制,不能进行IO操作。我测试了一下,无法写文件到硬盘,无法跟Web地址通讯。解决方法是把我们的dll做成强签名的,然后注册到GAC中,经过试验,就可以写文件了。



 

MSN Add-In官方API文档(英文) http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnlive/html/messengeraddin_sdk.asp


原文地址:http://www.huzi.name/2008/01/msnaddinmsn.html

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。



[2007 - 2011] © Leadnt.com