usb 视频设备 按钮消息处理 和普通usb连接的事件处理

(c#版,c++/c可仿照修改)

最近要做个usb camera的例子,试过了很多方法,一般的usb连接的处理方法:

(1) define message variables in form class:

public const int WM_DEVICECHANGE = 0x219;
        public const int DBT_DEVICEARRIVAL = 0x8000;
        public const int DBT_CONFIGCHANGECANCELED = 0x0019;
        public const int DBT_CONFIGCHANGED = 0x0018;
        public const int DBT_CUSTOMEVENT = 0x8006;
        public const int DBT_DEVICEQUERYREMOVE = 0x8001;
        public const int DBT_DEVICEQUERYREMOVEFAILED = 0x8002;
        public const int DBT_DEVICEREMOVECOMPLETE = 0x8004;
        public const int DBT_DEVICEREMOVEPENDING = 0x8003;
        public const int DBT_DEVICETYPESPECIFIC = 0x8005;
        public const int DBT_DEVNODES_CHANGED = 0x0007;
        public const int DBT_QUERYCHANGECONFIG = 0x0017;
        public const int DBT_USERDEFINED = 0xFFFF;

(2)  override form class WndProc method:

protected override void WndProc(ref Message m)
        {
            try
            {
                if (m.Msg == WM_DEVICECHANGE)
                {
                    switch (m.WParam.ToInt32())
                    {
                        case WM_DEVICECHANGE:
                            break;
                        case DBT_DEVICEARRIVAL://U盘插入
                            DriveInfo[] s = DriveInfo.GetDrives();
                            foreach (DriveInfo drive in s)
                            {
                                if (drive.DriveType == DriveType.Removable)
                                {
                                    listBox1.Items.Add("U盘已插入,盘符为:" + drive.Name.ToString());
                                    break;
                                }
                            }
                            break;
                        case DBT_CONFIGCHANGECANCELED:
                            break;
                        case DBT_CONFIGCHANGED:
                            break;
                        case DBT_CUSTOMEVENT:
                            break;
                        case DBT_DEVICEQUERYREMOVE:
                            break;
                        case DBT_DEVICEQUERYREMOVEFAILED:
                            break;
                        case DBT_DEVICEREMOVECOMPLETE: //U盘卸载
                            break;
                        case DBT_DEVICEREMOVEPENDING:
                            break;
                        case DBT_DEVICETYPESPECIFIC:
                            break;
                        case DBT_DEVNODES_CHANGED:
                            break;
                        case DBT_QUERYCHANGECONFIG:
                            break;
                        case DBT_USERDEFINED:
                            break;
                        default:
                            break;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            base.WndProc(ref m);
        }
    }

此法的局限性:

对于一般的u盘(u disk/storage),可以处理u盘的insert/remove事件,但是不能处理如camera之类非存储的usb device.

转载于:https://www.cnblogs.com/SunWentao/archive/2011/10/08/2202294.html

usb 视频设备 按钮消息处理 和普通usb连接的事件处理相关推荐

  1. win7 计算机里显示视频,usb视频设备-在win7中,USB视频设备怎么显示啊 – 手机爱问...

    2008-06-11 Windows无法识别USBWindo USB不被电脑识别,如果是系统或系统自带的驱动的原因,一般经过重启就可恢复或开机按F8进入安全模式在退出,在进入正常模式(修复受损的注册表 ...

  2. Windows下获取usb视频设备vendor id和product id的4种方法

    之前在https://blog.csdn.net/fengbingchun/article/details/103507754 博文中介绍过如何在Linux获取usb视频设备的vendor id和pr ...

  3. 海思HI3518EV300作为USB视频设备的相关配置

    作为USB设备,由于需求上没有要求设备需要播放声音,所以把扬声器去掉了,但是在开发过程中遇到设备插到电脑上,电脑将板子的扬声器作为了默认音频输出设备,而板子又没有扬声器,所以电脑识别扬声器失败,出现下 ...

  4. Linux下获取usb视频设备vendor id和product id的8种方法

    在使用usb摄像头获取视频时,有时需要获取此摄像头供应商ID(vendor id, vid)和产品ID(product id, pid),这里在Linux下提供获取vid和pid的8种方法: 1. 通 ...

  5. 树莓派USB存储设备自动挂载并通过脚本实现自动拷贝,自动播放视频,脚本自动升级等功能...

    需求: 首先需要树莓派自动挂载USB设备,然后扫描USB指定目录下文件,将相关文件拷贝至树莓派指定目录,然后通过omxplayer循环播放新拷贝文件视频 1. 树莓派实现USB存储设备自动挂载 树莓派 ...

  6. 【STM32学习】基于STM32F411CEU6的USB储存设备

    1. 实现动机 最近打算做一下lvgl在stm32上的移植,考虑到lvgl可能会用到一些图片资源, 这样一来文件系统就很有必要了,于是想在手头的一块小板子上实现一下FatFs和USB Mass Sto ...

  7. 用 C# 编写 USB 存储设备使用痕迹检测和删除工具

    编写 USB 存储设备使用痕迹检测和删除工具 (C# Windows Form 编程练习) [版权所有 邱秋 2014 metaphysis@yeah.net, 转载请注明出处] 第一节 准备知识 之 ...

  8. Linux内核USB总线--设备控制器驱动框架分析

    正文 1.概述 如下图所示,USB控制器可以呈现出两种不同的状态.USB控制器作为Host时,称为USB主机控制器,使用USB主机控制器驱动.USB控制器作为Device时,称为USB设备控制器,使用 ...

  9. 计算机无法识别华为usb设备,华为路由A1插上USB储存设备无法识别怎么办

    华为路由A1可以在插上USB储存设备(U盘.移动硬盘等)之后开启路由器的文件共享功能,将设备中的文件分享给连接到路由器wifi的用户.但如果插上USB储存设备后路由器无法识别怎么办,可能是什么原因,怎 ...

最新文章

  1. php手机建站,PHP免费开源建站系统含手机站V1.7.6
  2. 氮化镓充电器哪家好_双十二推荐入手的热门氮化镓充电器
  3. java thread 内存泄露_Java ThreadLocal 内存泄露问题分析及解决方法。
  4. 阿里云年会人机大战-技术大揭秘
  5. 是什么能让 APP 快速精准定位到我们的位置?
  6. Win10+Anaconda环境下安装PyTorch
  7. Ubuntu远程服务器创建新用户并赋予权限
  8. c语言基础知识难点,C语言基础的几个难点解析
  9. Qt动态映射qobject_cast()
  10. _Linux学习手册(二)—文件目录类命令
  11. 中国物联网卡的发展历史和变革
  12. 还在为JS闭包烦恼? FF带你一篇文章玩转闭包,某化腾听了都说好!!
  13. 秒杀竞拍屡创网络神话:馅饼还是美丽陷阱
  14. Xilinx FPGA时钟及I/O接口规划(二)
  15. ffmpeg 命令的使用
  16. swing(二十一)
  17. 【linux基础-1】linux下的快捷键-根目录结构-用户目录
  18. 用python实现卡普雷卡尔黑洞(重排求差黑洞)的计算
  19. 微信公众号服务器搭建
  20. 数学建模之出租车数目估计

热门文章

  1. checkbox click和change事件
  2. Can not find the tag library descriptor for “http://java.sun.com/jsp/jstl/core“
  3. jQuery Ajax请求成功后,为什么一直在error函数里
  4. Python3.8 安装gmpy2 教程, 无法安装gmpy2解决方案
  5. 【CCCC】L3-011 直捣黄龙 (30分),Dijkstra维护点权,节点数,路径条数等+路径打印
  6. 【职业】大一规划、体验生活、故事里
  7. linux向用户发送消息,Linux终端中向记录的用户发送消息
  8. 服务链路追踪配置mysql_学习微服务的服务链路追踪——Spring Cloud Sleuth+zipkin
  9. html期末作品,走完HTML和CSS,进军期末
  10. access游戏库不显示 ea_全球游戏公司营收一览:腾讯连续第六年霸榜