分类:
2008-10-13 16:53:50
如何获取MSN Messenger的联系人列表?
作者:
一、介绍
近来,偶然遇到一些朋友由于某些原因问到如何获取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 专题找到:
二、实现''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 < lCount; i++) { MSNMessagerContact = MSNMessagerContacts->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了 。