如题想问一下在一般的软件中所谓机器码是指的网卡编号还是CPU编号或者什么别的啊,在VC中怎样获得机器吗啊,有没有现成的函数啊

解决方案 »

  1.   

    给你个函数你参看一下
    //功能:从注册表中读取注册信息,并判断是否为合法注册
    bool CXYZApp::JudegeRegedit()
    {
    bool IsRegedit = true;
    HKEY hKEY;//定义有关的hKEY,在查询结束时要关闭 //打开与路径 data_Set相关的hKEY
    LPCTSTR data_Set="SOFTWARE\\ADTC\\";
    //访问注册表,hKEY则保存此函数所打开的键的句柄
    long ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,0,KEY_READ,&hKEY));
    if(ret0!=ERROR_SUCCESS)//如果无法打开hKEY,则中止程序的执行
    {
    //AfxMessageBox("错误:软件还没有注册");
     IsRegedit = false;
    } //查询有关的数据
    LPBYTE regedit_Get=new BYTE[80];
    LPBYTE machine_Get=new BYTE[80];
    DWORD type_1=REG_SZ;//定义数据类型
    DWORD cbData_1=80;//定义数据长度
    DWORD cbData_2=80;//定义数据长度
    //得到硬盘的序列号
    DWORD VolumeSerialNumber;
    GetVolumeInformation("c:\\",NULL,12,&VolumeSerialNumber,NULL,NULL,NULL,10); char pNum[10];
    itoa(VolumeSerialNumber,pNum,16); CString strVolumeSerialNumber = "";
    strVolumeSerialNumber= pNum;
    strVolumeSerialNumber = strVolumeSerialNumber.Left(8);
    //得到机器码
    long ret1=::RegQueryValueEx(hKEY,"ROBOT",NULL,&type_1,machine_Get,&cbData_1);
    if(ret1!=ERROR_SUCCESS)
    {
     IsRegedit = false;
    } //判断硬盘序列号是否和机器码相同
    CString TmpStr = "";
    TmpStr = machine_Get;
    TmpStr = TmpStr.Left(8);
    if(TmpStr != strVolumeSerialNumber)
    {
    IsRegedit = false;
    }
    //得到注册码
    long ret2=::RegQueryValueEx(hKEY,"REGEDIT",NULL,&type_1,regedit_Get,&cbData_2);
    if(ret2!=ERROR_SUCCESS)
    {
     IsRegedit = false;
    } //根据机器码得到正确的注册码
    TmpStr = "";
    TmpStr = machine_Get;
    TmpStr = GetRegeditString(TmpStr);
    TmpStr.Left(8);
    CString TmpRegedit = "";
    TmpRegedit = regedit_Get;
    TmpRegedit.Left(8);
    if(TmpRegedit != TmpStr)
    {
    IsRegedit = false;
    }
    ::RegCloseKey(hKEY); return IsRegedit;
    }