有没有专门的API可以调用?谢谢各位

解决方案 »

  1.   

    MAC地址好像是放在注册表里的
    CPU序列号就不知道了
      

  2.   

    http://community.csdn.net/Expert/topic/4138/4138495.xml?temp=.828396
      

  3.   

    注册表是容易取到的,但如何取到物理的,真正的mac,不知道谁做出来了。我曾经用过vmware,结果,一个网卡有两个MAC地址,呵呵,不知道哪个才是真的。
      

  4.   

    用嵌入式汇编取CPU ID
     
     DWORD dwCpuID;
     _asm
     {
            mov eax, 1
            cpuid
            mov dwCpuID, edx
     }
      

  5.   

    MAC地址 GetAdaptersInfo()
    CPU序列号,用汇编,而且是能获得以前的CPU,现在的都没了
      

  6.   

        BYTE szSystemInfo[4096]; 
            UINT uSystemInfoLen = 0;         BOOL bException = FALSE;
            BYTE szCpu[16]  = { 0 };
            UINT uCpuID     = 0U;        __try 
            {
                _asm 
                {
                    mov eax, 0
                    cpuid
                    mov dword ptr szCpu[0], ebx
                    mov dword ptr szCpu[4], edx
                    mov dword ptr szCpu[8], ecx
                    mov eax, 1
                    cpuid
                    mov uCpuID, edx
                }
            }
            __except( EXCEPTION_EXECUTE_HANDLER )
            {
                bException = TRUE;
            }
            
            if( !bException )
            {
                CopyMemory( szSystemInfo + uSystemInfoLen, &uCpuID, sizeof( UINT ) );
                uSystemInfoLen += sizeof( UINT );            uCpuID = strlen( ( char* )szCpu );
                CopyMemory( szSystemInfo + uSystemInfoLen, szCpu, uCpuID );
                uSystemInfoLen += uCpuID;
            }
      

  7.   

    int ClassNetSetting::GetMacAddress(LPMAC_ADDRESS pMacAddr)
    {
        NCB ncb; 
    UCHAR uRetCode;
    int num = 0;
    LANA_ENUM lana_enum; 
    memset(&ncb, 0, sizeof(ncb) ); 
    ncb.ncb_command = NCBENUM; 
    ncb.ncb_buffer = (unsigned char *)&lana_enum; 
    ncb.ncb_length = sizeof(lana_enum); 
    //向网卡发送NCBENUM命令,以获取当前机器的网卡信息,如有多少个网卡
    //每张网卡的编号等 
    uRetCode = Netbios(&ncb);
    if (uRetCode == 0) 
    {
    num = lana_enum.length;
    //对每一张网卡,以其网卡编号为输入编号,获取其MAC地址 
    for (int i = 0; i < num; i++)
    {
    ASTAT Adapter;
    if(GetAddressByIndex(lana_enum.lana[i],Adapter) == 0)
    {
    pMacAddr[i].b1 = Adapter.adapt.adapter_address[0];
    pMacAddr[i].b2 = Adapter.adapt.adapter_address[1];
    pMacAddr[i].b3 = Adapter.adapt.adapter_address[2];
    pMacAddr[i].b4 = Adapter.adapt.adapter_address[3];
    pMacAddr[i].b5 = Adapter.adapt.adapter_address[4];
    pMacAddr[i].b6 = Adapter.adapt.adapter_address[5];
    }
    }
    }
    return num;
    }
    UCHAR ClassNetSetting::GetAddressByIndex(int lana_num, ASTAT &Adapter)
    {
       NCB ncb; 
    UCHAR uRetCode; 
    memset(&ncb, 0, sizeof(ncb) ); 
    ncb.ncb_command = NCBRESET; 
    ncb.ncb_lana_num = lana_num; 
    //指定网卡号,首先对选定的网卡发送一个NCBRESET命令,以便进行初始化 
    uRetCode = Netbios(&ncb ); 
    memset(&ncb, 0, sizeof(ncb) ); 
    ncb.ncb_command = NCBASTAT; 
    ncb.ncb_lana_num = lana_num;   //指定网卡号 
    strcpy((char *)ncb.ncb_callname,"*      " ); 
    ncb.ncb_buffer = (unsigned char *)&Adapter; 
    //指定返回的信息存放的变量 
    ncb.ncb_length = sizeof(Adapter); 
    //接着,可以发送NCBASTAT命令以获取网卡的信息 
    uRetCode = Netbios(&ncb ); 
    return uRetCode;
    }
      

  8.   

    CString GetCPUID()
    {
    CString CPUID; unsigned long s1,s2;
    unsigned char vendor_id[]="------------";
    char sel;
    sel='1';
    CString VernderID;
    CString MyCpuID,CPUID1,CPUID2;
    switch(sel)
    {
    case '1':
    __asm{
    xor eax,eax
    cpuid
    mov dword ptr vendor_id,ebx
    mov dword ptr vendor_id[+4],edx
    mov dword ptr vendor_id[+8],ecx
    }
    VernderID.Format("%s-",vendor_id);
    __asm{
    mov eax,01h
    xor edx,edx
    cpuid
    mov s1,edx
    mov s2,eax
    }
    CPUID1.Format("%08X%08X",s1,s2);
    __asm{
    mov eax,03h
    xor ecx,ecx
    xor edx,edx
    cpuid
    mov s1,edx
    mov s2,ecx
    }
    CPUID2.Format("%08X%08X",s1,s2);
    break;
    case '2':
    {
    __asm{
    mov ecx,119h
    rdmsr
    or eax,00200000h
    wrmsr
    }
    }
    AfxMessageBox("CPU id is disabled.");
    break;
    }
    MyCpuID = CPUID1+CPUID2;
    CPUID = MyCpuID;
    return CPUID;
    }