`
isiqi
  • 浏览: 16867324 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

USB设备的插入和弹出的监听以及软弹出可移动媒体(如Windows的移除USB设备)

阅读更多

一、监听USB设备的插入和弹出

当USB设备插入或者弹出时,Windows会产生一条全局消息:WM_DEVICECHANGE

我们需要做的是,获得这条消息的wParam参数,如果为DBT_DEVICEARRIVAL则表示有设备插入并可用,

如果是DBT_DEVICEREMOVECOMPLETE则表示有设备已经移除。再查看lParam参数为DBT_DEVTYP_VOLUME时,

就可以取出DEV_BROADCAST_VOLUME结构的卷号dbcv_unitmask,就知道是哪个卷被插入或者弹出。

代码片段如下:

现在,你可以在你的UI线程上创建一个DriveDetector对象,监听DeviceArrived和DeviceRemoved事件。

然后通过该对象WndProc方法,传递UI线程上的消息。WPF程序可以直接用HwndSource对象AddHook,此方法的签名

与HwndSourceHook委托相同。WinForm程序也没关系,override窗口的void WndProc(ref Message m)方法,按

DriveDetector对象的WndProc签名格式,将m数据传入,或者干脆自己写个WinForm版本的。

我的演示代码效果图如下:(注,上述代码未提供显示代码,请自己编写)

另外,关于磁盘容量的监视可以使用FileSystemWatcher对象。

请参考:http://msdn.microsoft.com/zh-cn/library/cc437966.aspx

摘取代码如下:

二、软件弹出可移动媒体

网上有一部分关于这方法的代码,我的代码是从MSDN获取的VC++版本,需要调用多个API函数,转换为C#代码如下:

参考:http://support.microsoft.com/kb/165721

预览:(注,弹出可移动磁盘,并不会删除驱动器号,但设备已经被弹出,如图中的h盘

注:已改进,安全弹出后,通过DDD_REMOVE_DEFINITION移除h盘。

分享到:
评论

相关推荐

    USB设备监测插入及安全弹出示例

    USB设备监测插入及安全弹出示例是一个VB(Visual Basic)编程示例,它演示了如何在Windows操作系统中实现对USB设备的实时监控和安全移除功能。VB是一种面向对象的编程语言,尤其适合开发Windows应用程序。这个示例...

    C# 安全移除USB设备

    在本实例中,我们将探讨如何使用C#来安全地检测和移除USB设备。这个主题涉及到Windows API调用、设备管理以及用户界面的交互。 首先,了解USB设备的基本概念是必要的。USB(Universal Serial Bus)是一种通用串行...

    Qt利用WindowsAPI弹出U盘

    首先,Qt提供了一个名为`QSystemTrayIcon`的类,可以用来监听系统托盘事件,包括设备插入和移除。通过重载`QSystemTrayIcon::messageClicked()`和`QSystemTrayIcon::activated()`等方法,我们可以捕获到U盘插入和...

    VB检测USB等可移动设备

    本项目“VB检测USB等可移动设备”旨在利用VB来实现一个系统监控功能,当有USB设备,如U盘或内存卡等可移动存储设备插入计算机时,能够自动检测到并弹出窗口显示该设备的盘符信息。 在VB中,我们可以使用Windows API...

    Qt之USB热插拔

    当插入可移动设备,如USB闪存驱动器,应用程序可以实时地接收到通知,并根据需求执行相应的操作,比如读取数据、写入文件等。同时,它还能响应用户的右键操作,弹出设备,以及设备的移除动作,确保在设备物理移除前...

    u盘监听程序源码

    这段代码主要涉及的是如何在Windows系统下监听USB设备(如U盘)的插入与移除事件,并且能够输出U盘的盘符。此外,代码还展示了如何利用Windows API进行设备监控、以及通过注册表操作来控制USB存储服务的状态。以下将...

    C#快速识别U盘

    4. **IoctlStorageEjectMedia** 或 **IoctlStorageResetDevice**:控制设备操作,如弹出或初始化U盘。 在C#中,可以使用`DllImport`特性导入这些API,并使用`ManagementObjectSearcher`类查询WMI(Windows ...

    u盘操作程序详细代码介绍

    - **设备插入事件**:当检测到有新设备插入时,程序会遍历所有可用的驱动器,并检查其类型是否为可移动存储设备(即U盘)。如果是,则将其名称添加到窗体中的`listBox1`控件中。 - **异常处理**:在处理过程中,如果...

    adb1.0.26包含fastboot.exe

    这一点貌似在 Linux 和 Mac OS X 下不用操心,在 Windows 下有可能遇到需要安装驱动的情况,确认这一点可以右键「计算机」-「属性」,到「设备管理器」里查看相关设备上是否有黄色感叹号或问号,如果没有就说明驱动...

Global site tag (gtag.js) - Google Analytics