在Webpage上调用Windows Messenger API
来源:百度文库 编辑:神马文学网 时间:2024/04/29 04:49:38
最近在工作中遇到一个在WebPage上调用Windows Messenger API的需求,于是到MSDN上大搜一番,还是有所收获。相关链接如下:http://www.microsoft.com/china/MSDN/library/WebServices/WebServices/nacwebteam09032001.mspx?pf=true
其中包含了一段MSN Instant Messenger代码。首先要提出的一个大家容易混淆的概念:Windows Messenger 与 MSN Messenger 到底有什么区别和联系?
·MSN Messenger不是系统自带的,而Windows Messenger在非Windows 2003的Microsoft系统上都已经作为默认组件安装,这里我们要使用到的就是Windows Messenger API
·MSN Messenger只能用.Net Passport这个微软统一身份验证来登陆,也就意味着它只能在一台联入了互联网的电脑上登陆使用。而Windows Messenger则有三种登陆方式:a. Exchange身份验证 b. .Net Passport身份验证 c. SIP身份验证。其中c. SIP身份验证不太常用。而现在很多企业都已经建立了内部Exchange服务器,这样就经常会采用Windows Messenger的Exchange身份验证来进行登录后内部员工IM联系。而如果使用b. .Net Passport身份验证则功能上与MSN Messenger完全一样。
·Windows Messenger可以同时使用三种身份验证登陆,换句话说就是我可以同时登陆企业内网的Windows Messenger IM以及互联网上的MSN Messenger。其中的联系人列表是整合的。就有点像MyIM能整合MSN以及QQ、Yahoo IM等等IM软件一样。而MSN Messenger不行
·MSN Messenger的聊天记录可以保存,且通讯功能更加强大,如最新的7.5版本“传情动漫”以及“手写”功能已经完全超越了QQ等同类IM软件。而Windows Messenger聊天记录在关闭聊天窗口后消失不自动保存,只集成了一些最基本的通信方式。可以算作是简化版的MSN Messenger
有了以上的信息,我们已经可以开始试验了。将MSDN上的那段MSN Instant Messenger代码复制到本地,保存成.html文件,用IE打开。嗯。一切正常。请看下图(由于本人在台企上班,公司要求使用繁体操作系统,请大家见谅):
图一
然后,我们把这个文件复制到wwwroot发布目录下。再通过 http://172.18.77.60/ (我电脑的IP地址)前缀来访问。如下图所示:
图二
大家可以看到。同样一段代码。直接访问与发布后访问执行结果不同。我本想将此功能制作成一个WebPart以便在SharePoint上的任意地点引用。但是现在的问题是,只有我直接双击该html文件才能正常显示“联系人名单”,而我无论使用http://127.0.0.1/ 或者 http://localhost/ 或者 http://我的电脑IP地址/ 三种方式访问,联系人列表都会发生错误。但是通过点击“undefined”链接是可以实现对话功能的,通过查看源代码得知,其是通过枚举id来实现的,所以这里仅仅是一个显示上的问题。
下面让我们来看看完整的代码,完全使用JavaScript调用Windows Messenger API来实现。
1
2
3Embedding MSN Messenger Test
4
5
10
14
15
37
38
39
40
41
162
163
183
184
185
187
188
189
190
作为代码本身是很简单的,不用过多解释,整个实现的原理就是:首先new了两个Windows Messenger实例,分别为oMsgrObj以及oMsgrApp。然后通过对好友列表oList = oMsgrObj.List(0);循环枚举,并利用DOM技术塞入新的Element来列出好友名称oNewElement.innerText = oContact.FriendlyName; 以及好友状态switch (oContact.State)。最后通过function sendMessage()函数来实现OnClick事件,调用对应的Windows Messenger实例弹出好友对话框。整段代码是清晰明了也很容易懂的。这里我们主要看看造成上面图二错误的代码段:
function populateContacts()
{
var oList = oMsgrObj.List(0);
var oContact;
var i;
for (i = 0; i < oList.Count; i++)
{
oContact = oList.Item(i);
oNewElement = document.createElement("DIV");
oNewElement.innerText = oContact.FriendlyName;
其中包含了一段MSN Instant Messenger代码。首先要提出的一个大家容易混淆的概念:Windows Messenger 与 MSN Messenger 到底有什么区别和联系?
·MSN Messenger不是系统自带的,而Windows Messenger在非Windows 2003的Microsoft系统上都已经作为默认组件安装,这里我们要使用到的就是Windows Messenger API
·MSN Messenger只能用.Net Passport这个微软统一身份验证来登陆,也就意味着它只能在一台联入了互联网的电脑上登陆使用。而Windows Messenger则有三种登陆方式:a. Exchange身份验证 b. .Net Passport身份验证 c. SIP身份验证。其中c. SIP身份验证不太常用。而现在很多企业都已经建立了内部Exchange服务器,这样就经常会采用Windows Messenger的Exchange身份验证来进行登录后内部员工IM联系。而如果使用b. .Net Passport身份验证则功能上与MSN Messenger完全一样。
·Windows Messenger可以同时使用三种身份验证登陆,换句话说就是我可以同时登陆企业内网的Windows Messenger IM以及互联网上的MSN Messenger。其中的联系人列表是整合的。就有点像MyIM能整合MSN以及QQ、Yahoo IM等等IM软件一样。而MSN Messenger不行
·MSN Messenger的聊天记录可以保存,且通讯功能更加强大,如最新的7.5版本“传情动漫”以及“手写”功能已经完全超越了QQ等同类IM软件。而Windows Messenger聊天记录在关闭聊天窗口后消失不自动保存,只集成了一些最基本的通信方式。可以算作是简化版的MSN Messenger
有了以上的信息,我们已经可以开始试验了。将MSDN上的那段MSN Instant Messenger代码复制到本地,保存成.html文件,用IE打开。嗯。一切正常。请看下图(由于本人在台企上班,公司要求使用繁体操作系统,请大家见谅):
图一
然后,我们把这个文件复制到wwwroot发布目录下。再通过 http://172.18.77.60/ (我电脑的IP地址)前缀来访问。如下图所示:
图二
大家可以看到。同样一段代码。直接访问与发布后访问执行结果不同。我本想将此功能制作成一个WebPart以便在SharePoint上的任意地点引用。但是现在的问题是,只有我直接双击该html文件才能正常显示“联系人名单”,而我无论使用http://127.0.0.1/ 或者 http://localhost/ 或者 http://我的电脑IP地址/ 三种方式访问,联系人列表都会发生错误。但是通过点击“undefined”链接是可以实现对话功能的,通过查看源代码得知,其是通过枚举id来实现的,所以这里仅仅是一个显示上的问题。
下面让我们来看看完整的代码,完全使用JavaScript调用Windows Messenger API来实现。
1
2
3
4
5
10
14
15
37
38
39
40
41
162
163
183
184
Contacts (click on a contact to send a message!)
185
186 MARGIN-BOTTOM: 8px; BORDER: 1px solid steelblue">
187
188
189
190
作为代码本身是很简单的,不用过多解释,整个实现的原理就是:首先new了两个Windows Messenger实例,分别为oMsgrObj以及oMsgrApp。然后通过对好友列表oList = oMsgrObj.List(0);循环枚举,并利用DOM技术塞入新的Element来列出好友名称oNewElement.innerText = oContact.FriendlyName; 以及好友状态switch (oContact.State)。最后通过function sendMessage()函数来实现OnClick事件,调用对应的Windows Messenger实例弹出好友对话框。整段代码是清晰明了也很容易懂的。这里我们主要看看造成上面图二错误的代码段:
function populateContacts()
{
var oList = oMsgrObj.List(0);
var oContact;
var i;
for (i = 0; i < oList.Count; i++)
{
oContact = oList.Item(i);
oNewElement = document.createElement("DIV");
oNewElement.innerText = oContact.FriendlyName;
其中由oList变量得到oMsgrObj的实例后枚举oList的各个Item并存放到oContact变量中。种种现象表明oMsgrObj以及oMsgrApp两个实例已经创建成功,否则无法调用其内部方法如 oMsgrObj.List(0) 以及 oList.Count,但是现在出问题的方法是 oContact.FriendlyName。图二现象表明如果使用IP访问该网页则 oContact.FriendlyName 方法无法正常得到联系人名称,所以会显示为 undefined。而直接通过IE打开该页面则一切正常。
我百思不得其解,同样的方法难道只能在本地使用?那这段HTML代码不就没有意义了吗?恳请各位大虾指点迷津。m(_ _)m 拜..
附Windows Messenger下载地址:
http://nj.onlinedown.net/soft/3366.htm
posted on 2005-09-26 11:17 Viva 阅读(281) 评论(1) 编辑 收藏 收藏至365Key 所属分类: 求助
Feedback
# re: 在Webpage上调用Windows Messenger API 2005-09-26 11:38 Viva
补充一点,有些朋友说是安全性的问题,我已经把几个地址都加入“信任的网站”了,问题依旧。请看下图:
在Webpage上调用Windows Messenger API
在Webpage上调用Windows Messenger API
使用JNA 调用WINDOWS API
C#中调用Windows API的要点
extern \调用系统API
WINDOWS API
Windows Live Messenger 8.0.0683.00
如何彻底删除Windows Messenger
在Windows XP中手动调用Chkdsk工具
在Windows XP中手动调用Chkdsk工具
什么是Windows API
什么是Windows API
windows api函数:OpenSCManager
Windows Live Messenger 9 新功能大检阅
Visual Basic中调用MSN API函数
基础类的DSP/BIOS API调用
基础类的DSP/BIOS API调用
开放API时代,把心思放在应用上
在windows上安装CVS
在windows上安装CVS
WINDOWS API 程序设计(第一章:开始)
Windows API函数使用技巧
Windows API函数大全2
Windows API函数大全一