电脑的唯一标识符,VC++如何读出?

这篇具有很好参考价值的文章主要介绍了电脑的唯一标识符,VC++如何读出?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

电脑有没有唯一标识符,查了一些资料,开始以为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可以看到里面的一些基本信息:

获取电脑唯一机器码,c++

bios编号也可以用win cmd的命令获得,为一个4个字节的编码,但这个编码指的是电脑的bios版本,也不是唯一的。

获取电脑唯一机器码,c++

	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());

如何获取产品序列号呢?命令行方式可以如下获得:

获取电脑唯一机器码,c++

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

 

到了这里,关于电脑的唯一标识符,VC++如何读出?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用序列(Sequence)在 Oracle 数据库中管理唯一标识符

    目录 1. 创建序列 2. 使用序列生成唯一值 3. 序列的常见应用场景 结论 简介: 在 Oracle 数据库中,序列(Sequence)是一种强大的工具,用于生成唯一的数值标识符。序列提供了一种简单而高效的方式来管理表的主键或其他需要唯一值的列。本文将介绍 Oracle 中序列的用法,包括

    2024年02月05日
    浏览(43)
  • 华为---OSPF Router-ID:OSPF路由器标识符(Router Identifier)简介及示例配置---(OSPF Router-ID如何产生?为什么必须在整个路由选择域内保持唯一)

      OSPF Router-ID :路由器标识符(Router Identifier),在OSPF域中唯一地标识一台路由器。         OSPF协议使用Router-ID作为路由器的身份标示,如果在启动这些路由协议时没有指定Router-ID,则路由协议进程可能无法正常启动;在OSPF区域中必须保证Router-ID唯一,不然OSPF无法正确识别

    2024年02月05日
    浏览(42)
  • 【Linux初阶】进程的相关概念 | 进程管理 & 查看进程 & 获取进程标识符 & fork进程创建

     🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【Linux初阶】 ✒️✒️本篇内容:进程的概念,进程管理初识(描述、管理进程),查看进程的基础方法,获取进程标识符(pid、ppid),fork进程创建(分流应用) 🚢🚢作者简介:计算机海洋的新进船长一枚,请多多

    2023年04月27日
    浏览(43)
  • 错误C2065:未声明的标识符 - 解决C++中的未声明标识符错误

    错误C2065:未声明的标识符 - 解决C++中的未声明标识符错误 在C++编程中,错误C2065是一种常见的编译错误,它表示使用了一个未声明的标识符。通常情况下,这个错误是由于忘记包含必要的头文件或者拼写错误导致的。本文将介绍如何解决这个错误,并提供相应的源代码示例

    2024年02月06日
    浏览(49)
  • 初识标识符

    abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implementis import instanceof int interface long native new package private protected public return strictfp short static super switch synchronized this throw throws transient try void volatile while   java所有的组成

    2024年02月11日
    浏览(59)
  • go学习-指针 标识符

    1.指针 (1).基本介绍 1)基本数据类型,变量存的值,也叫值类型 2)获取变量的地址用,比如 var num int ,获取num的地址:num 3)指针类型,变量存的是一个地址,这个地址指向的空间存的才是真正值,比如: var ptr *int =num 4)获取指针类型所指的值,使用*,比如:var *ptr int,使用

    2024年02月11日
    浏览(49)
  • 解决C++遇到的未定义标识符 “string“、未定义标识符 “cout“、“name”: 未知重写说明符错误

    目录 解决C++遇到的未定义标识符 \\\"string\\\"、未定义标识符 \\\"cout\\\"、“name”: 未知重写说明符错误 1. 未定义标识符 \\\"string\\\" 2. 未定义标识符 \\\"cout\\\" 3. “name”: 未知重写说明符错误 总结 1. 未定义标识符 \\\"string\\\" 2. 未定义标识符 \\\"cout\\\" 3. “name”: 未知重写说明符错误 在C++编程中,我们可

    2024年02月06日
    浏览(96)
  • 第6关:Python的标识符

    2023年04月09日
    浏览(45)
  • C# 标识符命名规则和约定

    目录 命名规则 命名约定 C# 编码约定 命名约定 帕斯卡拼写法 驼峰式大小写 如何使用模式匹配以及 is 和 as 运算符安全地进行强制转换 标识符是分配给类型(类、接口、结构、记录、委托或枚举)、成员、变量或命名空间的名称。 有效标识符必须遵循以下规则: 标识符必须

    2024年02月12日
    浏览(51)
  • ora-12154无法解析指定的连接标识符

    用户反映查询的时候报错ora-12154 这个系统只做历史数据查询使用,使用并不平凡,该数据库曾做过一次服务器间的迁移。 用户描述,所有oracle客户端查询该视图都报tns错误,一般ora-12154会发生在连接数据库时,因为tns配置不正确而报错,但是这个报错发生在进行查询过程中

    2024年01月23日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包