一、监听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设备监测插入及安全弹出示例是一个VB(Visual Basic)编程示例,它演示了如何在Windows操作系统中实现对USB设备的实时监控和安全移除功能。VB是一种面向对象的编程语言,尤其适合开发Windows应用程序。这个示例...
在本实例中,我们将探讨如何使用C#来安全地检测和移除USB设备。这个主题涉及到Windows API调用、设备管理以及用户界面的交互。 首先,了解USB设备的基本概念是必要的。USB(Universal Serial Bus)是一种通用串行...
首先,Qt提供了一个名为`QSystemTrayIcon`的类,可以用来监听系统托盘事件,包括设备插入和移除。通过重载`QSystemTrayIcon::messageClicked()`和`QSystemTrayIcon::activated()`等方法,我们可以捕获到U盘插入和...
本项目“VB检测USB等可移动设备”旨在利用VB来实现一个系统监控功能,当有USB设备,如U盘或内存卡等可移动存储设备插入计算机时,能够自动检测到并弹出窗口显示该设备的盘符信息。 在VB中,我们可以使用Windows API...
当插入可移动设备,如USB闪存驱动器,应用程序可以实时地接收到通知,并根据需求执行相应的操作,比如读取数据、写入文件等。同时,它还能响应用户的右键操作,弹出设备,以及设备的移除动作,确保在设备物理移除前...
这段代码主要涉及的是如何在Windows系统下监听USB设备(如U盘)的插入与移除事件,并且能够输出U盘的盘符。此外,代码还展示了如何利用Windows API进行设备监控、以及通过注册表操作来控制USB存储服务的状态。以下将...
4. **IoctlStorageEjectMedia** 或 **IoctlStorageResetDevice**:控制设备操作,如弹出或初始化U盘。 在C#中,可以使用`DllImport`特性导入这些API,并使用`ManagementObjectSearcher`类查询WMI(Windows ...
- **设备插入事件**:当检测到有新设备插入时,程序会遍历所有可用的驱动器,并检查其类型是否为可移动存储设备(即U盘)。如果是,则将其名称添加到窗体中的`listBox1`控件中。 - **异常处理**:在处理过程中,如果...
这一点貌似在 Linux 和 Mac OS X 下不用操心,在 Windows 下有可能遇到需要安装驱动的情况,确认这一点可以右键「计算机」-「属性」,到「设备管理器」里查看相关设备上是否有黄色感叹号或问号,如果没有就说明驱动...