c++获取主板id

启动文件 

#include <iostream>
#include"zhuban.h"

int main()
{
    char shuz1[128] = {'\0'};
    GetBaseBoardByCmd(shuz1,128);
    std::cout << shuz1 <<"\n";
    std::cout << "Hello World!\n";
    getchar();
}

zhuban.h 

#if !defined(AFX_DD71A3C0_A52F_4C38_B062_8E05785607DC__INCLUDED_)
#define AFX_DD71A3C0_A52F_4C38_B062_8E05785607DC__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <iostream>
#include <string>
#include <windows.h>

using namespace std;

//--------------------------------------------------------------
//						主板序列号
//--------------------------------------------------------------
BOOL GetBaseBoardByCmd(char* lpszBaseBoard, int len = 128);


#endif // !defined(AFX_DD71A3C0_A52F_4C38_B062_8E05785607DC__INCLUDED_)

zhuban.app

#include "zhuban.h"


//--------------------------------------------------------------
//						主板序列号 -- 获取不到时为 None
//--------------------------------------------------------------
BOOL GetBaseBoardByCmd(char* lpszBaseBoard, int len/*=128*/)
{
	const long MAX_COMMAND_SIZE = 10000; // 命令行输出缓冲大小	
	WCHAR szFetCmd[] = L"wmic BaseBoard get SerialNumber"; // 获取主板序列号命令行	
	const string strEnSearch = "SerialNumber"; // 主板序列号的前导信息

	BOOL   bret = FALSE;
	HANDLE hReadPipe = NULL; //读取管道
	HANDLE hWritePipe = NULL; //写入管道	
	PROCESS_INFORMATION pi;   //进程信息	
	STARTUPINFO			si;	  //控制命令行窗口信息
	SECURITY_ATTRIBUTES sa;   //安全属性

	char			szBuffer[MAX_COMMAND_SIZE + 1] = { 0 }; // 放置命令行结果的输出缓冲区
	string			strBuffer;
	unsigned long	count = 0;
	long			ipos = 0;

	memset(&pi, 0, sizeof(pi));
	memset(&si, 0, sizeof(si));
	memset(&sa, 0, sizeof(sa));

	pi.hProcess = NULL;
	pi.hThread = NULL;
	si.cb = sizeof(STARTUPINFO);
	sa.nLength = sizeof(SECURITY_ATTRIBUTES);
	sa.lpSecurityDescriptor = NULL;
	sa.bInheritHandle = TRUE;

	//1.0 创建管道
	bret = CreatePipe(&hReadPipe, &hWritePipe, &sa, 0);
	if (!bret)
	{
		//goto END;
		return false;
	}

	//2.0 设置命令行窗口的信息为指定的读写管道
	GetStartupInfo(&si);
	si.hStdError = hWritePipe;
	si.hStdOutput = hWritePipe;
	si.wShowWindow = SW_HIDE; //隐藏命令行窗口
	si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;

	//3.0 创建获取命令行的进程
	bret = CreateProcess(NULL, szFetCmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
	if (!bret)
	{
		//goto END;
		return false;
	}

	//4.0 读取返回的数据
	WaitForSingleObject(pi.hProcess, 500/*INFINITE*/);
	bret = ReadFile(hReadPipe, szBuffer, MAX_COMMAND_SIZE, &count, 0);
	if (!bret)
	{
		//goto END;
		return false;
	}

	//5.0 查找主板序列号
	bret = FALSE;
	strBuffer = szBuffer;
	ipos = strBuffer.find(strEnSearch);

	if (ipos < 0) // 没有找到
	{
		//goto END;
		return false;
	}
	else
	{
		strBuffer = strBuffer.substr(ipos + strEnSearch.length());
	}

	memset(szBuffer, 0x00, sizeof(szBuffer));
	strcpy_s(szBuffer, strBuffer.c_str());

	//去掉中间的空格 \r \n
	int j = 0;
	for (int i = 0; i < strlen(szBuffer); i++)
	{
		if (szBuffer[i] != ' ' && szBuffer[i] != '\n' && szBuffer[i] != '\r')
		{
			lpszBaseBoard[j] = szBuffer[i];
			j++;
		}
	}

	bret = TRUE;

END:
	//关闭所有的句柄
	CloseHandle(hWritePipe);
	CloseHandle(hReadPipe);
	CloseHandle(pi.hProcess);
	CloseHandle(pi.hThread);

	return(bret);
}

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在获取 ID 之前,在了解 ID 是什么之前,我们需要先了解一些基本概念。 ID(Motherboard ID)是指计算机(Motherboard)的唯一标识符(Identifier),其作用就是用来描述计算机系统的硬件信息。 获取 ID 的方法有很多种,常用的方法如下: 1. 通过 BIOS 查看: ID 信息存在于计算机的 BIOS 中,因此我们可以通过查看 BIOS 中的硬件相关信息来获得 ID。 2. 使用硬件检测工具:可以使用第三方硬件检测工具,例如 AIDA64、CPU-Z、SiSoftware Sandra 等,来获取 ID。这些工具可以自动扫描计算机硬件信息,包括 ID 等信息。 3. 打开机箱查看:在机箱内部,通常带有自己的型号和序列号标签,可以通过查看标签来获取 ID。 总的来说,获取 ID 算是一项比较基础的操作,只需要通过一些基本的方法,我们就可以轻松地获取 ID 了。值得注意的是,获取 ID 时需要确保正确性和安全性,避免操作不当造成损坏或泄漏信息。 ### 回答2: 获取ID的方法要有两种:通过BIOS信息获取和通过软件获取。 通过BIOS信息获取ID: 1. 开机时按下DEL、F2或F10键进入BIOS设置。 2. 找到信息选项,一般在Advanced或Main菜单中。 3. 找到ID或System ID等类似名称的选项,查看ID信息。 通过软件获取ID: 1. 下载并安装信息查询软件,比如CPU-Z、AIDA64等。 2. 打开软件并在“”或“Motherboard”选项卡中查看ID信息。 需要注意的是,在某些情况下,ID信息可能不完全准确或无法获取。例如,如果被替换过、BIOS被更新过、厂商没有提供ID信息等情况下,都可能导致无法获取准确的ID
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值