<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FVN Tech Blog &#187; WLM</title>
	<atom:link href="http://blog.feuvan.net/tag/wlm/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.feuvan.net</link>
	<description>Interoperability &#124; Coding, Programming in C#/PHP &#124; Linux, Windows Server Backend &#124;  New Media &#124; SNS &#124; Misc ...</description>
	<lastBuildDate>Fri, 06 Aug 2010 00:31:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Developing MSN/WLM Add-in Part.II</title>
		<link>http://blog.feuvan.net/2007/03/27/114-developing-msnwlm-add-in-part-2.html</link>
		<comments>http://blog.feuvan.net/2007/03/27/114-developing-msnwlm-add-in-part-2.html#comments</comments>
		<pubDate>Tue, 27 Mar 2007 10:21:51 +0000</pubDate>
		<dc:creator>feuvan</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[WLM]]></category>

		<guid isPermaLink="false">http://feuvan.net/wordpress/index.php/archives/114</guid>
		<description><![CDATA[Currently I&#8217;m busy fking &#8220;.NET Remoting&#8221;. I don&#8217;t have enough free time to complete the tutorial. here&#8217;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. &#8230; <a href="http://blog.feuvan.net/2007/03/27/114-developing-msnwlm-add-in-part-2.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Currently I&#8217;m busy fking &#8220;.NET Remoting&#8221;. I don&#8217;t have enough free time to complete the tutorial.<br />
here&#8217;s sth you must read further if you want to do more on MSN Add-in.<br />
anyway, they are tutorials also, but has clear-coded examples.</p>
<p><a href="http://community.bartdesmet.net/blogs/bart/archive/2006/09/17/4431.aspx" target="_blank">B# .NET Blog : Your first Windows Live Messenger add-in</a>, and <a href="http://community.bartdesmet.net/blogs/bart/archive/2005/06/08/967.aspx" target="_blank">another example</a>.<br />
<a href="http://blogs.wdevs.com/angelos/archive/2006/12/15/19093.aspx" target="_blank">Angelos Petropoulos&#8217; WebLog :Writing a Windows Live Messenger add-in</a>.</p>
<p>see also: <a href="http://blog.feuvan.net/index.php/2007/02/28/developing-msnwlm-add-in-part-1.html">Developing MSN/WLM Add-in Part.I</a></p>
<div class="lightsocial_container"><a class="lightsocial_a" href="http://digg.com/submit?url=http%3A%2F%2Fblog.feuvan.net%2F2007%2F03%2F27%2F114-developing-msnwlm-add-in-part-2.html&amp;title=Developing+MSN%2FWLM+Add-in+Part.II" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/digg.png" alt="Digg This" title="Digg This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.reddit.com/submit?url=http%3A%2F%2Fblog.feuvan.net%2F2007%2F03%2F27%2F114-developing-msnwlm-add-in-part-2.html&amp;title=Developing+MSN%2FWLM+Add-in+Part.II" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/reddit.png" alt="Reddit This" title="Reddit This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fblog.feuvan.net%2F2007%2F03%2F27%2F114-developing-msnwlm-add-in-part-2.html&amp;title=Developing+MSN%2FWLM+Add-in+Part.II" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/stumbleupon.png" alt="Stumble Now!" title="Stumble Now!" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fblog.feuvan.net%2F2007%2F03%2F27%2F114-developing-msnwlm-add-in-part-2.html&amp;headline=Developing+MSN%2FWLM+Add-in+Part.II" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/yahoo_buzz.png" alt="Buzz This" title="Buzz This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dzone.com/links/add.html?title=Developing+MSN%2FWLM+Add-in+Part.II&amp;url=http%3A%2F%2Fblog.feuvan.net%2F2007%2F03%2F27%2F114-developing-msnwlm-add-in-part-2.html" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/dzone.png" alt="Vote on DZone" title="Vote on DZone" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.facebook.com/sharer.php?t=Developing+MSN%2FWLM+Add-in+Part.II&amp;u=http%3A%2F%2Fblog.feuvan.net%2F2007%2F03%2F27%2F114-developing-msnwlm-add-in-part-2.html" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/facebook.png" alt="Share on Facebook" title="Share on Facebook" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://delicious.com/save?title=Developing+MSN%2FWLM+Add-in+Part.II&amp;url=http%3A%2F%2Fblog.feuvan.net%2F2007%2F03%2F27%2F114-developing-msnwlm-add-in-part-2.html" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/delicious.png" alt="Bookmark this on Delicious" title="Bookmark this on Delicious" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dotnetkicks.com/kick/?title=Developing+MSN%2FWLM+Add-in+Part.II&amp;url=http%3A%2F%2Fblog.feuvan.net%2F2007%2F03%2F27%2F114-developing-msnwlm-add-in-part-2.html" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/dotnetkicks.png" alt="Kick It on DotNetKicks.com" title="Kick It on DotNetKicks.com" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://dotnetshoutout.com/Submit?title=Developing+MSN%2FWLM+Add-in+Part.II&amp;url=http%3A%2F%2Fblog.feuvan.net%2F2007%2F03%2F27%2F114-developing-msnwlm-add-in-part-2.html" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/dotnetshoutout.png" alt="Shout it" title="Shout it" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fblog.feuvan.net%2F2007%2F03%2F27%2F114-developing-msnwlm-add-in-part-2.html&amp;title=Developing+MSN%2FWLM+Add-in+Part.II&amp;summary=&amp;source=" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/linkedin.png" alt="Share on LinkedIn" title="Share on LinkedIn" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.technorati.com/faves?add=http%3A%2F%2Fblog.feuvan.net%2F2007%2F03%2F27%2F114-developing-msnwlm-add-in-part-2.html" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/technorati.png" alt="Bookmark this on Technorati" title="Bookmark this on Technorati" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://twitter.com/home?status=Reading+http%3A%2F%2Fblog.feuvan.net%2F2007%2F03%2F27%2F114-developing-msnwlm-add-in-part-2.html" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/twitter.png" alt="Post on Twitter" title="Post on Twitter" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.google.com/buzz/post?url=http%3A%2F%2Fblog.feuvan.net%2F2007%2F03%2F27%2F114-developing-msnwlm-add-in-part-2.html" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/google_buzz.png" alt="Google Buzz (aka. Google Reader)" title="Google Buzz (aka. Google Reader)" /></a>&nbsp;&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://blog.feuvan.net/2007/03/27/114-developing-msnwlm-add-in-part-2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developing MSN/WLM Add-in Part.I</title>
		<link>http://blog.feuvan.net/2007/02/28/105-developing-msnwlm-add-in-part-1.html</link>
		<comments>http://blog.feuvan.net/2007/02/28/105-developing-msnwlm-add-in-part-1.html#comments</comments>
		<pubDate>Wed, 28 Feb 2007 07:50:40 +0000</pubDate>
		<dc:creator>feuvan</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[dotNET]]></category>
		<category><![CDATA[WLM]]></category>

		<guid isPermaLink="false">http://feuvan.net/wordpress/?p=105</guid>
		<description><![CDATA[微软的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] &#8220;AddInFeatureEnabled&#8221;=dword:00000001 修改了注册表之后，登录WLM，在Option菜单中就会出现Add-ins选项，点击Add to &#8230; <a href="http://blog.feuvan.net/2007/02/28/105-developing-msnwlm-add-in-part-1.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><span>微软的Messenger SDK分为面向多人应用的Activity SDK和面向单人应用的 Add-in SDK（<a href="http://msdn2.microsoft.com/en-us/library/aa905655.aspx">Windows Live Messenger Add-In API</a>）。不过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讨论区的精华文章中寻找。）<br />
</span></p>
<p><span>事实上，无论是新的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。<br />
</span></p>
<p><span>要启用插件功能，首先需要修改注册表项。在HKCU\Software\Microsoft\MSNMessenger新建DWORD项，名为AddInFeatureEnabled，值设置为1。或者将以下四行文本存为reg文件导入。<br />
</span></p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:388px"/></colgroup>
<tbody valign="top">
<tr>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>Windows Registry Editor Version 5.00<br />
</span></p>
</p>
<p><span>[HKEY_CURRENT_USER\Software\Microsoft\MSNMessenger]<br />
</span></p>
<p><span>&#8220;AddInFeatureEnabled&#8221;=dword:00000001</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p><span>    修改了注册表之后，登录WLM，在Option菜单中就会出现Add-ins选项，点击Add to Messenger，找到Add-In dll就可以加载了<br />
</span></p>
</p>
<p><span>打开VS 2005（亦可使用<a href="http://msdn.microsoft.com/vstudio/express/visualcsharp/">Visual C# 2005 Express Edition</a>），建立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）。<br />
</span></p>
<p><span>将CS文件改名为test.cs，并新建一个名为TestFrm的新窗体。<br />
</span></p>
<p><span>更改输出assembly的文件名为WLMAddintest.Test（Project，WLMAddintest Properties，Application，Assembly Name）。因为WLM Add-In对于文件名有着严格的限制，必须是namespace.classname.dll的方式，否则将不能加载。当然你可以使用匿名命名空间，这样就可以只生成test.dll让WLM加载。<br />
</span></p>
<p><span>Frame代码先省略，其中test.cs代码如下：<br />
</span></p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:491px"/></colgroup>
<tbody valign="top">
<tr>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>using System;<br />
</span></p>
<p><span>using System.Collections.Generic;<br />
</span></p>
<p><span>using System.Text;<br />
</span></p>
<p><span>using System.Windows.Forms;<br />
</span></p>
<p><span>using Microsoft.Messenger;<br />
</span></p>
</p>
<p><span>namespace WLMAddintest<br />
</span></p>
<p><span>{<br />
</span></p>
<p><span>public class Test: IMessengerAddIn<br />
</span></p>
<p><span>{<br />
</span></p>
<p><span>public MessengerClient m_client;<br />
</span></p>
<p><span>public Form frm;<br />
</span></p>
<p><span>public void Initialize(MessengerClient client)<br />
</span></p>
<p><span>{<br />
</span></p>
<p><span>m_client = client;<br />
</span></p>
<p><span>m_client.Shutdown += new EventHandler(this.Shutdown);<br />
</span></p>
</p>
<p><span>m_client.AddInProperties.Url = new Uri(&#8220;http://dev.feuvan.net/&#8221;);<br />
</span></p>
<p><span>m_client.AddInProperties.FriendlyName = &#8220;test add-in&#8221;;<br />
</span></p>
<p><span>frm = new TestFrm();<br />
</span></p>
<p><span>frm.Show();<br />
</span></p>
<p><span>}<br />
</span></p>
<p><span>public void Shutdown(object sender, EventArgs e)<br />
</span></p>
<p><span>{<br />
</span></p>
<p><span>frm.Close();<br />
</span></p>
<p><span>}<br />
</span></p>
<p><span>}<br />
</span></p>
<p><span>}</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p><span>    在以上部分代码中，我们建立了一个名为test的类，实现了IMessengerAddIn接口，而Initialize则是Add-In的入口。另外我们绑定了Shutdown事件，Shutdown事件是在Add-In被unload，用户登出WLM或者关闭WLM发生的。读者可以使用VS的Object Browser来浏览MessengerClient提供的接口（选中Reference中的MessengerClient，双击或者右键View in Object Browser）。<br />
</span></p>
<p><span>MessengerClient类共有五种事件，皆可绑定到自己定义的事件响应函数上。<br />
</span></p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col />
<col />
<col /></colgroup>
<tbody valign="top">
<tr>
<td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>事件</span></p>
</td>
<td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>事件描述</span></p>
</td>
<td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>参数描述</span></p>
</td>
</tr>
<tr>
<td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span></span><span style="color:#0066cc; text-decoration:underline"><strong>EventHandler&lt;IncomingTextMessageEventArgs&gt;</strong></span><span style="color:black"><br />
									<strong>IncomingTextMessage</strong></span></p>
</td>
<td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>文本消息传入时发生</span></p>
</td>
<td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span></span><span style="color:#0066cc; font-size:9pt; text-decoration:underline"><strong>IncomingTextMessageEventArgs</strong></span>有两个属性
</p>
<p><span>string TextMessage和User UserFrom</span></p>
</td>
</tr>
<tr>
<td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span></span><span style="color:#0066cc; text-decoration:underline"><strong>EventHandler&lt;OutgoingTextMessageEventArgs&gt;</strong></span><span style="color:black"><br />
									<strong>OutgoingTextMessage</strong></span></p>
</td>
<td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>文本消息传出时发生</span></p>
</td>
<td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span></span><span style="color:#0066cc; font-size:9pt; text-decoration:underline"><strong>OutgoingTextMessageEventArgs</strong></span>有两个属性
</p>
<p><span>string TextMessage和User UserTo</span></p>
</td>
</tr>
<tr>
<td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span></span><span style="color:#0066cc; text-decoration:underline"><strong>EventHandler</strong></span><span style="color:black"><br />
									<strong>ShowOptionsDialog</strong></span></p>
</td>
<td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>用户点击Add-In的Settings时发生</span></p>
</td>
<td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>N/A</span></p>
</td>
</tr>
<tr>
<td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span></span><span style="color:#0066cc; text-decoration:underline"><strong>EventHandler</strong></span><span style="color:black"><br />
									<strong>Shutdown</strong></span></p>
</td>
<td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>Add-In被unload时发生</span></p>
</td>
<td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>N/A</span></p>
</td>
</tr>
<tr>
<td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span></span><span style="color:#0066cc; text-decoration:underline"><strong>EventHandler&lt;StatusChangedEventArgs&gt;</strong></span><span style="color:black"><br />
									<strong>StatusChanged</strong></span></p>
</td>
<td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>有用户的状态改变时发生，如登入登出。</span></p>
</td>
<td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span></span><span style="color:#0066cc; font-size:9pt; text-decoration:underline"><strong>StatusChangedEventArgs</strong></span>有一个属性
</p>
<p><span>User User</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p><span>    其中User类的属性有昵称，email，个人状态信息，状态，唯一ID，并有一个方法GetGroupNames，可以得到用户所在的组名。<br />
</span></p>
<p><span>MessengerClient类有三种属性：<br />
</span></p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:160px"/>
<col style="width:33px"/>
<col style="width:338px"/></colgroup>
<tbody valign="top">
<tr>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>属性</span></p>
</td>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>限制</span></p>
</td>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>作用</span></p>
</td>
</tr>
<tr>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span></span><span style="color:#0066cc; text-decoration:underline"><strong>AddInProperties</strong></span><span style="color:black"><br />
									<strong>AddInProperties</strong></span></p>
</td>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>读写</span></p>
</td>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>设置Add-In的信息如名称，作者，描述，URL等</span></p>
</td>
</tr>
<tr>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span></span><span style="color:#0066cc; text-decoration:underline"><strong>User</strong></span><span style="color:black"><br />
									<strong>LocalUser</strong></span></p>
</td>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>只读</span></p>
</td>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>当前登录用户的属性，包括昵称，email，个人状态信息，状态，唯一ID</span></p>
</td>
</tr>
<tr>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span></span><span style="color:#0066cc; text-decoration:underline"><strong>string</strong></span><span style="color:black"><br />
									<strong>SavedState</strong></span></p>
</td>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>读写</span></p>
</td>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>提供Add-In存储空间。<br />
</span></p>
<p><span>由于WLM Add-In的安全限制，Add-In不能访问本地文件。所以配置等信息可以串行化之后保存在SavedState变量中，下次启动从这里读取。</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p><span>    MessengerClient类有三个方法：<br />
</span></p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:460px"/>
<col style="width:72px"/></colgroup>
<tbody valign="top">
<tr>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>方法</span></p>
</td>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>作用</span></p>
</td>
</tr>
<tr>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span></span><span style="color:black"><strong>void</strong><br />
									<strong>SendActionMessage</strong>(</span><span style="color:#0066cc; text-decoration:underline"><strong>string</strong></span><span style="color:black"><br />
									<em>actionText</em><strong>, </strong></span><span style="color:#0066cc; text-decoration:underline"><strong>Microsoft.Messenger.User</strong></span><span style="color:black"><br />
									<em>userTo</em>)</span></p>
</td>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>发送动作</span></p>
</td>
</tr>
<tr>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span></span><span style="color:black"><strong>void</strong><br />
									<strong>SendNudgeMessage</strong>(</span><span style="color:#0066cc; text-decoration:underline"><strong>Microsoft.Messenger.User</strong></span><span style="color:black"><br />
									<em>userTo</em>)</span></p>
</td>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>发送震动信息</span></p>
</td>
</tr>
<tr>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span></span><span style="color:black"><strong>void</strong><br />
									<strong>SendTextMessage</strong>(</span><span style="color:#0066cc; text-decoration:underline"><strong>string</strong></span><span style="color:black"><br />
									<em>text</em><strong>, </strong></span><span style="color:#0066cc; text-decoration:underline"><strong>Microsoft.Messenger.User</strong></span><span style="color:black"><br />
									<em>userTo</em>)</span></p>
</td>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>发送文本</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p><span>至于这里的User参数，基本上都是相应IncomingTextMessage的时候传进来的UserFrom参数。例如：<br />
</span></p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:531px"/></colgroup>
<tbody valign="top">
<tr>
<td vAlign="middle" style="padding-top: 1px; padding-left: 7px; padding-bottom: 1px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">
<p><span>void messenger_IncomingTextMessage(object sender, IncomingTextMessageEventArgs e)<br />
</span></p>
<p><span>{<br />
</span></p>
<p><span>Microsoft.Messenger.User from = (Microsoft.Messenger.User)e.UserFrom;<br />
</span></p>
<p><span>messenger.SendTextMessage(output, from);<br />
</span></p>
<p><span>}</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p><span>从上面的例子我们可以看到，WLM Add-In SDK还是很弱的，基本上只能拿来写机器人用，当然了，现在MSN机器人层出不穷，也不新鲜了。<br />
</span></p>
<p><span>接下来，就让我们来看看Messenger API能干点什么，以及更高级的话题。<br />
</span></p>
<p><span>后续内容更精彩，敬请继续关注。</span></p>
<p>
see also: <a href="http://blog.feuvan.net/index.php/2007/03/27/developing-msnwlm-add-in-part-2.html">Developing MSN/WLM Add-in Part.II</a></p>
<div class="lightsocial_container"><a class="lightsocial_a" href="http://digg.com/submit?url=http%3A%2F%2Fblog.feuvan.net%2F2007%2F02%2F28%2F105-developing-msnwlm-add-in-part-1.html&amp;title=Developing+MSN%2FWLM+Add-in+Part.I" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/digg.png" alt="Digg This" title="Digg This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.reddit.com/submit?url=http%3A%2F%2Fblog.feuvan.net%2F2007%2F02%2F28%2F105-developing-msnwlm-add-in-part-1.html&amp;title=Developing+MSN%2FWLM+Add-in+Part.I" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/reddit.png" alt="Reddit This" title="Reddit This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fblog.feuvan.net%2F2007%2F02%2F28%2F105-developing-msnwlm-add-in-part-1.html&amp;title=Developing+MSN%2FWLM+Add-in+Part.I" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/stumbleupon.png" alt="Stumble Now!" title="Stumble Now!" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fblog.feuvan.net%2F2007%2F02%2F28%2F105-developing-msnwlm-add-in-part-1.html&amp;headline=Developing+MSN%2FWLM+Add-in+Part.I" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/yahoo_buzz.png" alt="Buzz This" title="Buzz This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dzone.com/links/add.html?title=Developing+MSN%2FWLM+Add-in+Part.I&amp;url=http%3A%2F%2Fblog.feuvan.net%2F2007%2F02%2F28%2F105-developing-msnwlm-add-in-part-1.html" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/dzone.png" alt="Vote on DZone" title="Vote on DZone" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.facebook.com/sharer.php?t=Developing+MSN%2FWLM+Add-in+Part.I&amp;u=http%3A%2F%2Fblog.feuvan.net%2F2007%2F02%2F28%2F105-developing-msnwlm-add-in-part-1.html" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/facebook.png" alt="Share on Facebook" title="Share on Facebook" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://delicious.com/save?title=Developing+MSN%2FWLM+Add-in+Part.I&amp;url=http%3A%2F%2Fblog.feuvan.net%2F2007%2F02%2F28%2F105-developing-msnwlm-add-in-part-1.html" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/delicious.png" alt="Bookmark this on Delicious" title="Bookmark this on Delicious" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dotnetkicks.com/kick/?title=Developing+MSN%2FWLM+Add-in+Part.I&amp;url=http%3A%2F%2Fblog.feuvan.net%2F2007%2F02%2F28%2F105-developing-msnwlm-add-in-part-1.html" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/dotnetkicks.png" alt="Kick It on DotNetKicks.com" title="Kick It on DotNetKicks.com" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://dotnetshoutout.com/Submit?title=Developing+MSN%2FWLM+Add-in+Part.I&amp;url=http%3A%2F%2Fblog.feuvan.net%2F2007%2F02%2F28%2F105-developing-msnwlm-add-in-part-1.html" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/dotnetshoutout.png" alt="Shout it" title="Shout it" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fblog.feuvan.net%2F2007%2F02%2F28%2F105-developing-msnwlm-add-in-part-1.html&amp;title=Developing+MSN%2FWLM+Add-in+Part.I&amp;summary=&amp;source=" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/linkedin.png" alt="Share on LinkedIn" title="Share on LinkedIn" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.technorati.com/faves?add=http%3A%2F%2Fblog.feuvan.net%2F2007%2F02%2F28%2F105-developing-msnwlm-add-in-part-1.html" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/technorati.png" alt="Bookmark this on Technorati" title="Bookmark this on Technorati" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://twitter.com/home?status=Reading+http%3A%2F%2Fblog.feuvan.net%2F2007%2F02%2F28%2F105-developing-msnwlm-add-in-part-1.html" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/twitter.png" alt="Post on Twitter" title="Post on Twitter" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.google.com/buzz/post?url=http%3A%2F%2Fblog.feuvan.net%2F2007%2F02%2F28%2F105-developing-msnwlm-add-in-part-1.html" ><img class="lightsocial_img" src="http://blog.feuvan.net/wp-content/plugins/light-social/google_buzz.png" alt="Google Buzz (aka. Google Reader)" title="Google Buzz (aka. Google Reader)" /></a>&nbsp;&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://blog.feuvan.net/2007/02/28/105-developing-msnwlm-add-in-part-1.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
