vc 如何获取电脑型号 SN等硬件信息 最近要写个计算机管理的程序,想通过vc 获取计算机的型号,SN,硬盘等硬件信息。求各位大侠指点下,在线等。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://topic.csdn.net/u/20081113/17/a10543d9-90d4-49c5-8d6b-a518cdb7bd64.html请参考之前的帖子~ 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版本名称、字体文件夹的位置 、网上邻居文件夹的位置 、“我的文档”文件夹的位置 我来一个://=====================================================================================/* 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();} 话说楼主问的是计算机型号,又不是CPU型号 其它硬件信息似乎都有途径,但如楼上所说,计算机的型号与硬盘、cpu、主板等关键性能器件似乎没有相关性。所以很少作为硬件信息被统计。 如果考虑所有厂商的所有计算机,不同型号可以有相同配置,相同型号可以有不同配置。 这种不是一对一的对应关系,你没法映射。但如果你要管理的计算机就几个型号,每个型号的CPU,内存大小,硬盘大小,主板信息不一样的话,你就可以通过读取上面信息进行判断。 还是VS2010的问题 有关于QQ聊天对话框的问题 中国科学院智能所和联通,移动往哪里去好 VC版的弟兄,请你支持 菜鸟对添加记录函数的请教 ADO连接ORACLE数据库参数报错,不能连接 在深圳工作的朋友近来看看,我有一个关于深圳的问题??? List Control的多行选择问题.(我最多只能给100分,可以单独开贴再给分)急急急!!!!!!! 求救!tab键的设置 控件调试问题! 第一个答对100分! MFC对话框,已经将整个对话框设置为半透明,在picture控件中插入了一张位图,想把位图的背景也设置成透明。 怎样用VC++物理地数据库里的记录
请参考之前的帖子~
获取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版本名称、字体文件夹的位置 、网上邻居文件夹的位置 、“我的文档”文件夹的位置
//=====================================================================================
/* 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();}
这种不是一对一的对应关系,你没法映射。但如果你要管理的计算机就几个型号,每个型号的CPU,内存大小,硬盘大小,主板信息不一样的话,
你就可以通过读取上面信息进行判断。