简介
本技巧旨在向您展示如何找到 Skype 的默认帐户名。
问题
我需要编写一个函数,用于从指定计算机上的默认 Skype 帐户中提取数据。为此,我首先需要定位默认帐户名。我发现了一个简单的方法。
解决方案
Skype 默认帐户的名称存储在一个名为“shared.xml”的文件中。该文件位于 C:\users\用户名\AppData\Roaming\Skype\。
首先,我们需要找到这个位置,因为我们需要访问的确切路径因用户名而异。
为此,我们使用
SHGetSpecialFolderPath
并传递 CSIDL_APPDATA 作为其参数。
根据 MSDB 的说法,“该文件系统目录用作特定于应用程序的数据的公共存储库。”。
因此,为了获取该路径,我们调用
1
2TCHAR szFileName[MAX_PATH + 1]; SHGetSpecialFolderPath(0, szFileName, CSIDL_APPDATA, 0);
这个文件显然是一个XML 文件
。所以下一步是打开该路径下的 “shared.xml” 文件,并从中提取所需的信息。
为此,我们需要一个 XML 解析器,我推荐使用 RapidXML。RapidXml 是一个非常快速的开源 XML 解析器,它保持了其可用性,具有可移植性,并且与 W3C 兼容。它是一个用现代 C++ 编写的原位解析器,其解析速度接近于对相同数据执行 strlen 函数的速度。
为了找到默认帐户名,我们首先需要在此文件中找到“Account”元素,然后在其中找到“default”元素,帐户名就在那里。
1
2
3
4
5
6
7
8
9
10
11
12rapidxml::xml_node<char>* node_account = 0; if (GetNodeByElementName(root, "Account", &node_account) == true) { rapidxml::xml_node<char>* node_default = 0; if (GetNodeByElementName(node_account, "default", &node_default) == true) { swprintf(result, 100, L"%hs", node_default->value()); free(xmlData); return true; } }
兴趣点
我借此机会演示了一个最小的 MFC 应用程序,它从零开始创建,未使用 Visual Studio 向导,同时仅包含必要的定义和头文件。
本技巧附带的源代码是在 Visual Studio 2013 Ultimate 下创建和编译的。
自本技巧发布以来,我被要求添加有关获取已存储的 Skype 聊天记录和其他已存储信息的进一步说明,我计划在我的下一个技巧或文章中进行介绍。
关于作者
Michael N. Haephrati 是一位企业家、发明家和音乐家。Haephrati 从 HarmonySoft 开始,参与了许多项目,设计了 Rashumon,这是第一款用于 Amiga 计算机的图形化多语言文字处理器。在 1995-1996 年期间,他作为合同工在库比蒂诺的 Apple 公司工作。曾在一家研究机构工作,为以色列的信用评分领域发展迈出了第一步。他创立了 Target Scoring,并开发了一个名为 ThiS 的信用评分系统,该系统基于地理统计数据,参与方包括 VISA CAL、Isracard、Bank Leumi 和 Bank Discount(Target Scoring,作为一家大型以色列机构的业务发展副总裁)。
2000 年,他创立了 Target Eye,并开发了第一个名为 Target Eye 的远程 PC 监控系统。
其他项目包括:数据清洗(作为 DataTune 系统的一部分,该系统已在许多组织中实施)。
关注 @haephrati
附件:[source_code.zip]