簡介
本技巧旨在向您展示如何找到 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]