一、在我的系統設置軟件《系統飛狐》中,應用到一個獲取系統信息的源代碼 ,在VC++中經過巧妙轉換應用到我的軟件中,取得了良好的效果,也許很多人都見過這個簡單的獲取系統信息的類sysinfo,在系統飛狐中充分擴展了它的功能 。該類首先需要編譯一個DLL文件然後再調用它根據需要生成我們自己的應用程序。
圖一 sysinfo界面
二、先編譯DLL文件SysInfo.dll,然後在工程SysInfoTester中調用它,示例代碼為DOS程序:
//在頭文件中先調用DLL文件
#if !defined(SYSINFO_LINKSTATIC)
# if defined(SYSINFO_EXPORTS)
# undef DLL_CLASS
# define DLL_CLASS __declspec(dllexport)
# else
# undef DLL_CLASS
# define DLL_CLASS __declspec(dllimport)
# if defined(_DEBUG)
# pragma comment(lib, "SysInfoD.lib")
# else
# pragma comment(lib, "SysInfo.lib")
# endif
# endif
#else
# define DLL_CLASS
# if defined(_DEBUG)
# pragma comment(lib, "SysInfosD.lib")
# else
# pragma comment(lib, "SysInfos.lib")
# endif
#endif
在主函數中實現獲取系統信息的功能,以CPU為例子
using namespace std;
void main(int argc, char* argv[])
{
SysInfo sysInfo;
cout << "---------------------" << endl;
cout << "CPU信息" << endl;
cout << "---------------------" << endl;
cout << "CPU型號: " << sysInfo.getCpuIdentification() << endl;//顯示cpu型號
cout << "CPU速度: " << sysInfo.getCpuSpeed() << endl;
cout << "CPU個數: " << sysInfo.getNumProcessors() << endl;
cout << "Family: " << sysInfo.getCpuFamily() << endl;
cout << "Model: " << sysInfo.getCpuModel() << endl;
cout << "Stepping: " << sysInfo.getCpuStepping() << endl;
system("pause");
system("cls");
}
三、在系統飛狐中,充分發掘sysinfo類的強大功能,經過相應的轉換就可以生成基於windows平台的代碼,首先要調用本文源代碼中的頭文件,以便於系統飛狐獲取相應的功能,在這裡我不一一詳細介紹,只列舉關鍵的代碼起一個拋磚引玉的作用 :
// DiskinfoDlg.cpp :
#include "stdafx.h"
#include "fox.h"
#include "DiskinfoDlg.h"
#include "sys/SysInfo.h" //調用sysinfo.h
#include <string>
#include <iostream>
vector<DriveStats> const* pvDriveStats = info.getDriveStats();
vector<DriveStats>::const_iterator i;
for (i = pvDriveStats->begin(); i != pvDriveStats->end(); i++)
{
using namespace std;
std::string str1,str2,str3; //注意,這個不同於一般的CString類
CString string1,string2,string3;
str1=i->getName();//關鍵代碼
int c=str1.length();
char cfz[10];
str1.copy(cfz,c,0);
string1=cfz; //巧妙的轉換把namespace類型轉換為CString類型
str2=i->getTotalSpace();
c=str2.length();
str2.copy(cfz,c,0);
string2=cfz;
str3=i->getFreeSpace();
c=str3.length();
str3.copy(cfz,c,0);
string3=cfz;
Str.Format("Subarea %s (Total:%s Avail:%s)",string1,string2,string3);
m_DiskTree.InsertItem(Str, root1);
}
圖二. 調用sysinfo得到系統信息
四、結束語
sysinfo系列代碼是我以前從網上下載的老代碼,同時在原有的基礎上擴展了它的功能,然後在系統飛狐中以舊翻新,也算是一條捷徑吧,不然以本人的個人能力和時間是無法完成系統飛狐這麼多程序的編制 。作者拙見,代碼永遠是寫不完的,重要的是如何吸收以前的經驗然後轉變為自己的東東,同時充分考慮它以後的擴展性和適用性就能取得事半功倍的效果,懇請大家批評指正,時間有限不能一一詳細敘述了,如有任何問題請到作者的VC++資源中心上發帖子,由於郵件過多無法保證一一回復!
本文配套源碼