Windows Messenger 私有 API






1.73/5 (4投票s)
2005 年 10 月 2 日
3分钟阅读

61537

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 对 :)