其實它們都是把消息存放在本地的,因此只需要一點點工作量,就能輕鬆的瀏覽Messenger的消息歷史。
以MSN Messenger7.0爲例,它的消息存放在“My Document/我接收到的文件/帳號/歷史記錄”目錄下。
該目錄中有如下兩類文件
- xml文件,存放消息的內容
- xsl文件,用於控制消息的顯示格式
static void ShowLocalMSNMessage()
{
string path = @"D:/My Document/我接收到的文件/帳號/歷史記錄";
StringBuilder sb = new StringBuilder();
sb.Append("<?xml version=/"1.0/" encoding=/"utf-8/"?>");
sb.Append(Environment.NewLine);
sb.Append("<?xml-stylesheet type='text/xsl' href='MessageLogxsl'?>");
sb.Append(Environment.NewLine);
sb.Append("<Log>");
sb.Append(Environment.NewLine);
DirectoryInfo info = new DirectoryInfo(path);
foreach (FileInfo fileInfo in info.GetFiles("*.xml"))
{
Stream stream = new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.Read);
XmlReader reader = XmlReader.Create(stream);
XPathDocument doc = new XPathDocument(reader);
XPathNavigator nav = doc.CreateNavigator();
XPathNodeIterator iter = nav.Select("/Log");
while (iter.MoveNext())
{
sb.Append(iter.Current.InnerXml);
}
}
sb.Append(Environment.NewLine);
sb.Append("</Log>");
File.WriteAllText(path + "All.xml", sb.ToString(), Encoding.UTF8);
}
這樣我們就得到了包含所有消息的All.xml文件,直接用IE打開就能瀏覽所有的消息了。
那麼如何只查看和某個朋友的聊天記錄了?我們只需要稍微修改一下MessageLog.xsl即可
首先,在“<!-- variables -->”後面插入
爲了實現按時間排序,把“<tbody style='vertical-align:top'>”後面用於按SessionID排序的代碼改成按時間排序
<xsl:sort select='@DateTime' order='ascending'/>
</xsl:apply-templates>
最後,將“<xsl:template match="Message">”和“</xsl:template>”之間的代碼用下面的語句包起來即可
</xsl:if>