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

27Mar/070

Developing MSN/WLM Add-in Part.II

Currently I'm busy fking ".NET Remoting". I don't have enough free time to complete the tutorial.
here's sth you must read further if you want to do more on MSN Add-in.
anyway, they are tutorials also, but has clear-coded examples.

B# .NET Blog : Your first Windows Live Messenger add-in, and another example.
Angelos Petropoulos' WebLog :Writing a Windows Live Messenger add-in.

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

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: No Comments
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

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: