一、手动添加ON_WM_DEVICECHANGE()消息

二、添加头文件#include <Dbt.h>

三、定义设备的GUID

static const GUID GUID_DEVINTERFACE_LIST[] =
{
    // GUID_DEVINTERFACE_USB_DEVICE     USB设备的GUID
    { 0xA5DCBF10, 0x6530, 0x11D2, { 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } }
};

四、注册设备,只有注册了该设备,OnDeviceChange才能获得详细的信息,否则收到的nEventType参数都是0007,dwData无数据。

HDEVNOTIFY hDevNotify;
    for (int i = 0; i < sizeof(GUID_DEVINTERFACE_LIST) / sizeof(GUID); i++)
    {
        DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
        ZeroMemory(&NotificationFilter, sizeof(NotificationFilter));
        NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
        NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
        NotificationFilter.dbcc_classguid = GUID_DEVINTERFACE_LIST[i];
        hDevNotify = RegisterDeviceNotification(this->GetSafeHwnd(), &NotificationFilter,               DEVICE_NOTIFY_WINDOW_HANDLE);
        if( !hDevNotify ) 
        {
            AfxMessageBox(CString("Can't register device notification: ") 
                + _com_error(GetLastError()).ErrorMessage(), MB_ICONEXCLAMATION);
            return FALSE;
        }
    }

五、添加消息响应函数

声明:afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD dwData);

定义:

BOOL CDeviceChangeDlg::OnDeviceChange(UINT nEventType,DWORD dwData)
{
    DEV_BROADCAST_DEVICEINTERFACE* dbd = (DEV_BROADCAST_DEVICEINTERFACE*) dwData;
    //针对各个事件进行处理.
    switch (nEventType)
    {
    case DBT_DEVICEREMOVECOMPLETE:
        AfxMessageBox(_T("设备移除"));
            break;
    case DBT_DEVICEARRIVAL:
        AfxMessageBox(_T("设备接入"));
            break;
    default:
        break;
    }

return TRUE;
}

note:

源码请参考:https://download.csdn.net/download/qq_23565865/10809685
---------------------
作者:小雨滴答滴答
来源:CSDN
原文:https://blog.csdn.net/qq_23565865/article/details/84561017
版权声明:本文为博主原创文章,转载请附上博文链接!

USB插拔检测程序的更多相关文章

  1. 2018-8-10-WPF-判断USB插拔

    title author date CreateTime categories WPF 判断USB插拔 lindexi 2018-08-10 19:16:53 +0800 2018-8-5 13:0: ...

  2. USB线插拔检测使用UEventObserver检测uevent事件的分析

    说实话这玩样儿的代码量真的很少,大家如果能耐得住性子啃一会儿也就能撸懂了. 在这之前研究USB线插拔的时候就知道了有这么个东西,当时也就看了看,但没做什么笔记.最近想用起来,却发现就只有个名字在记忆中 ...

  3. QTC++监控USB插拔

    #if defined(Q_OS_WIN) #include <qt_windows.h> #include <QtCore/qglobal.h> #include <d ...

  4. C# 上位机的USB设备拔插检测

    我们做USB通信时,通信成功后,往往要检测USB设备的拔插状态,这里就USB拔插进行一下说明. 参考:https://www.imooc.com/article/17438 先说明一下,我这里只是用C ...

  5. ARM上的linux如何实现无线网卡的冷插拔和热插拔

    ARM上的linux如何实现无线网卡的冷插拔和热插拔 fulinux 凌云实验室 1. 冷插拔 如果在系统上电之前就将RT2070/RT3070芯片的无线网卡(以下简称wlan)插上,即冷插拔.我们通 ...

  6. C#.NET U盘插拔监控

    [1]涉及的知识点 1) windows消息处理函数 ? 1 protected override void WndProc(ref Message m) 捕获Message的系统硬件改变发出的系统消 ...

  7. Delphi在Android下实现BroadcastReceiver功能(举例在Delphi下获取USB外设拔插消息)

    在Android里,用java通过实现BroadcastReceiver接口,就可以获得Intent消息.可是Delphi程序不能直接实现JBroadcastReceiver,如何能够实现类似Java ...

  8. 通过解读 WPF 触摸源码,分析 WPF 插拔设备触摸失效的问题(问题篇)

    在 .NET Framework 4.7 以前,WPF 程序的触摸处理是基于操作系统组件但又自成一套的,这其实也为其各种各样的触摸失效问题埋下了伏笔.再加上它出现得比较早,触摸失效问题也变得更加难以解 ...

  9. android6.0 外部存储设备插拔广播以及获取路径(U盘)【转】

    本文转载自:https://blog.csdn.net/zhouchengxi/article/details/53982222 这里我将U盘作为例子来说明解析. android4.1版本时U盘插拔时 ...

随机推荐

  1. 使用 Python 为 KVM 编写脚本,第 1 部分: libvirt

    虚拟化是目前市场上大多数服务器操作系统的标准设备.在 Linux® 的世界里,服务器虚拟化有两个主要选择:基于 Kernel 的虚拟机 (KVM) 和 Xen.KVM 是 Red Hat 和其他公司采 ...

  2. ubuntu vim退出时出错

    E505: "vimrc" is read-only (add ! to override) wq退出时加!强制保存退出 "vimrc" E212: Can't ...

  3. 20145239 GDB调试汇编堆栈过程分析

    20145239 GDB调试汇编堆栈过程分析 测试源代码 #include<stdio.h> ; ; ; static int g(int x) { return x + addend1; ...

  4. grep egrep

    grep: Global search REgular expression and Print out the line. 作用: 文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查:打 ...

  5. delphi函数返回多个值的应用

    方法1: function test(var a,b,c:integer):integer; begin end; 方法2: type info = record name:string; age : ...

  6. mac工作软件推荐-iterm + zsh + tmux

    原文链接: http://ju.outofmemory.cn/entry/57244 tmux安装https://blog.csdn.net/nmgzywd/article/details/50915 ...

  7. codevs1218 疫情控制

    疫情控制(blockade.cpp/c/pas)[问题描述]H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点.H 国的首都爆发了一种危害 ...

  8. ReactJS结合ES6入门Template

    一.前言 二.介绍 ReactJS ECMAScript 6 三.入门DEMO "Hello,XXX“ 输出 ES5写法 <div id="example"> ...

  9. 宽度显示banner

    今天解决了一个以前解决不了的问题,所以就想找博客园记录一些笔记. ……以前也遇到过这种满屏banner不知道怎么做的问题,问老师老师也说不出个所以然,百度搜了好几条 也不太满意... 所以就开始尝试摸 ...

  10. BEC listen and translation exercise 44

    But over the past 70 years or so, there's been a massive increase in one type of crime which was wha ...