vc 如何获取电脑型号 SN等硬件信息

xingyuxin 2012-08-31 01:18:37
最近要写个计算机管理的程序,想通过vc 获取计算机的型号,SN,硬盘等硬件信息。求各位大侠指点下,在线等。
...全文
1878 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gloveing 2012-09-03
  • 打赏
  • 举报
回复
我来一个:
//=====================================================================================
/* CPUID指令是intel IA32架构下获得CPU信息的汇编指令,
可以得到CPU类型,型号,制造商信息,商标信息,序列号,
缓存等一系列CPU相关的东西。
*/
#include <windows.h>
#include <iostream>
#include <string>

using namespace std;


//用来存储eax,ebx,ecx,edx四个寄存器的信息
DWORD deax;
DWORD debx;
DWORD decx;
DWORD dedx;

void ExeCPUID(DWORD veax) //初始化CPU
{
__asm
{
mov eax,veax
cpuid
mov deax,eax
mov debx,ebx
mov decx,ecx
mov dedx,edx
}
}

/* 在Intel Pentium以上级别的CPU中,有一个称为“时间戳(Time Stamp)”的部件,
它以64位无符号整型数的格式,记录了自CPU上电以来所经过的时钟周期数。
由于目前的CPU主频都非常高,因此这个部件可以达到纳秒级的计时精度。
这个精确性是上述两种方法所无法比拟的。
在Pentium以上的CPU中,提供了一条机器指令RDTSC(Read Time Stamp Counter)
来读取这个时间戳的数字,并将其保存在EDX:EAX寄存器对中
*/
long GetCPUFreq() //获取CPU频率,单位: MHZ
{
int start,over;
_asm
{
RDTSC
mov start,eax
}
Sleep(50);
_asm
{
RDTSC
mov over,eax
}
return (over-start)/50000;
}



/* 把eax = 0作为输入参数,可以得到CPU的制造商信息。
cpuid指令执行以后,会返回一个12字符的制造商信息,
前四个字符的ASC码按低位到高位放在ebx,中间四个放在edx,最后四个字符放在ecx。
*/
string GetManID() //获取制造商信息
{
char ID[25];
memset(ID,0,sizeof(ID));

ExeCPUID(0); //初始化
memcpy(ID+0,&debx,4); //制造商信息复制到数组
memcpy(ID+4,&dedx,4);
memcpy(ID+8,&decx,4);

return string(ID);
}


/* 在我的电脑上点击右键,选择属性,可以在窗口的下面看到一条CPU的信息,
这就是CPU的商标字符串。CPU的商标字符串也是通过cpuid得到的。
由于商标的字符串很长(48个字符),所以不能在一次cpuid指令执行时全部得到,
所以intel把它分成了3个操作,eax的输入参数分别是0x80000002,0x80000003,0x80000004,
每次返回的16个字符,按照从低位到高位的顺序依次放在eax, ebx, ecx, edx。
因此,可以用循环的方式,每次执行完以后保存结果,然后执行下一次cpuid。
*/
string GetCPUType()
{
const DWORD id = 0x80000002; //从0x80000002开始,到0x80000004结束
char CPUType[49];//用来存储CPU型号信息
memset(CPUType,0,sizeof(CPUType));//初始化数组

for(DWORD t = 0 ; t < 3 ; t++ )
{
ExeCPUID(id+t);
//每次循环结束,保存信息到数组
memcpy(CPUType+16*t+ 0,&deax,4);
memcpy(CPUType+16*t+ 4,&debx,4);
memcpy(CPUType+16*t+ 8,&decx,4);
memcpy(CPUType+16*t+12,&dedx,4);
}

return string(CPUType);
}

void main()
{
cout<<"本机CPU信息如下:"<<endl;
cout<<"CPU 主 频: "<<GetCPUFreq()<<" MHZ"<<endl;
cout<<"CPU 制造商: "<<GetManID()<<endl;
cout<<"CPU 型 号: "<<GetCPUType()<<endl;
cin.get();

}
xingyuxin 2012-09-03
  • 打赏
  • 举报
回复
没有人吗???
supersonic0410 2012-09-03
  • 打赏
  • 举报
回复
如果考虑所有厂商的所有计算机,不同型号可以有相同配置,相同型号可以有不同配置。
这种不是一对一的对应关系,你没法映射。

但如果你要管理的计算机就几个型号,每个型号的CPU,内存大小,硬盘大小,主板信息不一样的话,
你就可以通过读取上面信息进行判断。
fronz 2012-09-03
  • 打赏
  • 举报
回复
其它硬件信息似乎都有途径,但如楼上所说,计算机的型号与硬盘、cpu、主板等关键性能器件似乎没有相关性。所以很少作为硬件信息被统计。
easyrem 2012-09-03
  • 打赏
  • 举报
回复
话说楼主问的是计算机型号,又不是CPU型号。。。
xingyuxin 2012-08-31
  • 打赏
  • 举报
回复
楼上的是很详细但 怎么获得电脑型号和出厂编号????求高手指点
whucv 2012-08-31
  • 打赏
  • 举报
回复
http://blog.csdn.net/whucv/article/details/7828631
获取CPU名称、标识、制造商名称、主频、个数、显卡BIOS与系统BIOS版本号和更新日期
http://blog.csdn.net/whucv/article/details/7824907
获取系统软件信息 获取当前用户名、计算机名、临时文件夹位置、System文件夹位置 、Windows文件夹位置
http://blog.csdn.net/whucv/article/details/7824666
获取系统注册用户名(系统安装时名称) 、获取注册单位名 、操作系统安装序列号 、IE版本号、 Windows的版本号 、Windows内建号 、windows版本名称、字体文件夹的位置 、网上邻居文件夹的位置 、“我的文档”文件夹的位置
看不见的裂痕 2012-08-31
  • 打赏
  • 举报
回复
这帖子要收藏啊,MARK了
dickbarry 2012-08-31
  • 打赏
  • 举报
回复
Mark一下,各种人才...
Eleven 2012-08-31
  • 打赏
  • 举报
回复

2,644

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧