USB设备插拔消息响应,获取VIDPID

STM32 USB HID 组合设备(配置多个接口) USB Compound Device,USB复合设备 USB Composite Device,USB组合设备   USB Composite Device,不内嵌Hub,几个设备的PID和VID都是相同。   此文均在STM32F767IGTx已实现普通custom HID工程上做解释。 //usb配置描述符 /* USB CUSTOM_HID device Configurati... 阅读详情

//USB Connect
#include "Dbt.h"
#include "usbiodef.h"
#include <winioctl.h>
#include <setupapi.h>
#include <initguid.h>  

DEFINE_GUID(GUID_DEVINTERFACE_USB_DEVICE,   
            0xA5DCBF10L,   0x6530,   0x11D2,   0x90,   0x1F,   0x00,   0xC0,   0x4F,   0xB9,   0x51,   0xED);   
DEFINE_GUID(GUID_DEVINTERFACE_USB_HUB,    0xf18a0e88, 0xc30c, 0x11d0, 0x88, 0x15, 0x00, \
            0xa0, 0xc9, 0x06, 0xbe, 0xd8);

#define GUID_CLASS_USBHUB               GUID_DEVINTERFACE_USB_HUB
#define GUID_CLASS_USB_DEVICE           GUID_DEVINTERFACE_USB_DEVICE

#pragma comment(lib, "hid.lib")
#pragma comment(lib, "setupapi.lib")
#pragma comment(lib, "imagehlp.lib")


BOOL CCameraMsgDlg::OnDeviceConnect()
{

    HINSTANCE hInstance = (HINSTANCE)GetWindowWord(this->m_hWnd, GWL_HINSTANCE);

    WNDCLASS wndclass;

    wndclass.style          = 0;
    wndclass.lpfnWndProc    = ConnWndProc;
    wndclass.cbClsExtra     = 0;
    wndclass.cbWndExtra     = 0;
    wndclass.hInstance      = hInstance;
    wndclass.hIcon          = NULL;
    wndclass.hCursor        = NULL;
    wndclass.hbrBackground  = NULL;
    wndclass.lpszMenuName   = NULL;
    wndclass.lpszClassName  = "InspurDeviceWnd";

    RegisterClass (&wndclass);

    g_hwndConnDev = CreateWindow(wndclass.lpszClassName, // pointer to registered class name
        "HeHe Device Window",       // pointer to window name
        0,// window style
        0,                                // horizontal position of window
        0,                                // vertical position of window
        0,                                // window width
        0,                                // window height
        NULL,                            // handle to parent or owner window
        NULL,                            // handle to menu or child-window identifier
        hInstance,                    // handle to application instance
        NULL);                            // pointer to window-creation data

    ::ShowWindow (g_hwndConnDev, SW_HIDE);

    DEV_BROADCAST_DEVICEINTERFACE   broadcastInterface;    
    //SECURITY_ATTRIBUTES                sec_attr;
    //SECURITY_DESCRIPTOR                sd;

    ZeroMemory( &broadcastInterface,sizeof(broadcastInterface));
    broadcastInterface.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
    broadcastInterface.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;


    memcpy( &(broadcastInterface.dbcc_classguid),
        &(GUID_CLASS_USB_DEVICE),
        sizeof(struct _GUID));

   HANDLE Hhanm_hNotifyDevHandle = RegisterDeviceNotification((HANDLE)g_hwndConnDev,
        &broadcastInterface,
        DEVICE_NOTIFY_WINDOW_HANDLE );

    // Now register for Hub notifications.
    memcpy( &(broadcastInterface.dbcc_classguid),
        &(GUID_CLASS_USBHUB),
        sizeof(struct _GUID));

    HANDLE    m_hNotifyHubHandle = RegisterDeviceNotification((HANDLE)g_hwndConnDev,
        &broadcastInterface,
        DEVICE_NOTIFY_WINDOW_HANDLE);

    return TRUE;

}

LRESULT CALLBACK ConnWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    PDEV_BROADCAST_HDR                pDevBcastHdr;
    PDEV_BROADCAST_DEVICEINTERFACE    pDevBcastDevIface;
    char *                            lpTmp=0;

    switch (msg)
    {
    case WM_CREATE:
        break;
    case WM_DEVICECHANGE:
        switch (wParam)
        {

        case DBT_DEVICEARRIVAL:
        case DBT_DEVICEREMOVECOMPLETE:

            pDevBcastHdr = (PDEV_BROADCAST_HDR)lParam;
            if (! pDevBcastHdr || pDevBcastHdr->dbch_devicetype != DBT_DEVTYP_DEVICEINTERFACE)
                break;
            pDevBcastDevIface = (PDEV_BROADCAST_DEVICEINTERFACE)lParam;

            // Get Vid Pid value
            lpTmp = strchr (pDevBcastDevIface->dbcc_name, 'V');
             if(lpTmp)
             {
                 lpTmp += 4;
                if(!memcmp(lpTmp,g_cVID,4))
                {
                    if (lpTmp = strchr(lpTmp, 'P'))
                    {
                        lpTmp += 4;
                        if(!memcmp(lpTmp,g_cPID_RGB,4) || !memcmp(lpTmp,g_cPID_Infrared,4))
                        {
                            //2USB connect status
                            if(wParam == DBT_DEVICEREMOVECOMPLETE)
                            {
                                if(g_pCameraMsgDlg)
                                {
                                    g_pCameraMsgDlg->WriteStatusMemory(1);
                                }
                            }
                            else if(wParam == DBT_DEVICEARRIVAL)
                            {
                                //2USB all Connect 
                                if(GetCameraUSB())
                                {
                                    if(g_pCameraMsgDlg)
                                    {
                                        g_pCameraMsgDlg->WriteStatusMemory(0);
                                    }
                                }
                            }
                        }
                    }
                }
             }
            //sscanf ((const char *)lpTmp, "%x", &wVendorId);
    
            break;
        }
        break;
    case WM_CLOSE:
        {
            DestroyWindow(g_hwndConnDev);
            break;
        }
    case WM_DESTROY:
        {
            // Wait all Device DLL are closed !!!
            PostQuitMessage(0);
        }
        break;
    default:
        return DefWindowProc (hwnd, msg, wParam, lParam);
    }

    return 0;
}

通过USB VID和PID卸载USB设备 以前也发过一几篇关于卸载USB设备的文章,其实原理都是一样都是使用同一个API "CM_Request_Device_Eject_ExW"来完成卸载工作,上一篇是通过遍历USB接点实现,这篇文章直接通过USB 的VID和PID获取其对应的DevInst来完成卸载工作。本篇文章通过使用了WMI技术来实现了很多关键点的功能。 查了很多资料想了很多方法也没找到从一个USB盘符获取该USB设备的V 阅读详情

相关推荐

获取USB设备插拔消息的备忘

获取USB设备插拔消息的备忘coolslob(coolslob@163.com)先记录要点,有空再整理成文。1、可根据dbch_devicetype(DBT_DEVTYP_DEVICEINTERFACE和DBT_DEVTYP_VOLUME),分别得到PID/VID/SN和盘符号。2、当USB设备不是存储设备时,只出发一次WM_DEVICECHANGE,devicetype是DBT_DEVTYP_D

coolslob 8143

USB的VID和PID

USB Vendor IDs 厂商 VID 厂商 VID 厂商 VID 厂商 VID 厂商 VID MTK 0e8d Qualcomm 05c6 Google 18d1 Huawei 12d1 HTC 0bb4 Acer 0502 ASUS 0b05 Dell 413c Foxconn 0489 Fujitsu 04c5 Garmin-Asus 091e Haier 201...

连长的博客 5545

MFC监控USB接口插拔情况并获取VID与PID

MFC监控USB接口插拔情况,并获取VID与PID显示出来。 开发工具:VS2015

前端获取usb串口,实现电子秤的对接

纯vue 获取usb串口,实现电子秤的对接

weixin_46166771的博客 6712

C#获取usb设备VID和PID

//调用方法:搜索所有USB设备.. USB.WhoUsbDevice(0, 0, Guid.Empty)

树莓派学习系列7——GPIO基础

前言 原来学单片机的时候,就是通过一系列的引脚来控制单片机。终于学到了通过引脚来控制树莓派了。话不多说咱们先来了解基础。

我在等那么一天的博客 1万+

C# 串口获取更详细信息 设备描述、PID、VID

C# 调用了windows steupAPI 里的接口获取了串口列表信息。

m0_54012127的博客 3512

Zemax光学设计——单透镜设计

(1)在镜头数据编辑器中面2那一栏中的“曲率半径”栏右侧的方格中单击,弹出“在面2上的曲率解”对话框(2)将对话框中的求解类型设为“F数”(3)将“F/#”设置为10设置完成后,其中的一些数据会发生变化在初始结构中,透镜的曲率半径和厚度未知,,这些参数需要软件自动优化得到,但可以使用透镜后表面上边缘厚度解得到近轴焦平面的位置在透镜后表面的厚度上单击鼠标右键,选择边缘光线求解类型,它表示近轴边缘光线会自动在下一个表面上聚焦并确定距离值。

yangSHU21的博客 2万+

USB-VID和PID

根据USB规范的规定,所有的USB设备都有供应商ID(VID)和产品识别码(PID),主机通过不同的VID和PID来区别不同的设备,VID和PID都是两个字节长,其中,供应商ID(VID)由供应商向USB执行论坛申请,每个供应商的VID是唯一的,PID由供应商自行决定,理论上来说,不同的产品、相同产品的不同型号、相同型号的不同设计的产品最好采用不同的PID,以便区别相同厂家的不同设备。 ...

BUG从入门到精通 1530

复合材料RVE建模与力学性能分析实战指南

代表体积元(RVE)建模是复合材料多尺度分析的核心技术,通过建立微观结构与宏观性能的定量关联,可准确预测材料力学行为。本文基于ABAQUS平台,详细解析三材料(纤维/基体/界面相)RVE建模全流程,包括参数化几何建模、周期性网格划分策略、材料属性定义技巧等关键技术环节。针对碳纤维增强环氧树脂等典型复合材料,提供网格控制参数建议和材料参数参考表,并重点说明周期性边界条件的实现方法与验证标准。通过Python脚本自动化处理和优化分析流程,可显著提升计算效率,为复合材料设计提供可靠仿真依据。

weixin_34062469的博客 549

SceneSplat

目标:训练一个网络,输入高斯参数 → 输出与自然语言空间对齐的特征。考虑到标注语义的 3DGS 数据有限,作者设计了。策略,让模型在无标签场景上学到有用表征。都有一个与自然语言对齐的语义特征。这是整个方法的第一步,目标是让。

weixin_61091146的博客 1284

vc通过usb获取手机设备vidpid

#include #include #pragma comment(lib,"setupapi.lib") DEFINE_GUID (UsbClassGuid, 0xa5dcbf10L, 0x6530, 0x11d2, 0x90, 0x1f, 0x00, 0xc0, 0x4f, 0xb9, 0x51, 0xed); void getmobilepho

Keivin 5450

java毕设:基于springboot的服装搭配推荐系统(springboot+layui+jq+html)1011

项目描述 基于springboot的服装搭配推荐系统: 基于天气服装搭配推荐系统为用户提供未来一周的天气预报情况,并根据预报天气和用户现有的服装进行着装搭配,以及显示未来6小时精确温度数据为用户提供更精确的天气信息便于用户在出行前对自己的着装进行调整,每日用户可以根据自己当日对系统推荐的着装搭配舒适度进行反馈,系统将根据用户的反馈对用户着装的保暖系数进行相应调整,通过多次的反馈和调整形成对用户着装的个体化和精确化的推荐。 本系统可以为用户提供以下服务: 1.未来五天的天气信息显示; 2.未来六小时内天气温度

qq_2537071370的博客 3647

Qt 动态链接库监听USB热插拔,获取硬件VID,PID

Qt中对USB设备的插拔,可使用nativeEvent系统消息处理函数进行处理,但该函数仅支持当前窗口下的USB设备的监控,当需要在生成的动态链接库中监控系统消息事件,需要使用nativeEventFilter。在需要使用时,工程中使用qApp->installNativeEventFilter()的方式安装事件过滤器。 对于USB的设备获取VID,PID,还需要对硬件GUID进行注册,由于是库中注册,需要传入界面对应的WinId

zjgo007的专栏 2858

Nacos 从困惑到蒙圈(9)Nacos 适配 达梦数据库【最新版】

介绍Nacos适配达梦数据库的详细步骤,包括对最新版本的支持改造。

甘蓝的专栏 1378

VTK API 详解(103):vtkGPUVolumeRayCastMapper - GPU加速体绘制

是 VTK 中基于 GPU 的高效体绘制映射器,利用现代显卡的计算能力,通过射线投射算法实现快速且高质量的三维体积渲染。相比 CPU 版本的,GPU 映射器性能大幅提升,支持更复杂的光照和渲染效果,是体绘制的主流选择。是 VTK 中性能优异的GPU体绘制映射器;适合大数据集和实时交互应用;配合灵活设置颜色、透明度和光照;建议在支持OpenGL的环境中使用。

yumeiguo的博客 295

【VC】 获取电脑USB设备VID和PID等信息。

1,添加头文件和宏定义 #include #include #pragma comment(lib,"setupapi.lib") DEFINE_GUID (UsbClassGuid, 0xa5dcbf10L, 0x6530, 0x11d2, 0x90, 0x1f, 0x00, 0xc0, 0x4f, 0xb9, 0x51, 0xed); //USB GUID

shen_wei的专栏 8414

RK3568-适配phy芯片ip101gri

复位时间查阅数据手册。

Paper_Love的博客 2643

MFC HID设备热插拔检测指定VID和PID

在做上位机时,需要检测指定VID和PID的HID设备接入或者移除,随手记录之。1、在xxxxDlg.cpp文件增加消息 ON_WM_DEVICECHANGE。2、在xxxxDlg.h头文件增加消息处理函数。3、include头文件。4、在初始化函数注册。

u012583900的博客 399

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Windows枚举设备信息

枚举设备信息主要通过SetupAPI 模块中的接口来实现,配合对应的设备类 GUID。 这里以枚举 USB 设备信息为例,包含设备实例地址等: SetupDiEnumDeviceInfo

龚建波 2541

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

(已解决!GUID的外部定义和内部定义)VC编译错误:error LNK2001: unresolved external symbol _GUID_DEVINTERFACE_USB_DEVICE

兜了一大圈后,回到原点,再次思索如何解决。先看上次的结果:“自己定义之后,提示重复链接;不自己定义,包含initguid.h,又提示其他的GUID重复定义;不自己定义,也不包含,提示没有链接到lib。” 此次,再次编译时,我想到一个折衷的办法,既能保证“其他的GUID”不重复定义,又能保证GUID_DEVINTERFACE_USB_DEVICE被定义。如下:#include

尘埃落定 7171

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Android监听usb插拔pid,MFC监控USB接口插拔情况并获取VID与PID

【实例简介】MFC监控USB接口插拔情况,并获取VID与PID显示出来。开发工具:VS2015【实例截图】【核心代码】049e4e43-1768-44e3-a5ad-92534da32a6e├── Debug│ ├── USB_test.exe│ ├── USB_test.ilk│ └── USB_test.pdb├── ipch│ └── USB_TEST-7ac60d3d│...

weixin_26735445的博客 365

MFC-设备插入后获取插入设备的信息

在这种情况下,尽管是网络设备,操作系统并不会通过 GUID_DEVINTERFACE_NET 触发事件,而是触发 USB 设备事件。有一些通过usb插入的设备,如车载摄像头,只能识别成usb设备,如果注册成网络设备,程序识别不出来新插入的设备信息,在。可以识别新设备的插入拔出,但是需要在初始化是注册设备通知,如果不知道要插入的设备类型,就需要注册所有设备,不然在。函数中系统传入的参数会固定,nEventType=7,dwData=NULL。1.定义设备类型的GUID(sdk有的版本没有缺少一些GUID)

weixin_45888658的博客 667

C++获取所有USB接口的vid、pid等信息

最近项目要写一个MFC的外挂程序,要分别获取电脑上所有扫描枪的输入信息,这时我们就需要根据扫描枪的vid和pid进行区分,有一些同批次同型号的输入设备vid和pid会相同,我们可能需要设备实例路径进行区分,可以在设备管理器->键盘->点击设备查看,如图: 这里记录一下获取USB信息的代码,因为涉及到公司业务,只给出这部分我封装好的类,这是MFC下继承CDialogEx的类,C++只需...

qq_39554698的博客 1万+

USB设备VID-PID读取

#include <setupapi.h> #pragma comment(lib, "setupapi.lib") CHAR g_cVID[5] = {0}; CHAR g_cPID_RGB[5] = {0}; CHAR g_cPID_Infrared[5] = {0}; BOOL GetCameraUSB() { BOOL bRet = FALSE; BOOL...

ADA_Ivan的博客 3544
上一篇: USB设备VID-PID读取
下一篇: C++图片数据流显示在窗口上
ADA_Ivan
博客等级 码龄10年 2粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值