当前位置:首页 >> 编程开发 >> Visual C++ >> 内容

枚举系统设备

时间:2015/5/19 21:35:02 作者:平凡之路 来源:xuhantao.com 浏览:

#include <windows.h>
#include <stdio.h>
#include <setupapi.h>
#include <devguid.h>
#include <regstr.h>
#include <shlwapi.h>
#pragma comment(lib,"setupapi.lib")

#define BUFSIZE1024
#define SM_SERVERR289
void main()
{
  HDEVINFO hDevInfo;
  SP_DEVINFO_DATA DeviceInfoData;
  DWORD i;
  hDevInfo = SetupDiGetClassDevs((LPGUID) &GUID_DEVCLASS_CDROM, 0, 0,DIGCF_PRESENT);
  /*
  GUID_DEVCLASS_FDC软盘控制器
  GUID_DEVCLASS_DISPLAY显示卡
  GUID_DEVCLASS_CDROM光驱
  GUID_DEVCLASS_KEYBOARD键盘
  GUID_DEVCLASS_COMPUTER计算机
  GUID_DEVCLASS_SYSTEM系统
  GUID_DEVCLASS_DISKDRIVE磁盘驱动器
  GUID_DEVCLASS_MEDIA声音、视频和游戏控制器
  GUID_DEVCLASS_MODEMMODEM
  GUID_DEVCLASS_MOUSE鼠标和其他指针设备
  GUID_DEVCLASS_NET网络设备器
  GUID_DEVCLASS_USB通用串行总线控制器
  GUID_DEVCLASS_FLOPPYDISK软盘驱动器
  GUID_DEVCLASS_UNKNOWN未知设备
  GUID_DEVCLASS_SCSIADAPTERSCSI 和 RAID 控制器
  GUID_DEVCLASS_HDCIDE ATA/ATAPI 控制器
  GUID_DEVCLASS_PORTS端口(COM 和 LPT)
  GUID_DEVCLASS_MONITOR监视器
  */
  if (hDevInfo == INVALID_HANDLE_VALUE)
  {
    // Insert error handling here.
    return 1;
  }
  // 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;
    char buffer[2048];
    DWORD buffersize =sizeof(buffer);
    while (!SetupDiGetDeviceRegistryProperty(
     hDevInfo,
     &DeviceInfoData,
     SPDRP_FRIENDLYNAME,
     &DataT,
     (PBYTE)buffer,
     buffersize,
     &buffersize))
      {
        if (GetLastError() ==  ERROR_INSUFFICIENT_BUFFER)
        {
          // Change the buffer size.
          //if (buffer) LocalFree(buffer);
          //buffer = (PSP_INF_INFORMATION)LocalAlloc (LPTR,buffersize);

        }
        else
        {
          // Insert error handling here.
          break;
        }
      }
      if (buffer != NULL && i == 0)
      {
        temp.Format("<光盘驱动器>");
        str += temp;
      }
      temp.Format("<VALUE>% s</VALUE>",buffer);
      str += temp;
      if (buffer) LocalFree(buffer);
    }
    if (i != 0)
    {
      temp.Format("</光盘驱动器>");
      str += temp;
    }
    if ( GetLastError()!=NO_ERROR &&
    GetLastError()!=ERROR_NO_MORE_ITEMS )
    {
      return 1;
    }

  // Cleanup
  SetupDiDestroyDeviceInfoList(hDevInfo);
}

相关文章
  • 没有相关文章
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1