Windows下获取设备管理器列表信息-setupAPI

这篇具有很好参考价值的文章主要介绍了Windows下获取设备管理器列表信息-setupAPI。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景及问题:

在与硬件打交道时,经常需要知道当前设备连接的硬件信息,以便连接正确的硬件,比如串口通讯查询连接的硬件及端口,一般手工的方式就是去设备管理器查看相应的信息,应用程序如何读取这一部分信息呢,Windows下的SetupAPI系列就可以解决这个问题

示例程序

#include<Windows.h>
#include<SetupAPI.h>
#include<iostream>
#include<string>
#pragma comment(lib, "setupapi.lib")

int main()
{
	//set chinese character
	std::locale::global(std::locale(""));

	//The SetupDiGetClassDevs function returns a handle to a device 
    //information set that contains requested device information 
    //elements for a local computer.
	HDEVINFO hdevinfo = SetupDiGetClassDevs(NULL,
		NULL, NULL, DIGCF_PRESENT | DIGCF_ALLCLASSES);
	if (hdevinfo != INVALID_HANDLE_VALUE)
	{
		DWORD MemberIndex = 0;
		SP_DEVINFO_DATA sp_devinfo_data;
		ZeroMemory(&sp_devinfo_data, sizeof(sp_devinfo_data));
		sp_devinfo_data.cbSize = sizeof(sp_devinfo_data);

        //The SetupDiEnumDeviceInfo function returns a SP_DEVINFO_DATA 
        //structure that specifies a device information element in a 
        //device information set.
		while (SetupDiEnumDeviceInfo(hdevinfo, MemberIndex, &sp_devinfo_data))
		{
			TCHAR PropertyBuffer[100];

        	//The SetupDiGetDeviceRegistryProperty function retrieves
			//a specified Plug and Play device property.    
			if (SetupDiGetDeviceRegistryProperty(hdevinfo,
				&sp_devinfo_data,
				SPDRP_DEVICEDESC,
				NULL,
				(PBYTE)&PropertyBuffer,
				sizeof(PropertyBuffer),
				NULL))
			{

				std::wcout << MemberIndex << ":" << (wchar_t*)PropertyBuffer << std::endl;

			}
			MemberIndex++;

		}

	}
	return 0;
}

解释

主要是3个API的使用
  1. SetupDiGetClassDevs -->获取设备信息的集合
  2. SetupDiEnumDeviceInfo -->针对具体的设备解析信息
  3. SetupDiGetDeviceRegistryProperty -->提取具体设备的感兴趣信息

其中SetupDiGetClassDevs定义如下

WINSETUPAPI HDEVINFO SetupDiGetClassDevsW(
  [in, optional] const GUID *ClassGuid,
  [in, optional] PCWSTR     Enumerator,
  [in, optional] HWND       hwndParent,
  [in]           DWORD      Flags
);
Parameter Description
[in, optional]const GUID *ClassGuid 指向设备设置类或设备接口GUID的指针。可为NULL(可选)
[in, optional] PCWSTR Enumerator 指定设备种类。可为NULL(可选)
[in, optional] HWND hwndParent 显示设备信息UI界面窗口句柄。可为NULL(可选)
[in, optional] DWORD Flags 过滤设备信息标志位
返回值HDEVINFO 返回设备信息的集合
程序中前三个均设置为NULL,第四个标志位设为DIGCF_PRESENT|DIGCF_ALLCLASSES,表示当前系统已安装的所有设备,还有一些标志参见

MSDN页面-SetupDiGetClassDevsW

拿到设备信息集合之后,使用SetupDiEnumDeviceInfo进行单个设备信息的解析

WINSETUPAPI BOOL SetupDiEnumDeviceInfo(
  [in]  HDEVINFO         DeviceInfoSet,
  [in]  DWORD            MemberIndex,
  [out] PSP_DEVINFO_DATA DeviceInfoData
);
Parameter Description
[in] HDEVINFO DeviceInfoSet 设备信息集合句柄
[in] DWORD MemberIndex 集合中第几个设备
[out] PSP_DEVINFO_DATA DeviceInfoData 具体的设备信息数据
拿到单个设备的信息之后(仍包含很多信息),使用SetupDiGetDeviceRegistryProperty对感兴趣的信息解析
WINSETUPAPI BOOL SetupDiGetDeviceRegistryPropertyW(
  [in]            HDEVINFO         DeviceInfoSet,
  [in]            PSP_DEVINFO_DATA DeviceInfoData,
  [in]            DWORD            Property,
  [out, optional] PDWORD           PropertyRegDataType,
  [out, optional] PBYTE            PropertyBuffer,
  [in]            DWORD            PropertyBufferSize,
  [out, optional] PDWORD           RequiredSize
);
Parameter Description
[in] HDEVINFO 设备信息集合句柄
[in] PSP_DEVINFO_DATA DeviceInfoData 具体的设备信息数据
[in] DWORD Property 设备属性
[out, optional] PDWORD PropertyRegDataType 指向接收所检索属性的数据类型变量的指针。可为NULL(可选)
[out, optional] PBYTE PropertyBuffer 指向接收正在检索的属性的缓冲区的指针
[in] DWORD PropertyBufferSize 缓冲区大小
[out, optional] PDWORD RequiredSize 缓冲区的所需大小。可为NULL(可选)
程序中设备属性设置为SPDRP_DEVICEDESC,查询的是设备名的描述,还有很多属性参见

MSDN页面-SetupDiGetDeviceRegistryPropertyW文章来源地址https://www.toymoban.com/news/detail-750891.html

需要注意的是

  • windows API 通常分单双字节版本,单字节版本一般调用A结尾的API,对应的VS项目属性中字符集为Multi-Byte,双字节版本一般调用以w结尾的API,对应VS项目属性中字符集为Unicode。本例项目属性为Unicode,对应双字节字符串版本,所以输出信息以wcout输出,缓冲区指针转换为wchar_t*
  • TCHAR为自动根据项目中字符集属性转为char(Multi-Byte)或wchar(Unicode)

到了这里,关于Windows下获取设备管理器列表信息-setupAPI的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 盛元广通实验室教学仪器设备综合信息管理系统LIMS

    实验室作为学生以及教师进行科研教学环境,对于实验室设备的使用情况、维护、借还、台账管理、盘点、报废等需要得到有效的管理,以促进科研教学工作的高质量开展,介于传统手动管理方式越发不能满足现代科研的飞速发展需要,实验室的使用率也呈不断上升的趋势

    2024年02月14日
    浏览(46)
  • 易云维®医院后勤管理系统软件利用物联网智能网关帮助实现医院设备实现智能化、信息化管理

    近年来,我国医院逐渐意识到医院设备信息化管理的重要性,逐步建立医院后勤管理系统软件,以提高信息化管理水平。该系统是利用数据库技术,为医院的中央空调、洁净空调、电梯、锅炉、医疗设备等建立电子档案,把设备监控、管控、维保、设置等主要管理操作都通过

    2024年02月09日
    浏览(46)
  • 适用于 Windows 10 和 Windows 11 设备的笔记本电脑管理软件

    便携式计算机管理软件使 IT 管理员能够简化企业中使用的便携式计算机的部署和管理,当今大多数员工使用Windows 笔记本电脑作为他们的主要工作机器,他们确实已成为几乎每个组织不可或缺的一部分。由于与台式机相比,笔记本电脑足够便携,因此远程工作变得更加方便,

    2024年02月08日
    浏览(56)
  • 安防视频管理平台GB设备接入EasyCVR, 如何获取RTMP与RTSP视频流

    安防视频监控平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,比如:视频监控直播、云端录像、云存储、录

    2024年02月15日
    浏览(43)
  • 最佳iOS设备管理器imazing 2.16.9官网Mac/Windows下载电脑版怎么下载安装

    imazing 2.16.9官网Mac/Windows下载电脑版 是款针对苹果设备所打造的管理工具。iMazing为用户提供多种设备管理功能,每一位用户都能以自己的形式管理苹果设备。iMazing与苹果设备连接后,用户就可以轻松传输文件,浏览保存信息等。   应用介绍 iMazing是macOS平台上的一款帮助用户

    2024年02月09日
    浏览(66)
  • linux dmidecode命令(dmidecode指令)DMI (Desktop Management Interface) 数据、桌面管理接口数据、查看系统信息、查看硬件信息、设备序列号

    dmidecode 是一个在 Linux 系统下获取硬件信息的工具。它允许用户查看计算机硬件的详细信息,包括制造商、产品名称、序列号等。这个命令能够解析和显示计算机的 DMI (Desktop Management Interface) 数据。 在大多数 Linux 发行版中, dmidecode 都是预装的。如果没有预装,可以使用系统

    2024年04月11日
    浏览(46)
  • 开发基于 LoRaWAN 的设备--设备联网管理

    物联网 (IoT) 以及基于 LoRa® 的设备和 LoRaWAN® 网络使其成为可能,数十亿个传感器将改变我们与世界互动的方式。这些传感器将提供广泛的监控可能性,这在几年前还是不可想象的。各行业的数据分析师对农业、工业控制、医疗保健和计量等各个领域的数亿字节数据的可能性

    2024年02月15日
    浏览(46)
  • 【正达信通】设备资产管理系统(ZS-iEAM),全生命周期资产管理全面击破设备管理难题

    设备资产管理系统(ZS-iEAM)是一款基于云计算开发的企业设备监控管理系统,通过建立工厂设备的数字化设备模型,实现设备资产的台账管理,维修,维护,运维,保养,润滑,设备备件等全方位管理,并通过设备信息的采集,智能计算设备OEE效率,维修同环比分析,减少设

    2024年01月16日
    浏览(60)
  • HarmonyOS学习路之开发篇—设备管理(设备标识符)

    定义 网络设备节点通信标识符,是分布式软总线提供的一种非永久性标识符。NetworkID基于Java原生的UUID接口随机生成,长度为32字节,使用十六进制表示。主要用于业务调用分布式能力时,标识分布式网络内的设备节点。 NetworkID 举例: 6B97BC8F6F85A2A1A6E0E262111F42D6A8541CBFF6CAF688F

    2024年02月13日
    浏览(62)
  • 【001】OpenHarmony3.2 设备发现-设备管理结构体DeviceInfo分析

    一、DeviceInfo介绍 foundation/communication/dsoftbus/interfaces/kits/common/softbus_common.h 二、DeviceInfo字段介绍 序号 字段 类型 含义 1 devId[DISC_MAX_DEVICE_ID_LEN] char 设备的ID 2 accountHash 3 devType enum 设备类型 4 devName[DISC_MAX_DEVICE_NAME_LEN] char 设备名称 5 addrNum int 该设备可以连接地址数量 6 addr[CONNEC

    2024年02月02日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包