【VS2015】 C++实现硬件ID的查询

1.VS2015 新建项目->win32 控制台应用程序

以下操作实现跨平台
(1).配置属性-常规-MFC的使用->使用标准Windows库或者在静态库中使用MFC
(2).配置属性-c/c++-代码生成-运行库->多线程(/MT)

2.头文件stdafx.h

// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//

#pragma once
//#define _AFXDLL
#include "targetver.h"

#include <stdio.h>
#include <tchar.h>


// TODO:  在此处引用程序需要的其他头文件

#include <afxwin.h>         // MFC core and standard components
#include <SetupAPI.h>
#pragma comment(lib, "Setupapi.lib")


3.主程序ConsoleApplication5.cpp

// ConsoleApplication5.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
int main()
{
 HDEVINFO hDevInfo;
 SP_DEVINFO_DATA DeviceInfoData;
 DWORD i;
 // Create a HDEVINFO with all present devices.
 hDevInfo = SetupDiGetClassDevs(NULL,
  0, // Enumerator
  0,
  DIGCF_PRESENT | DIGCF_ALLCLASSES);
 if (hDevInfo == INVALID_HANDLE_VALUE)
 {
  // Insert error handling here.
  /*return 1;*/
  exit(0);
 }
 // Enumerate through all devices in Set.
 DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
 for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i,
  &DeviceInfoData); i++)
 {
  DWORD DataT;
  LPTSTR buffer = NULL;
  DWORD buffersize = 0;
  // Call function with null to begin with, 
  // then use the returned buffer size (doubled)
  // to Alloc the buffer. Keep calling until
  // success or an unknown failure.
  //
  //  Double the returned buffersize to correct
  //  for underlying legacy CM functions that 
  //  return an incorrect buffersize value on 
  //  DBCS/MBCS systems.
  // 
  while (!SetupDiGetDeviceRegistryProperty(
   hDevInfo,
   &DeviceInfoData,
   //SPDRP_DEVICEDESC,
   SPDRP_HARDWAREID,
   &DataT,
   (PBYTE)buffer,
   buffersize,
   &buffersize))
  {
   if (GetLastError() ==
    ERROR_INSUFFICIENT_BUFFER)
   {
    // Change the buffer size.
    if (buffer) LocalFree(buffer);
    // Double the size to avoid problems on 
    // W2k MBCS systems per KB 888609. 
    buffer = (LPTSTR)LocalAlloc(LPTR, buffersize * 2);
   }
   else
   {
    // Insert error handling here.
    break;
   }
  }

  //CString str;
  //str.Format(_T("%d"), num);
  //AfxMessageBox(buffer);
  printf("dev_ID=%S \n" ,buffer);
 }
  return 0;
 }

4.效果


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值