[C#]用MessagerAPI與MSN互動
今天在玩程式控制MSN來發送Mail的功能,依稀記得之前透過這個範例非常簡單就自動傳送訊息給MSN了:
3分鐘學會使用程式發送msn訊息,dotNet C#篇(二)
它的架構挺單純的,是先註冊好MSN帳號,然後放在Server上,讓MSN機器人透過這個帳號來發送訊息,上網大概查了一下它的實作原理,直覺認為應該是由微軟提供的MessagerAPI來完成,因此我就寫了一個很簡單的範例,可以得到我的聯絡人清單資訊:
方法很簡單,請依以下的步驟就可達成:
Step1:加入Messenger API Type Library的COM參考。
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() }));
}
}
到這邊已經可以將本機上的聯絡人資訊全都撈出來了,看到的畫面就是這個:
如果我想點選該聯絡人兩下後跳出訊息輸入視窗怎麼弄,就在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堂課》,為培養台灣未來的領袖而努力。 |