C# 根据USB设备VID和PID 获取设备总线已报告设备描述

总线已报告设备描述   DEVPKEY_Device_BusReportedDeviceDesc

模式 winform 语言 c#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;namespace testusb
{public partial class Form1 : Form{[DllImport("setupapi.dll", CharSet = CharSet.Unicode, SetLastError = true)]static extern IntPtr SetupDiGetClassDevs(ref Guid classGuid, string enumerator, IntPtr hwndParent, uint flags);[DllImport("setupapi.dll", CharSet = CharSet.Unicode, SetLastError = true)]static extern bool SetupDiEnumDeviceInfo(IntPtr deviceInfoSet, uint memberIndex, ref SP_DEVINFO_DATA deviceInfoData);[DllImport("setupapi.dll", CharSet = CharSet.Unicode, SetLastError = true)]static extern bool SetupDiGetDeviceProperty(IntPtr deviceInfoSet, ref SP_DEVINFO_DATA deviceInfoData, ref DEVPROPKEY propertyKey, out int propertyType, IntPtr propertyBuffer, int propertyBufferSize, out int requiredSize, int flags);[DllImport("setupapi.dll", CharSet = CharSet.Unicode, SetLastError = true)]static extern bool SetupDiDestroyDeviceInfoList(IntPtr deviceInfoSet);[StructLayout(LayoutKind.Sequential)]struct SP_DEVINFO_DATA{public int cbSize;public Guid classGuid;public int devInst;public IntPtr reserved;}[StructLayout(LayoutKind.Sequential)]struct DEVPROPKEY{public Guid fmtid;public uint pid;}public Form1(){InitializeComponent();}//按钮事件private void button1_Click(object sender, EventArgs e){// USB 设备的 Vendor ID (VID) 和 Product ID (PID)string vid = "0xFFFF";  //这边写你usb设备的vidstring pid = "0x0100"; //这边写你usb设备的pidGuid guid = new Guid("A5DCBF10-6530-11D2-901F-00C04FB951ED"); // USB 设备类的 GUIDIntPtr deviceInfoSet = SetupDiGetClassDevs(ref guid, null, IntPtr.Zero, 0x12);if (deviceInfoSet.ToInt64() != -1){SP_DEVINFO_DATA devInfoData = new SP_DEVINFO_DATA();devInfoData.cbSize = Marshal.SizeOf(devInfoData);for (uint i = 0; SetupDiEnumDeviceInfo(deviceInfoSet, i, ref devInfoData); i++){DEVPROPKEY propertyKey = new DEVPROPKEY();propertyKey.fmtid = new Guid("540b947e-8b40-45bc-a8a2-6a0b894cbda2"); // DEVPKEY_Device_BusReportedDeviceDesc 的格式 IDpropertyKey.pid = 4; // DEVPKEY_Device_BusReportedDeviceDesc 的属性 IDint propertyType;int requiredSize;// 获取设备属性值的大小SetupDiGetDeviceProperty(deviceInfoSet, ref devInfoData, ref propertyKey, out propertyType, IntPtr.Zero, 0, out requiredSize, 0);IntPtr propertyBuffer = Marshal.AllocHGlobal(requiredSize);if (SetupDiGetDeviceProperty(deviceInfoSet, ref devInfoData, ref propertyKey, out propertyType, propertyBuffer, requiredSize, out requiredSize, 0)){string propertyValue = Marshal.PtrToStringUni(propertyBuffer);Console.WriteLine("Device Description: " + propertyValue);}Marshal.FreeHGlobal(propertyBuffer);}SetupDiDestroyDeviceInfoList(deviceInfoSet);}}}
}

执行结果

电脑上的设备

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/249921.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024美赛数学建模C题思路分析 - 网球的动量

1 赛题 问题C:网球的动量 在2023年温布尔登绅士队的决赛中,20岁的西班牙新星卡洛斯阿尔卡拉兹击败了36岁的诺瓦克德约科维奇。这是德约科维奇自2013年以来首次在温布尔登公开赛失利,并结束了他在大满贯赛事中历史上最伟大的球员之一的非凡表…

hivesql的基础知识点

目录 一、各数据类型的基础知识点 1.1 数值类型 整数 小数 float double(常用) decimal(针对高精度) 1.2 日期类型 date datetime timestamp time year 1.3 字符串类型 char varchar / varchar2 blob /text tinyblob / tinytext mediumblob / mediumtext lon…

EtherCAT FP介绍系列文章—UDP gateway

EtherCAT主站上的Mailbox Gateway功能,可以用于将EtherCAT mailbox相关协议从外部设备的工具通过邮箱网关路由到EtherCAT从站设备。在EtherCAT规范中定义的所有邮箱协议在此功能中都可用,例如CoE, FoE, VoE, SoE。 但是,这里特别注意的是Mai…

2024美赛数学建模E题思路分析 - 财产保险的可持续性

1 赛题 问题E:财产保险的可持续性 极端天气事件正成为财产所有者和保险公司面临的危机。“近年来,世界已经遭受了1000多起极端天气事件造成的超过1万亿美元的损失”。[1]2022年,保险业的自然灾害索赔人数“比30年的平均水平增加了115%”。[…

【STM32F103单片机】利用ST-LINK V2烧录程序 面包板的使用

1、ST‐LINK V2安装 参考: http://t.csdnimg.cn/Ulhhq 成功: 2、烧录器接线 背后有标识的引脚对应: 3、烧录成功 烧录成功后,按下核心板的RESET键复位!!!即可成功! 4、面包板的…

2024美赛数学建模D题思路源码

赛题目的 赛题目的: 问题描述: 解题的关键: 问题一. 问题分析 问题解答 问题二. 问题分析 问题解答 问题三. 问题分析 问题解答 问题四. 问题分析 问题解答 问题五. 问题分析 问题解答

2024美赛数学建模E题:房产保险的可持续性,思路全解,代码模型分析

2024美赛数学建模E题思路全解,代码模型分析,完整详细内容见文末名片 添加图片注释,不超过 140 字(可选) 保险公司应该在承保保单时考虑多种因素,以确保公司的长期健康和稳定性。以下是一个可能的模式,以确…

合同网相关

一、集中式和分布式 集中式:由唯一的中央控制结点对整个系统进行控制。 分布式:对于多UCAV的分布式控制,基于合同网的市场竞拍机制是一种行之有效的方法。合同网的基本思想是将任务分配看作一个交易过程,通过“招标-投标-中标”…

docker相关问题解决(file exists、not a directory

背景 以下环境为wsl file exists 缓存没删干净 docker-compose down -v not a directory flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? 明明我确定报错指示的位置就是文件而不是文件夹...相当神奇的错误 …

嵌入式软件工程师面试题——2025校招社招通用(C/C++)(五十一)

说明: 面试群,群号: 228447240面试题来源于网络书籍,公司题目以及博主原创或修改(题目大部分来源于各种公司);文中很多题目,或许大家直接编译器写完,1分钟就出结果了。但…

yolov8训练自己的关键点检测模型

参考: https://blog.csdn.net/weixin_38807927/article/details/135036450 标注数据集 安装labelme pip install labelme -i https://pypi.tuna.tsinghua.edu.cn/simple如果报错 $ labelme 2024-01-31 03:16:20,636 [INFO ] __init__:get_config:67- Loading …

C# SSH.NET 长命令及时返回

在SSH中执行长时间的命令,SSH.NET及时在文本框中返回连续显示结果。 c# - Execute long time command in SSH.NET and display the results continuously in TextBox - Stack Overflow 博主管理了一个服务器集群,准备上自动巡检工具,测试在…

jsp 产品维修管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 产品维修管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.…

ubuntu22.04 安装部署01:禁用内核更新

一、前言 ubunut22.04系统安装以后,内核更新会导致各种各样的问题,因此锁定初始安装环境特别重要,下面介绍如何锁定内核更新。 二、操作方法 2.1 查看可用内核 dpkg --list | grep linux-image dpkg --list | grep linux-headers dpkg --…

九、Qt图表使用

一、QCharts概述 Qt图表提供了:折线图、样条曲线图、面积图、散点图、条形图、饼图、方块胡须图、蜡烛图、极坐标图。1、QChart介绍 Qt Charts基于Qt的QGraphics View架构,其核心组件是QChartView和QChartQChartView是显示图标的视图,基类为…

SpringBoot使用Rabbit详解含完整代码

点击下载《SpringBoot使用Rabbit详解含完整代码》 1. 摘要 本文将详细介绍如何在Spring Boot应用程序中集成和使用RabbitMQ消息队列。RabbitMQ是一个开源的消息代理和队列服务器,用于通过轻量级和可靠的消息在应用程序或系统之间进行异步通信。本文将通过步骤说明…

nginx负载均衡案例

大家好今天给大家带来nginx负载均衡实验案例,首大家先看一下我的各类版本信息。(还有两台设备信息相同就不展示了) 一,搭建nginx环境 ❶首先创建Nginx的目录并进入: [rootlocalhost]# mkdir /soft && mkdir /soft/nginx…

2024年春节放假调休时间表,提前设置好补班日期提醒

春节将至,期待已久的春节放假时间表也逐渐浮出水面。根据相关通知,2024年春节放假时间为2月10日(初一)至17日(初八),整整8天的长假,而为了照顾员工,还鼓励各单位为员工安…

ref和reactive

看尤雨溪说:为什么Vue3 中应该使用 Ref 而不是 Reactive?

消息队列的应用场景

消息队列的应用场景 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性架构使用较多的消息队列有ActiveMQ,RabbitMQ,Ze…