65.9K
CodeProject 正在变化。 阅读更多。
Home

Windows Messenger 私有 API

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.73/5 (4投票s)

2005 年 10 月 2 日

3分钟阅读

viewsIcon

61537

downloadIcon

593

解释如何使用 Windows Messenger 的私有 API,并提供一个包装类来处理质询-响应过程。

引言

Windows Messenger 提供了 API 用于访问其内部对象,例如,枚举已登录用户的联系人列表。此 API 作为 COM 对象公开,通过**Messenger API 类型库** (msmsgs.exe)。

此 API 的主要缺点是它缺少一些基本功能。例如,无法以编程方式将给定用户添加到联系人列表,而无需用户交互(我们只能启动“添加联系人...”对话框)。

本文提出了针对此不幸问题的解决方案,即使用 Windows Messenger 私有 API。

Windows Messenger 的私有 API

Windows Messenger 还有另一组 API,可能仅供内部 MS 使用。此 API 也作为 COM 对象公开,通过**Messenger 私有类型库** (msmsgs.exe)。除其他外,该 API 提供了以编程方式将用户添加到联系人列表的功能,无需任何用户交互。

然而,尝试使用此 API 发现,每个方法都会抛出一个异常,声称对象未“解锁”。MSDN 文档解释说,应用程序需要在质询-响应过程中进行身份验证,这需要使用 ID / KEY 对。后者过去可能由 MS 颁发,但现在不行了。

随附的 C# 源代码包演示了如何解锁私有 API。

里面有什么?

源代码包包含一个 VS2003 项目(控制台应用程序)和两个 C# 类

  • MessengerUnlocker 通过执行质询-响应过程来解锁给定的 MessengerPriv 对象。这是本文的核心内容。
  • MessengerUnlockerDemo 只是一个 Main 方法,它创建、解锁并使用 MessengerPriv 对象。为了证明后者确实被解锁了,一个硬编码的用户被添加到正在运行的用户的联系人列表中。

源代码以标准的 C# 风格进行文档化。在这里和那里,源代码链接到外部互联网网站,以进一步解释关于质询-响应过程。

故障排除

在运行演示之前,请确保您已安装、运行并登录 Windows Messenger。

在第二次运行演示之前,从联系人列表中删除新添加的用户。尝试添加已添加的联系人会导致抛出异常。

免责声明

此代码严重依赖于私有和不受支持的 API,这些 API 随时可能更改(评估 API 在未来实际更改的可能性留给读者)。本文是我好奇心和业余时间的产物。如果您将您的生产代码建立在此基础上,您就疯了

该代码已针对 Windows Messenger 4.7.3001 进行测试,但同样也可能完美地适用于其他版本的 Windows Messenger(特别是 4.6)。它可能不适用于任何版本的 MSN Messenger。

谢谢

特别感谢 http://www.hypothetic.org/docs/msn/,感谢他们对 Messenger 协议的精彩文档。这些了不起的家伙为我提供了拼图中最后缺失的部分 - 有效的 ApplicationId / ApplicationKey 对 :)

© . All rights reserved.