MSN Messenger 6.0 公開 COM 介面允許第三方應用整合即時通訊功能。本文介紹如何透過 MessengerAPI 取得聯絡人清單,涵蓋 VB 簡易版與 VC++ 智慧指標版兩種實作,並說明 Type Library 取得方法。
IMessenger / IMessenger2 / IMessenger3:主控制介面IMessengerContacts:聯絡人集合IMessengerContact:單一聯絡人(FriendlyName、SigninName 等屬性)完整介面清單請參考 MSDN:https://msdn.microsoft.com/library/default.asp?url=/library/en-us/winmessenger/winmessenger/messenger_entry.asp
' 專案 → 參考 → 加入 "Messenger API Type Library"
Dim MSNMessenger As New MessengerAPI.Messenger
Dim MSNMyContacts As IMessengerContacts
Dim MSNMyContact As IMessengerContact
Set MSNMyContacts = MSNMessenger.MyContacts
For Each MSNMyContact In MSNMyContacts
MsgBox MSNMyContact.FriendlyName & " - " & MSNMyContact.SigninName
Next
Visual Studio Tools → OLEView → 開啟 msnmsgr.exe → 另存為 Type Library (.tlb)。本文附件已包含生成好的 msnmsgr.tlb。
// stdafx.h 或標頭檔
#import "msnmsgr.tlb" no_namespace named_guids
// 實作函數
void GetMSNContacts()
{
IMessengerPtr pMessenger = NULL;
IMessengerContactsPtr pContacts = NULL;
IMessengerContactPtr pContact = NULL;
HRESULT hr = pMessenger.CreateInstance(__uuidof(Messenger));
if (FAILED(hr)) {
AfxMessageBox(_T("建立 Messenger 物件失敗!"));
return;
}
pContacts = pMessenger->GetMyContacts();
if (!pContacts) {
AfxMessageBox(_T("取得聯絡人集合失敗!"));
return;
}
long lCount = pContacts->GetCount();
for (int i = 0; i < lCount; i++) {
pContact = pContacts->Item(i);
if (!pContact) {
AfxMessageBox(_T("取得聯絡人項目失敗!"));
break;
}
_bstr_t bstrName = pContact->GetFriendlyName(); // 顯示名稱
_bstr_t bstrSignin = pContact->GetSigninName(); // 登入帳號 (Email)
// 處理顯示/儲存...
CString str;
str.Format(_T("%s <%s>"), (LPCTSTR)bstrName, (LPCTSTR)bstrSignin);
TRACE(_T("%s\n"), str);
}
}
#import 產生智慧指標類別(_Ptr 後綴),自動管理參考計數CreateInstance(__uuidof(Messenger)) 啟動/連接 MSN Messenger 進程MyContacts / GetMyContacts() 取得聯絡人集合介面GetCount() + Item(index) 列舉集合(0-based 索引)_bstr_t 自動處理 BSTR ↔ CString 轉換同樣模式可實作:
DMessengerEvents 接收)IMessenger::InstantMessage())IMessengerGroups、IMessengerGroup)MSN Messenger COM 介面展示了早期 Windows 即時通訊平台的開放生態。透過 #import 導入 Type Library,VC++ 可用智慧指標優雅地存取聯絡人資料。雖 MSN 已成歷史,但此 COM 整合模式(Type Library → 智慧指標 → 集合列舉)在 Office 自動化、Windows Shell 擴充、第三方 SDK 整合中依然普遍適用。