使用 C# 和 Windows Forms 增强的 MSN Messenger






3.71/5 (4投票s)
2007年4月26日
4分钟阅读

67127

1717
一个将提供 MSN Messenger 中不存在的功能的应用程序
引言
我们使用 MSN Messenger 已经很多年了。从最初发布以来,它的功能和用户界面都得到了很大的改进。但是,它仍然缺少一些在特定情况下可能很有用的功能。因此,我设计了这个应用程序,它将提供 MSN Messenger 目前不具备的某些功能。我使用 C# 和 Windows Forms 在 VS.NET 2003 中设计了这个应用程序。我将简单介绍一下这个应用程序,然后解释这个应用程序的设计和编码。
本应用程序的特性
- 允许您查看联系人列表和消息历史记录
- 允许您按日期浏览消息历史记录
- 允许您将选定用户的消息历史记录通过电子邮件发送
- 允许您监控任何联系人的状态
- 当联系人状态更改时自动重新加载联系人状态
- 维护您发送过消息的近期用户的列表
创建此应用程序的步骤
首先,在 C# 中创建一个新的 Windows 项目,并将一个名为 *Interop.MessengerAPI.dll* 的 COM DLL 添加到项目的引用中。此 DLL 位于附件的代码文件夹中,您也可以在 Google 上搜索它。然后,按照下图设计主窗体。
在这里,我使用 ListView 控件来显示所有联系人。然后,我设计了 MainMenu 来执行以下操作:按状态对用户进行排序,通知选定联系人的状态更改,按日期查看联系人的消息历史记录,将选定用户的消息历史记录通过电子邮件发送,维护您发送过消息的近期用户列表,在用户更改状态时自动更新 ListView,以及退出应用程序。创建主窗体后,添加新的窗体,并分别命名为 historywindow、alerts 和 MessageViewer。按照下图设计这些窗体。
历史记录窗口
警报窗口
消息查看器窗口
现在我将解释每个窗体编码中的重要步骤。
主窗体 (Form1.cs)
在窗体加载时,我创建了一个 MSN Messenger 的实例。之后,我获取消息历史记录的路径,该路径将存储在注册表中。此注册表条目因计算机而异。您可以通过搜索带有键 MessageLogPath 的注册表来获取消息历史记录的路径。之后,将此键路径复制并粘贴到 app.config 中,在 registryPath 键的值字段中。
通常,MSN Messenger 会以 XML 文件(带有默认 XSL 文件用于格式化)的形式,在 MessageLogPath 注册表条目中存储每个用户历史记录的路径。
之后,我添加了一个方法,当用户更改状态时调用该方法。该方法会使用更新后的所有用户状态更新 ListView 控件。最后,我循环遍历 Messenger 的每个联系人,并将它们添加到 ListView 中,其中包含一些隐藏的列以及适当的颜色。
ShowUserswho 菜单项将根据用户的状态对用户进行排序。这里我只是循环遍历每个联系人,并根据他们的状态将他们添加到 ListView 中。
ViewSelectedUserHistory 菜单项将在新窗口中显示选定用户的历史记录。
Upload History 菜单项允许我们首先选择要发送电子邮件的用户历史记录,然后将选定用户的历史记录发送到您在文本框中指定的电子邮件地址。通过使用此功能,我们可以从任何系统查看我们的消息历史记录。
Recentusers 菜单项将维护您最近发送过消息的用户列表。
HistoryWindow
在 Form1 中,我们将选定用户的消息历史记录复制到一个名为 `mesghistorydetails` 的字符串变量中,并在 historywindow 文本框中显示它。我使用此代码来获取选定用户的历史记录。
IMessengerContact selectedcontact = msn.GetContact(
listView1.SelectedItems[0].SubItems[1].Text,
listView1.SelectedItems[0].SubItems[3].Text) as IMessengerContact;
IMessengerConversationWnd cw = msn.InstantMessage(
selectedcontact) as IMessengerConversationWnd;
if(cw.History.ToString()!="")
{
string mesghistory=cw.History.ToString();
mesghistory= mesghistory.Replace(msn.MyFriendlyName,"You ");
mesghistory=mesghistory.Replace(
selectedcontact.FriendlyName,"He/She ");
IMessengerWindow window=cw as IMessengerWindow ;
mesghistoryContactName=selectedcontact.FriendlyName;
window.Close();
mesghistorydetails=mesghistory;
HistoryWindow objform2 = new HistoryWindow();
objform2.Show();
在这里,我从 ListView 控件获取选定用户的签名名称和服务 ID。之后,我使用 `IMessengerConversationWnd` 对象获取他的/她的历史记录。
Alerts Window
在这里,我获取所有联系人的友好名称,并将它们添加到组合框中。当联系人更改其状态时,将调用该方法。在此方法中,我将他/她以前和当前的状态添加到列表框中。通过这种方式,我们可以知道任何联系人状态更改的确切时间。通常,我用它来跟踪我领导的状态。每当他的状态变为“离开”时,我就会更认真地开始工作。
消息查看器窗口
通常,任何联系人的消息历史记录都将存储在本地硬盘上,路径由 MessageLogPath 注册表键指定,形式为 XML 文件。在这里,我们需要使用文件对话框控件浏览选定用户的消息历史记录文件。之后,我们可以根据其日期与当前日期之间的关系来查看消息历史记录。
最终的输出将是这样的。
我们还可以通过添加少量代码来进一步增强此 Messenger。我希望这些代码对大家都有用。我附上代码供进一步参考。