枚举系统中已经安装的所有硬件设备

原创 2004年05月29日 16:01:00

实现的主要部分代码:

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

 CListBox m_strList;

........

枚举所有硬件设备的主要实现代码:

    m_strList.ResetContent();
 
    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 ;
    }
   
    // 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
        // to Alloc the buffer. Keep calling until
        // success or an unknown failure.
        //
        while (!SetupDiGetDeviceRegistryProperty(
            hDevInfo,
            &DeviceInfoData,
            SPDRP_DEVICEDESC,
            &DataT,
            (PBYTE)buffer,
            buffersize,
            &buffersize))
        {
            if (GetLastError() ==
                ERROR_INSUFFICIENT_BUFFER)
            {
                // Change the buffer size.
                if (buffer) LocalFree(buffer);
                buffer = (char*)LocalAlloc(LPTR,buffersize);
            }
            else
            {
                // Insert error handling here.
                break;
            }
        }

  m_strList.AddString(buffer);
               
        if (buffer) LocalFree(buffer);
    }
   
   
    if ( GetLastError()!=NO_ERROR &&
  GetLastError()!=ERROR_NO_MORE_ITEMS )
    {
        // Insert error handling here.
        return ;
    }
   
    //  Cleanup
    SetupDiDestroyDeviceInfoList(hDevInfo); 

 

测试环境:

WINXP,WIN2000以上操作系统!

 

 

 

获取系统所有安装的字体名称

C#中获取系统中所有已经安装的字体名称方法: List arrStrNames = new List(); InstalledFontColl...
  • Tweeenty
  • Tweeenty
  • 2015年03月16日 14:47
  • 1447

枚举系统中打开的句柄

删除系统中的文件会提示 有进程已经打开了这个文件会导致不能删除该文件 在网上找到了在ring3下实现文件碎甲的一篇介绍:在ring3上实现文件碎甲功能 其中首先需要实现的就是需要枚举出系统...
  • nemo2011
  • nemo2011
  • 2012年08月28日 10:21
  • 1541

枚举硬件设备

下载源码:http://dl2.csdn.net/down4/20070627/27161251844.rar HOWTO: 通过使用 SetupDi 调用函数枚举硬件设备察看本文应用于的产品func...
  • kl222
  • kl222
  • 2007年06月27日 16:05
  • 1575

C++ 枚举本地主机所有用户、用户基本信息(不能获得密码哦)

C++ 枚举本地主机所有用户、用户基本信息 #include "iostream" #include "windows.h" #include "lm.h" #include "asser...
  • tianyu030963
  • tianyu030963
  • 2013年11月04日 15:09
  • 786

枚举 遍历枚举中所有的值、将某一个值转换成枚举型

1, 将枚举类型ViewType中所有值遍历,放到coboBox中 cbeType.Properties.Items.Clear(); cbeTyp...
  • keenweiwei
  • keenweiwei
  • 2012年04月06日 14:49
  • 2251

系统中已安装了vmware,请先卸载干净并重启电脑

系统中已安装了vmware,请先卸载干净并重启电脑
  • JAZZSOLDIER
  • JAZZSOLDIER
  • 2016年09月25日 21:11
  • 1905

通用的方法获取枚举内各值的描述

1.定义枚举时直接用中文由于VS对中文支持的很不错,所以很多程序员都采用了此方案.缺点:1.不适合多语言 2.感觉不太完美,毕竟大部分程序员大部分代码都使用英文首先多谢两位给我的提示,发现在上个版本中...
  • xiaoyatou_00
  • xiaoyatou_00
  • 2010年12月31日 11:34
  • 1364

非递归方法枚举目录下所有文件(含子目录)

private void getFileList(String dirPath) { LinkedList mDirList = new LinkedList(); File di...
  • JavaTiger427
  • JavaTiger427
  • 2010年09月30日 15:48
  • 1245

C# 枚举尚未开始,或者已经结束

今天遇到的 原因是 使用chart 1 U 及T  使用chart 2 I 及T 结果使用I添加I及T时,但是在添加I时 多加T时 但是U没有添加对应T的就会出现这个错误。...
  • zmq5411
  • zmq5411
  • 2016年07月24日 09:56
  • 871

rac grid安装错误后重新安装提示[INS-40912]虚拟主机名:已分配给网络上的其他系统

在节点上查看网络信息ifconfig,发现vip的地址在上面显示使用了, eth0:1 Link encap:Ethernet HWaddr 08:00:27:D7:66:61 ...
  • aoerqileng
  • aoerqileng
  • 2017年07月08日 12:16
  • 502
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:枚举系统中已经安装的所有硬件设备
举报原因:
原因补充:

(最多只允许输入30个字)