不知道微软是否基于安全原因考虑,其提供的 MessengerAPI 和 IMessengerAddIn 功能上都大打折扣。本文讲述如何调用 MessengerAPI。 引入 MessengerAPI 在项目中添加 COM 引用 "Messenger API Type Library",注意该 COM 的文件路径应该是 "c:\program file\MSN Messenger\msnmsgr.exe"。如果不是可以使用下面的命令注册该 COM。 C:\WINDOWS\system32\URTTemp>regtlib.exe "c:\program files\msn messenger\msnmsgr.exe\2" 然后添加名字空间,创建 Messenger 对象。 using MessengerAPI; // ... MessengerClass msn = new MessengerClass(); 1. 登录 // 登录 (我用 Windows Live Messenger 8 不起作用。晕~~~) //msn.Signin(0, "abc@hotmail.com", "pasword"); // 自动登录 (使用你保存的用户名和密码自动登录) //msn.AutoSignin(); // 注销 //msn.Signout(); 2. 主窗体 可显示、关闭主窗体,获取或设置主窗体位置、大小。IMessengerWindow mainForm = msn.Window as IMessengerWindow; mainForm.Show(); //mainForm.Close(); //mainForm.Left = 1; //mainForm.Top = 1; //mainForm.Height = 100; //mainForm.Width = 100; 3. 个人信息及状态 本地用户名称、登录名为只读,没有接口设置个人状态信息。 msn.MyStatus = MISTATUS.MISTATUS_BUSY; // 设置状态 Console.WriteLine(msn.MyFriendlyName); // 名称 Console.WriteLine(msn.MySigninName); // 登录名(邮件地址) 4. 联系人组 创建组msn.CreateGroup("我的同事", ((IMessengerServices)msn.Services).PrimaryService); 联系人组IMessengerGroups groups = msn.MyGroups as IMessengerGroups; foreach (IMessengerGroup group in groups) { Console.WriteLine(group.Name); // 删除组 if (group.Name == "我的同事") groups.Remove(group); // 显示该组下所有联系人 foreach (IMessengerContact c in (IMessengerContacts)group.Contacts) Console.WriteLine("\t{0}", c.SigninName); } 5. 联系人 添加联系人。下面的代码将打开添加联系人对话框,可以使用默认联系人地址,也可以为null。msn.AddContact(0, "abc@hotmail.com"); 联系人列表IMessengerContacts contacts = msn.MyContacts as IMessengerContacts; foreach (IMessengerContact contact in contacts) { Console.WriteLine("{0};{1};{2};{3}", contact.FriendlyName, contact.SigninName, contact.Status, contact.Blocked); // 删除联系人 if (contact.SigninName == "abc@hotmail.com") contacts.Remove(contact); } 获取联系人对象 (在很多操作中需要使用联系人对象作为参数)IMessengerContact contact = msn.GetContact("abc@hotmail.com", msn.MyServiceId) as IMessengerContact; 6. 发送消息 MessengerAPI 取消了一些功能,其中就包括发送消息和消息事件。我们可以使用 System.Windows.Forms.SendKeys 向聊天窗口发送按键来完成消息发送。 IMessengerContact contact = msn.GetContact("abc@hotmail.com", msn.MyServiceId) as IMessengerContact; if (contact != null) { // 打开聊天窗口 IMessengerConversationWnd dialog = msn.InstantMessage(contact) as IMessengerConversationWnd; dialog.Show(); // 确保聊天窗口为当前活动窗口。 //Thread.Sleep(1000); // 在 ConsoleApplication 中适当延迟,否则 SendKeys 好像时灵时不灵。 string s = "Hello, World! " + DateTime.Now.ToString(); SendKeys.SendWait(s); // 发送消息按键。 SendKeys.SendWait("{ENTER}"); // 回车发送。 // 邀请其他人加入 //dialog.AddContact(msn.GetContact("xxx@hotmail.com", msn.MyServiceId)); // 查看当前聊天联系人列表 //foreach (IMessengerContact c in (IMessengerContacts)dialog.Contacts) //{ // Console.WriteLine(c.SigninName); //} // 关闭聊天窗口 //dialog.Close(); } 7. 其他 // 打开音视频设置窗口 //msn.MediaWizard(0); // 打开当前登录关联的 Hotmail 邮箱。 //msn.OpenInbox(); // 打开选项窗口 //msn.OptionsPages(0, MOPTIONPAGE.MOPT_ACCOUNTS_PAGE); // 获取文件保存目录 //Console.WriteLine(msn.ReceiveFileDirectory); // 打开 Hotmail 网页,给指定联系人写邮件。 //msn.SendMail(contact); // 开启视频通讯 //msn.StartVideo(contact); // 开启音频通讯 //msn.StartVoice(contact); // 查看联系人档案文件 //msn.ViewProfile(contact); 8. 事件 事件使用比较简单,看名称就知道干什么用的。 public event OnAppShutdown; public event OnContactAddedToGroup; public event OnContactBlockChange; public event OnContactFriendlyNameChange; public event OnContactListAdd; public event OnContactListRemove; public event OnContactPagerChange; public event OnContactPhoneChange; public event OnContactPropertyChange; public event OnContactRemovedFromGroup; public event OnContactStatusChange; public event OnEmoticonListChange; public event OnGroupAdded; public event OnGroupNameChanged; public event OnGroupRemoved; public event OnIMWindowContactAdded; public event OnIMWindowContactRemoved; public event OnIMWindowCreated; public event OnIMWindowDestroyed; public event OnMyFriendlyNameChange; // 本地用户更改显示图片时触发。 public event OnMyPhoneChange; public event OnMyPropertyChange; // 本地用户改变状态时触发(包括与服务连接等系统状态)。 public event OnMyStatusChange; // 本地用户登录时触发。 public event OnSignin; // 本地用户注销时触发。 public event OnSignout; // 关联邮箱接收到新的未读邮件时触发。 public event OnUnreadEmailChange; ---------- 使用以上这些功能只能做些依赖客户端的小玩意,如果要开发一个类似 XiaoI 那样的群恐怕要使用 DotMSN 才行。另外,还可以考虑使用 APIHook 进行一些更高级的功能开发。 |
|