首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

MSN Messenger 6.0 COM 介面開發:獲取聯絡人清單完整範例

     編輯:關於VC++

MSN Messenger 6.0 公開 COM 介面允許第三方應用整合即時通訊功能。本文介紹如何透過 MessengerAPI 取得聯絡人清單,涵蓋 VB 簡易版與 VC++ 智慧指標版兩種實作,並說明 Type Library 取得方法。

核心 COM 介面

  • IMessenger / IMessenger2 / IMessenger3:主控制介面
  • IMessengerContacts:聯絡人集合
  • IMessengerContact:單一聯絡人(FriendlyName、SigninName 等屬性)

完整介面清單請參考 MSDN:https://msdn.microsoft.com/library/default.asp?url=/library/en-us/winmessenger/winmessenger/messenger_entry.asp

VB 6.0 簡易實作


' 專案 → 參考 → 加入 "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

VC++ 智慧指標實作

取得 .tlb 檔案

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);
    }
}

關鍵點解析

  1. #import 產生智慧指標類別(_Ptr 後綴),自動管理參考計數
  2. CreateInstance(__uuidof(Messenger)) 啟動/連接 MSN Messenger 進程
  3. MyContacts / GetMyContacts() 取得聯絡人集合介面
  4. GetCount() + Item(index) 列舉集合(0-based 索引)
  5. _bstr_t 自動處理 BSTR ↔ CString 轉換

擴充功能方向

同樣模式可實作:

  • 聯絡人上線/下線事件通知(DMessengerEvents 接收)
  • 發送即時訊息(IMessenger::InstantMessage())
  • 自動回覆機器人
  • 檔案傳輸、語音/視訊邀請
  • 群組管理(IMessengerGroups、IMessengerGroup)

注意事項

  • 需安裝 MSN Messenger 6.0+ 客戶端
  • 使用者必須已登入 Messenger
  • Vista/Win7+ 需考慮 UAC 與整合層級(可能需以相同權限執行)
  • MSN Messenger 已停止服務,此技術僅供歷史研究/遷移參考
  • 現代替代方案:Microsoft Graph API (Teams/Outlook)、Skype Web SDK、WebRTC

結語

MSN Messenger COM 介面展示了早期 Windows 即時通訊平台的開放生態。透過 #import 導入 Type Library,VC++ 可用智慧指標優雅地存取聯絡人資料。雖 MSN 已成歷史,但此 COM 整合模式(Type Library → 智慧指標 → 集合列舉)在 Office 自動化、Windows Shell 擴充、第三方 SDK 整合中依然普遍適用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved