本文介紹如何將開源的 SysInfo 類庫(需先編譯為 DLL)整合至 MFC 專案《系統飛狐》中,實現 CPU、磁碟、記憶體等硬體資訊的擷取與顯示。作者分享了從 DOS 主控台測試到 MFC 視窗應用的完整遷移過程與關鍵轉換技巧。

圖 1:SysInfo 原始介面
SysInfo,提供 getCpuIdentification()、getCpuSpeed()、getNumProcessors()、getDriveStats() 等方法。SysInfo.dll(釋出版/偵錯版)與測試專案 SysInfoTester(主控台應用)。#if !defined(SYSINFO_LINKSTATIC)
#if defined(SYSINFO_EXPORTS)
#define DLL_CLASS __declspec(dllexport)
#else
#define DLL_CLASS __declspec(dllimport)
#pragma comment(lib, _DEBUG ? "SysInfoD.lib" : "SysInfo.lib")
#endif
#else
#define DLL_CLASS
#pragma comment(lib, _DEBUG ? "SysInfosD.lib" : "SysInfos.lib")
#endif
#include "sys/SysInfo.h"
#include <iostream>
#include <vector>
using namespace std;
void main() {
SysInfo sysInfo;
cout << "CPU資訊" << endl;
cout << "型號: " << sysInfo.getCpuIdentification() << endl;
cout << "速度: " << sysInfo.getCpuSpeed() << " MHz" << endl;
cout << "核心數: " << sysInfo.getNumProcessors() << endl;
// 磁碟資訊
const vector<DriveStats>* pv = sysInfo.getDriveStats();
for (auto it = pv->begin(); it != pv->end(); ++it) {
cout << "磁碟: " << it->getName()
<< " 總計: " << it->getTotalSpace()
<< " 可用: " << it->getFreeSpace() << endl;
}
system("pause");
}
SysInfo 回傳 std::string,MFC 使用 CString,需手動轉換:
#include "sys/SysInfo.h"
#include <string>
#include <vector>
void CDiskinfoDlg::OnInitDialog() {
SysInfo info;
const vector<DriveStats>* pvDriveStats = info.getDriveStats();
for (auto i = pvDriveStats->begin(); i != pvDriveStats->end(); ++i) {
std::string str1 = i->getName(); // 磁碟名
std::string str2 = i->getTotalSpace(); // 總容量
std::string str3 = i->getFreeSpace(); // 可用空間
// std::string → CString 技巧:複製到 char 陣列再指派
char buf[256];
str1.copy(buf, str1.length(), 0); buf[str1.length()] = '\0';
CString csName = buf;
str2.copy(buf, str2.length(), 0); buf[str2.length()] = '\0';
CString csTotal = buf;
str3.copy(buf, str3.length(), 0); buf[str3.length()] = '\0';
CString csFree = buf;
CString str;
str.Format(_T("分區 %s (總計:%s 可用:%s)"), csName, csTotal, csFree);
m_DiskTree.InsertItem(str, rootItem);
}
}

圖 2:系統飛狐中顯示磁碟資訊
本文展示了從取得第三方 DLL 到完成 MFC 整合的完整路徑,包括建置設定、介面調用、資料轉換與 UI 呈現。完整原始碼可供下載,歡迎參考改良。