`
ihuashao
  • 浏览: 4744654 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

使用 MessengerAPI 控制 MSN Messenger

阅读更多
引入 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 进行一些更高级的功能开发。
分享到:
评论

相关推荐

    MessengerAPI.rar

    MSN Messenger API允许开发者访问和控制MSN Messenger的功能,包括发送和接收消息、添加和删除联系人、查看在线状态、发送文件、参与多人聊天等。开发者可以通过这个API来创建插件、增强版客户端或者其他基于MSN ...

    msn api msn api

    4. **替代方案**:由于MSN服务已停用,考虑使用现代的通讯API,如Skype API或微软提供的其他云服务API。 总的来说,尽管MSN API现在已过时,但它代表了一个时代的网络通讯技术,并为后来的即时通讯API和平台奠定了...

    读取MSN好友列表,MSN API 接口

    在MSN案例中,API提供了对MSNMessenger服务的访问权限,允许开发人员获取或操作用户数据,如好友列表。 2. **身份验证**:在使用MSN API时,开发者首先需要进行身份验证,以证明他们有权访问特定的用户账户。这通常...

    MSN Messenger模仿界面

    【MSN Messenger模仿界面】 在IT领域,特别是软件开发中,模仿流行应用的界面设计是一种常见的学习方式。"MSN Messenger模仿界面"就是一个实例,它提供了一种通过Visual C++(简称VC)来实现类似MSN Messenger登录...

    building msn messenger activity applications

    4. **部署**:将应用上传至服务器,确保它可以被MSNMessenger用户访问和使用。 5. **调试**:测试应用的性能,解决可能出现的错误和问题。 6. **竞赛与推广**:可能会有活动应用的构建比赛,以鼓励创新和提高应用的...

    用JAVA实现MSN Messenger的功能

    10. **协议实现**:MSN Messenger使用了专有的协议,开发者需要深入理解这个协议并实现它的Java版本。这可能涉及到解析和构造特定的网络报文。 总结来说,用Java实现MSN Messenger的功能是一项复杂的任务,需要掌握...

    用JAVA实现MSN Messenger的功能.doc

    5. `MsnMessenger.login()` 和 `MsnMessenger.logout()`:登录和注销MSN服务。 **总结** 通过JML库,Java开发者能够轻松地构建具备类似MSN Messenger功能的应用程序。这个DEMO代码提供了一个基础框架,开发者可以...

    MSNMessenger的完整克隆

    【标题】"MSNMessenger的完整克隆"指的是一个软件项目,它旨在模仿或复制微软的MSN Messenger服务的功能和用户体验。MSN Messenger是微软在互联网早期推出的一款即时通讯软件,允许用户进行文字聊天、语音通话、视频...

    MSN_Messenger模仿界面

    5. **网络通信**:虽然原始的MSN_Messenger使用了专有的协议进行通信,但模仿时,开发者可以选择使用标准的IM协议,如XMPP或自定义简单的TCP/IP协议,实现用户之间的消息传递。 6. **多线程与异步处理**:为了保证...

    使用DotMSN 20开发MSN机器人.doc

    使用 DotMSN 开发 MSN 机器人需要创建一个 Messenger 对象,并使用该对象来连接 MSN 服务器。连接成功后,可以使用 Messenger 对象来同步好友列表、发送消息、接收消息等。 4. Messenger 对象的使用 Messenger ...

    获取MSN Messenger的联系人列表 C++源代码

    首先,为了获取MSN Messenger的联系人列表,我们需要理解MSN Messenger使用的协议。MSN Messenger使用了专有的实时通信协议,称为“简单对象访问协议”(Simple Object Access Protocol, SOAP)以及“XML数据交换格式...

    商业编程-源码-取MSN Messenger的联系人列表.zip

    在这个场景中,开发人员可能需要使用MSN Messenger提供的API(应用程序接口)来获取用户的联系人信息。MSN Messenger曾使用微软的WLM(Windows Live Messenger)协议,这通常涉及XML和HTTP协议,开发者需要理解和...

    Delphi中用API实现在MSN的信息提示

    - **用途**:可以用来连接到MSNMessenger服务器或其他网络资源。 - **`WNetCancelConnection2`** - **功能**:结束一个网络连接。 - **用途**:当不再需要与网络资源通信时,可以调用此函数来断开连接。 3. **...

    msn sdk msn sdk

    开发者可以从中了解到如何利用这些API来创建和管理MSN Messenger的相关活动,如发送消息、接收状态更新、添加联系人等。 在使用MSN SDK时,开发者首先需要了解核心概念,例如: 1. **身份验证**:API提供了用户...

    MSN Messenger源码

    1. **网络通信协议**:MSN Messenger 使用了专有的协议(如Simple Object Access Protocol, SOAP)来实现客户端与服务器之间的通信。理解这些协议的工作方式对于构建类似的应用至关重要,包括消息发送、状态更新和...

    邮箱通讯录 MSN好友列表

    但如果你需要处理遗留的MSN数据,可以考虑使用旧版的MSN Messenger API,这通常涉及到对XML文件的解析,因为好友列表通常会以XML格式保存在本地。然而,微软并未公开提供现代版本的API来获取Skype或旧版MSN的好友...

    google code上的msn机器人测试列子.rar

    5. **XML-RPC或SOAP协议**:早期的MSN Messenger API可能使用XML-RPC或SOAP协议进行通信,这两种协议都是在分布式环境中交换结构化数据的标准方式。 6. **开源文化**:Google Code代表了开源软件的协作精神,这个...

Global site tag (gtag.js) - Google Analytics