最近要写个计算机管理的程序,想通过vc 获取计算机的型号,SN,硬盘等硬件信息。求各位大侠指点下,在线等。

解决方案 »

  1.   

    http://topic.csdn.net/u/20081113/17/a10543d9-90d4-49c5-8d6b-a518cdb7bd64.html
    请参考之前的帖子~
      

  2.   

    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版本名称、字体文件夹的位置 、网上邻居文件夹的位置 、“我的文档”文件夹的位置 
      

  3.   

    我来一个:
    //=====================================================================================
    /*                 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();}
      

  4.   

    话说楼主问的是计算机型号,又不是CPU型号
      

  5.   

    其它硬件信息似乎都有途径,但如楼上所说,计算机的型号与硬盘、cpu、主板等关键性能器件似乎没有相关性。所以很少作为硬件信息被统计。
      

  6.   

    如果考虑所有厂商的所有计算机,不同型号可以有相同配置,相同型号可以有不同配置。 
    这种不是一对一的对应关系,你没法映射。但如果你要管理的计算机就几个型号,每个型号的CPU,内存大小,硬盘大小,主板信息不一样的话,
    你就可以通过读取上面信息进行判断。