• 文章
  • 查詢 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]