引入 MessengerAPI
在项目中添加 COM 引用 "Messenger API Type Library",注意该 COM 的文件路径应该是 "c:/program file/MSN Messenger/msnmsgr.exe"。如果不是可以使用下面的命令注册该 COM。
然后添加名字空间,创建 Messenger 对象。
1. 登录
2. 主窗体
可显示、关闭主窗体,获取或设置主窗体位置、大小。
3. 个人信息及状态
本地用户名称、登录名为只读,没有接口设置个人状态信息。
4. 联系人组
创建组
联系人组
5. 联系人
添加联系人。下面的代码将打开添加联系人对话框,可以使用默认联系人地址,也可以为null。
联系人列表
获取联系人对象 (在很多操作中需要使用联系人对象作为参数)
6. 发送消息
MessengerAPI 取消了一些功能,其中就包括发送消息和消息事件。我们可以使用 System.Windows.Forms.SendKeys 向聊天窗口发送按键来完成消息发送。
7. 其他
8. 事件
事件使用比较简单,看名称就知道干什么用的。
----------
使用以上这些功能只能做些依赖客户端的小玩意,如果要开发一个类似 XiaoI 那样的群恐怕要使用 DotMSN 才行。另外,还可以考虑使用 APIHook 进行一些更高级的功能开发。
在项目中添加 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();
// ...
MessengerClass msn = new MessengerClass();
1. 登录
// 登录 (我用 Windows Live Messenger 8 不起作用。晕~~~)
//msn.Signin(0, "abc@hotmail.com", "pasword");
// 自动登录 (使用你保存的用户名和密码自动登录)
//msn.AutoSignin();
// 注销
//msn.Signout();
//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;
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); // 登录名(邮件地址)
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);
}
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);
}
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();
}
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);
//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;
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 进行一些更高级的功能开发。