[C#]用MessagerAPI與MSN互動

[C#]用MessagerAPI與MSN互動

今天在玩程式控制MSN來發送Mail的功能,依稀記得之前透過這個範例非常簡單就自動傳送訊息給MSN了:

3分鐘學會使用程式發送msn訊息,dotNet C#篇(二)

它的架構挺單純的,是先註冊好MSN帳號,然後放在Server上,讓MSN機器人透過這個帳號來發送訊息,上網大概查了一下它的實作原理,直覺認為應該是由微軟提供的MessagerAPI來完成,因此我就寫了一個很簡單的範例,可以得到我的聯絡人清單資訊:

image

方法很簡單,請依以下的步驟就可達成:

Step1:加入Messenger API Type Library的COM參考。

image

 

Step2:加入namespace的using

 

Step3:加入以下的程式碼:

public MessengerAPI.MessengerClass Messager;

private void Form1_Load(object sender, EventArgs e)
{
    //初始化
    Messager = new MessengerAPI.MessengerClass();

    //將每個取到的聯絡人資訊放到ListView上
    foreach (MessengerAPI.IMessengerContact tContact in (IMessengerContacts)Messager.MyContacts)
    {
        listView1.Items.Add(new ListViewItem(new string[] { tContact.FriendlyName.ToString(), tContact.SigninName.ToString(), tContact.Status.ToString(), tContact.ServiceId.ToString() }));
    }
}

 

到這邊已經可以將本機上的聯絡人資訊全都撈出來了,看到的畫面就是這個:

image

 

如果我想點選該聯絡人兩下後跳出訊息輸入視窗怎麼弄,就在listview的DoubleClick事件中加入這段Code:

{
    //取得點選的聯絡人
    IMessengerContact tContact = Messager.GetContact(listView1.SelectedItems[0].SubItems[1].Text, listView1.SelectedItems[0].SubItems[3].Text) as IMessengerContact;
    //選定聯絡人並建立訊息窗
    IMessengerConversationWnd tMsgConversationWnd = Messager.InstantMessage(tContact) as IMessengerConversationWnd;
    IMessengerWindow tWindow = tMsgConversationWnd as IMessengerWindow;
    //呼叫訊息窗
    tWindow.Show();
}

這個API目前只能取的聯絡人、新增聯絡人、新增/修改群組...但欠缺了一個很重要的功能就是Send Message,網路上有人提到用SendKeys來做,但我覺得這樣的做法有點不夠實際,另外有人提可以呼叫Win32 API來完成,不過這部分我還沒試驗到,有進展再post出來跟大家分享吧。

 

參考資料:

Enhanced MSN Messenger in C# using Windows Forms

游舒帆 (gipi)

探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。