如何获取MSN Messenger的联系人列表?

王朝vc·作者佚名  2006-01-17
宽屏版  字体: |||超大  

如何获取MSN Messenger的联系人列表?

作者:Phiger

下载源代码

一、介绍

近来,偶然遇到一些朋友由于某些原因问到如何获取MSN的联系人列表,可能大家或多或少都知道MSN

Messenger提供一些接口来调用。可能不清楚哪些接口以及这些接口如何使用,本文就通过获取联系人列表这个简单例子简单介绍一下。

MSN Messenger6.0提供一些MSN

Messenger的COM接口,通过这些COM接口,可以添加很多辅助,比如取联系人列表,联系人上下线通知,发送邮件,即使消息,自动回复即使消息等,这里我只介绍一下如何得到你的联系人列表,如果有朋友想了解更多功能,可以继续探讨,其实使用方法都类似。

先来简单介绍一下MessengerAPI.Messenger都包含哪些接口,MSN6.0的Messenger Object 实现的接口有:

IMessenger

IMessenger2

IMessenger3

DMessengerEvents

IMessengerWindow

IMessengerConversationWnd

IMessengerContact

IMessengerContacts

IMessengerService

ImessengerServices

IMessengerGroup

IMessengerGroups

这里列举联系人列表只要用到 Imessenger、IMessengerContact、ImessengerContact

这些接口就可以了,如果你还对其他接口有兴趣的话,有关 MSN Messenger 的资料可以从微软的 MSDN 网站的 Messenger

专题找到:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winmessenger/winmessenger/messenger_entry.asp

二、实现

1、如果你使用的是VB那编程就简单多了:

首先,在Project菜单选择References,添加Messenger API Type Library,然后,几行代码就可以了:

''Messenger Object

Dim MSNMessenger As New MessengerAPI.Messenger

''Contacts Collection

Dim MSNMyContacts As IMessengerContacts

''One Contact

Dim MSNMyContact As IMessengerContact

Set MSNMyContacts = MSNMessenger.MyContacts

''Enumerating the contact

For Each MSNMyContact In MSNMyContacts

MsgBox MSNMyContact.FriendlyName & MSNMyContact.SigninName

Next

这就完成了联系人列表,这就是VB对Automation支持的方便之处。

2、如果用VC就要复杂一点,但代码也比较简单,问题是我们没有微软提供的.h文件,也没有.tlb,文件。

(1) 如何取得MSN的.tlb文件,有些用Import “msnmsgr.exe”,但得到的.tlh文件中根本没有Messenger对象,我们知道能在

VB中使用肯定需要Type Library,所以我们可以利用Visual Studio Tools 中的OLEView来生成一个.tlb文件

(如果谁有更好的方式请告之),本文源码中已经生成好了.tlb文件,大家直接用就可以了。

(2) 有了.tlb文件,接下来的工作就很简单了:

IMessengerPtr MSNMessager = NULL;

IMessengerContactsPtr MSNMessagerContacts = NULL;

IMessengerContactPtr MSNMessagerContact = NULL;

HRESULT hr = MSNMessager.CreateInstance(__uuidof(Messenger));

if (FAILED(hr))

{

AfxMessageBox("Create the Messenger object failed!");

return;

}

MSNMessagerContacts = MSNMessager-GetMyContacts();

if (NULL == MSNMessagerContacts)

{

AfxMessageBox("the Messenger object GetMyContacts failed!");

return;

}

long lCount = MSNMessagerContacts-GetCount();

for (int i = 0; i Item(i);

if (NULL == MSNMessagerContact)

{

AfxMessageBox("the MSNMessagerContacts GetContact failed!");

break;

}

// 显示名称

_bstr_t bstrtFriendlyName = MSNMessagerContact-GetFriendlyName();

// 登录名称

_bstr_t bstrtSigninName = MSNMessagerContact-GetSigninName();

}

以上代码我想也不用多说,采用智能指针,先取得IMessenger Interface,然后通过IMessenger Interface取得IMessengerContacts Interface,这是一个Contact的Collection,之后就是取出每个ImessengerContact了

三、结束语

MSN Messenger Client的COM接口提供了很多功能,这只是其中一小部分,可以通过这些 COM接口添加一些MSN

Messenger的辅助功能.这些接口都可以从MSDN Web Site上找到说明。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有