Chinaunix首页 | 论坛 | 博客
  • 博客访问: 537455
  • 博文数量: 576
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5020
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(576)

文章存档

2011年(1)

2008年(575)

我的朋友

分类:

2008-10-14 14:53:54

《系统飞狐》中获取系统信息的方法



一、在我的系统设置软件中,应用到一个获取系统信息的源代码 ,在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 
#include  

vector const* pvDriveStats = info.getDriveStats();
vector::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系列代码是我以前从网上下载的老代码,同时在原有的基础上扩展了它的功能,然后在系统飞狐中以旧翻新,也算是一条捷径吧,不然以本人的个人能力和时间是无法完成系统飞狐这么多程序的编制 。作者拙见,代码永远是写不完的,重要的是如何吸收以前的经验然后转变为自己的东东,同时充分考虑它以后的扩展性和适用性就能取得事半功倍的效果,恳请大家批评指正,时间有限不能一一详细叙述了,如有任何问题请到作者的上发帖子,由于邮件过多无法保证一一回复!

--------------------next---------------------


阅读(297) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~