• 文章
  • 查找 Skype 的默认帐户名
发布于 2014 年 10 月 20 日(最后更新:2014 年 10 月 20 日)

查找 Skype 的默认帐户名

评分:3.1/5(29 票)
*****



简介

本技巧旨在向您展示如何找到 Skype 的默认帐户名。

问题

我需要编写一个函数,用于从指定计算机上的默认 Skype 帐户中提取数据。为此,我首先需要定位默认帐户名。我发现了一个简单的方法。

解决方案

Skype 默认帐户的名称存储在一个名为“shared.xml”的文件中。该文件位于 C:\users\用户名\AppData\Roaming\Skype\

首先,我们需要找到这个位置,因为我们需要访问的确切路径因用户名而异。

为此,我们使用

SHGetSpecialFolderPath

并传递 CSIDL_APPDATA 作为其参数。

根据 MSDB 的说法,“该文件系统目录用作特定于应用程序的数据的公共存储库。”。

因此,为了获取该路径,我们调用

1
2
TCHAR 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
12
rapidxml::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  系统的一部分,该系统已在许多组织中实施)。


上关注



文章顶部






附件:[source_code.zip]