FVN Tech Blog Coding or Programming in C#/PHP | Linux or Windows Server Backend | New Media | SNS | Misc …

28Feb/073

Developing MSN/WLM Add-in Part.I

微软的Messenger SDK分为面向多人应用的Activity SDK和面向单人应用的 Add-in SDK(Windows Live Messenger Add-In API)。不过Live时代的WLM Add-In SDK相较于之前的MSN Messenger API,开放的接口反而少了。自微软实行.NET战略以来,Windows平台应用程序开发的主流逐渐由以往的VC++与Platform SDK搭配的方式转由.NET Framework与C#。然则.NET Framework由于设计的目的与一般普适的Platform SDK并不完全一致或者包容后者,在开发许多real world scenario 下的具体应用时,仍需要依赖Inter OP来使用现有COM组件的接口(关于.NET的本质是COM的论述,实际上也有不少相关文章可供参考,读者可自行利用谷歌雅虎百度搜寻,亦可于水木社区dotNET讨论区的精华文章中寻找。)

事实上,无论是新的WLM SDK,或者旧的Messenger API,皆是安装有WLM后才注册在系统中的COM组件。而WLM Add-in与MSN Messenger API最大的不同,就是开发语言必须是基于.NET Framework 2.0的C#,C++/CLI,VB#,J#,抑或IronPython等脚本语言。本文将会以一个实际的例子来探讨如何以C#来开发WLM的 Add-In。

要启用插件功能,首先需要修改注册表项。在HKCU\Software\Microsoft\MSNMessenger新建DWORD项,名为AddInFeatureEnabled,值设置为1。或者将以下四行文本存为reg文件导入。

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\MSNMessenger]

"AddInFeatureEnabled"=dword:00000001

修改了注册表之后,登录WLM,在Option菜单中就会出现Add-ins选项,点击Add to Messenger,找到Add-In dll就可以加载了

打开VS 2005(亦可使用Visual C# 2005 Express Edition),建立Class Library工程,名为WLMAddintest,添加引用Messenger API(Project,Add Reference,COM,Messenger API Type Library),添加引用Messenger Client(Project,Add Reference,Browse,C:\Program Files\MSN Messenger\MessengerClient.dll)。

将CS文件改名为test.cs,并新建一个名为TestFrm的新窗体。

更改输出assembly的文件名为WLMAddintest.Test(Project,WLMAddintest Properties,Application,Assembly Name)。因为WLM Add-In对于文件名有着严格的限制,必须是namespace.classname.dll的方式,否则将不能加载。当然你可以使用匿名命名空间,这样就可以只生成test.dll让WLM加载。

Frame代码先省略,其中test.cs代码如下:

using System;

using System.Collections.Generic;

using System.Text;

using System.Windows.Forms;

using Microsoft.Messenger;

namespace WLMAddintest

{

public class Test: IMessengerAddIn

{

public MessengerClient m_client;

public Form frm;

public void Initialize(MessengerClient client)

{

m_client = client;

m_client.Shutdown += new EventHandler(this.Shutdown);

m_client.AddInProperties.Url = new Uri("http://dev.feuvan.net/");

m_client.AddInProperties.FriendlyName = "test add-in";

frm = new TestFrm();

frm.Show();

}

public void Shutdown(object sender, EventArgs e)

{

frm.Close();

}

}

}

在以上部分代码中,我们建立了一个名为test的类,实现了IMessengerAddIn接口,而Initialize则是Add-In的入口。另外我们绑定了Shutdown事件,Shutdown事件是在Add-In被unload,用户登出WLM或者关闭WLM发生的。读者可以使用VS的Object Browser来浏览MessengerClient提供的接口(选中Reference中的MessengerClient,双击或者右键View in Object Browser)。

MessengerClient类共有五种事件,皆可绑定到自己定义的事件响应函数上。

事件

事件描述

参数描述

EventHandler<IncomingTextMessageEventArgs>
IncomingTextMessage

文本消息传入时发生

IncomingTextMessageEventArgs有两个属性

string TextMessage和User UserFrom

EventHandler<OutgoingTextMessageEventArgs>
OutgoingTextMessage

文本消息传出时发生

OutgoingTextMessageEventArgs有两个属性

string TextMessage和User UserTo

EventHandler
ShowOptionsDialog

用户点击Add-In的Settings时发生

N/A

EventHandler
Shutdown

Add-In被unload时发生

N/A

EventHandler<StatusChangedEventArgs>
StatusChanged

有用户的状态改变时发生,如登入登出。

StatusChangedEventArgs有一个属性

User User

其中User类的属性有昵称,email,个人状态信息,状态,唯一ID,并有一个方法GetGroupNames,可以得到用户所在的组名。

MessengerClient类有三种属性:

属性

限制

作用

AddInProperties
AddInProperties

读写

设置Add-In的信息如名称,作者,描述,URL等

User
LocalUser

只读

当前登录用户的属性,包括昵称,email,个人状态信息,状态,唯一ID

string
SavedState

读写

提供Add-In存储空间。

由于WLM Add-In的安全限制,Add-In不能访问本地文件。所以配置等信息可以串行化之后保存在SavedState变量中,下次启动从这里读取。

MessengerClient类有三个方法:

方法

作用

void
SendActionMessage(
string
actionText,
Microsoft.Messenger.User
userTo)

发送动作

void
SendNudgeMessage(
Microsoft.Messenger.User
userTo)

发送震动信息

void
SendTextMessage(
string
text,
Microsoft.Messenger.User
userTo)

发送文本

至于这里的User参数,基本上都是相应IncomingTextMessage的时候传进来的UserFrom参数。例如:

void messenger_IncomingTextMessage(object sender, IncomingTextMessageEventArgs e)

{

Microsoft.Messenger.User from = (Microsoft.Messenger.User)e.UserFrom;

messenger.SendTextMessage(output, from);

}

从上面的例子我们可以看到,WLM Add-In SDK还是很弱的,基本上只能拿来写机器人用,当然了,现在MSN机器人层出不穷,也不新鲜了。

接下来,就让我们来看看Messenger API能干点什么,以及更高级的话题。

后续内容更精彩,敬请继续关注。

see also: Developing MSN/WLM Add-in Part.II

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)
Tagged as: , 3 Comments
26Feb/076

早点

昨天和今天一样起得很早,

在小区外的集天小吃吃了多年未吃的早点。

一日三餐,作息规律还是很舒服的。

就是脑子不太好用,

因为我最近一直在想xxx该怎么实现,

梦里都是一段一段的代码,

走火入魔了。

以前努力读书的时候,我是说初中高中,

经常做梦在那里做数学题。

远方的某姐要搬家,

看她blog写的颠沛流离的状况,

不由想起很多很多事情。

为谁辛苦为谁忙。

Ok,我离题了。

我现在就去吃早点。

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)
Filed under: Default 6 Comments
21Feb/070

农历新年第一篇

身体差不多好了,但是作息昼夜颠倒了。继续和OVAL死磕,等next OVAL dev day,patchguard的一个洋人说要搞点东西出来,然后我可以参考完成patch module。

用Word2007写blog感觉不错,至少上传图片到wordpress不会像live writer一样出错。

祝大家新年好。

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)
Filed under: Default No Comments
12Feb/070

贺知章回乡偶书二首

少小离家老大回,乡音无改鬓毛衰。
儿童相见不相识,笑问客从何处来。

又,

离别家乡岁月多,近来人事半消磨。
惟有门前镜湖水,春风不改旧时波。

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)
Filed under: Default No Comments
10Feb/070

很多年了

我已经快忘记当时在阳光下挥洒的汗水

每一天
我背着本来来回回
上班了打字
下班了还是打字

曾经
我和那么多朋友一起打球
一整个下午都在球场也不会累

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)
Filed under: Default No Comments

Pages

Recent Posts

Categories

Tags

apache baidu C# Debian dotNET economy gadget GMA Google hulu IE7 Intel jiwai lighttpd Linux Mobile mod_extforward mojiti nginx oscanner OVAL Parallel PHP phproxy politics proxy Python regsvr32 SNS squid subversion trac TV Vista Visual Studio Windows Live Windows Mobile WLM wordpress wow WTL wzdftpd XDebug XML Zend Framework

Archives

Meta

友情链接与广告

Free web proxy
Old friends:

NSClub: