电脑有没有唯一标识符,查了一些资料,开始以为CPUID可以,但是实际上统一类型的CPU用的是相同的ID:
GetCPUID()
{
// note: 在cmd中,输入命令字:wmic CPU get ProcessorID,即可获得本机处理器ID
CString strCPUID;
unsigned long s1, s2;
__asm {
mov eax, 01h
xor edx, edx
cpuid
mov s1, edx
mov s2, eax
}
strCPUID.Format("%08X%08X", s1, s2);
iniWriter.WriteString("CPU", "ProcessorID", strCPUID.GetBuffer());
return strCPUID;
}
那么BIOS ID是否是唯一的呢?主板上的BIOS芯片是主板上唯一贴有标签的芯片,如果电脑开机时登录bios可以看到里面的一些基本信息:
bios编号也可以用win cmd的命令获得,为一个4个字节的编码,但这个编码指的是电脑的bios版本,也不是唯一的。
CString strBIOSSerialNo, strTmp;
WinExec("cmd.exe /c wmic bios get serialnumber > mypc.log", SW_HIDE);
Sleep(1000);
FILE* fpc = fopen(".\\mypc.log", "r");
char ch[20] = {};
int flag = 0;
char msg[30] = "";
char buf[40];
int numread = fread(buf, sizeof(char), 34, fpc);
numread = fread(buf, sizeof(char), 16, fpc);
for (int i = 0; i < 16; i++)
{
if (buf[i] == 0x00 || buf[i] == 0x20 || buf[i] == 0x0d || buf[i] == 0x0a || buf[i] == 0xcc)
continue;
else
strTmp.Format("%c", buf[i]);
strBIOSSerialNo += strTmp;
}
SetDlgItemText(IDC_STATIC2, strBIOSSerialNo.GetBuffer());
如何获取产品序列号呢?命令行方式可以如下获得:
VC++获得方法:
// 获取电脑产品ID
//=============================================================================
WinExec("cmd.exe /c systeminfo > mypcinfo.log", SW_HIDE);
Sleep(6000);
char lineBuff[256];
CString strProductTmp = _T("产品 ID:"), strSysInfo;
FILE* fps = fopen(".\\mypcinfo.log", "r");
while (!feof(fps))
{
fgets(lineBuff, 256, fps);
strTmp.Format(_T("%s"), lineBuff);
if (strTmp.Find(strProductTmp) != -1)
{
strSysInfo = strTmp.Mid(strProductTmp.GetLength() + 1);
strSysInfo.Replace(_T(" "), _T(""));
break;
}
}
fclose(fps);
SetDlgItemText(IDC_STATIC3, strSysInfo.GetBuffer());
WinExec("cmd.exe /c del /F mypcinfo.log", SW_HIDE);
remove("mypcinfo.log");
或者使用ifstream去读文件:
// 获取电脑产品ID
//=============================================================================
CString strSysInfo;
WinExec("cmd.exe /c systeminfo > mypcinfo.log", SW_HIDE);
Sleep(5000);
char buff[256];
CString strProductTmp = _T("产品 ID:");
ifstream infile("mypcinfo.log");
while (!infile.eof())
{
infile.getline(buff, 100);
strTmp.Format(_T("%s"), buff);
if (strTmp.Find(strProductTmp) != -1)
{
strSysInfo = strTmp.Mid(strProductTmp.GetLength() + 1);
strSysInfo.Replace(_T(" "), _T(""));
break;
}
}
infile.close();
SetDlgItemText(IDC_STATIC3, strSysInfo.GetBuffer());
WinExec("cmd.exe /c del /F mypcinfo.log", SW_HIDE);
remove("mypcinfo.log");
文章来源地址https://www.toymoban.com/news/detail-650208.html文章来源:https://www.toymoban.com/news/detail-650208.html
到了这里,关于电脑的唯一标识符,VC++如何读出?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!