程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 如何獲取MSN Messenger的聯系人列表

如何獲取MSN Messenger的聯系人列表

編輯:關於VC++

一、介紹

近來,偶然遇到一些朋友由於某些原因問到如何獲取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 < 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了 。

三、結束語

MSN Messenger Client的COM接口提供了很多功能,這只是其中一小部分,可以通過這些 COM接口添加一些MSN Messenger的輔助功能.這些接口都可以從MSDN Web Site上找到說明。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved