我正在使用WM_DEVICECHANGE在新USB驱动器连接到计算机时收到通知。这对于像拇指驱动器这样的设备非常有用,只要设备到达它就可以从中读取文件了。对于像SD卡读卡器这样的设备,它不会,因为当设备连接时,消息会被发送一次,但当用户实际将卡插入设备时,不会发送消息。
是否可以在不使用轮询的情况下检测新媒体插入现有USB设备?
答案 0 :(得分:8)
答案 1 :(得分:2)
在“更改通知观察器示例”中有一个非常好的SHChangeNotifyRegister
用法示例。
从以下地址下载:
http://msdn.microsoft.com/en-us/library/dd940348.aspx#downloading
我在我的Qt代码中实现了SHChangeNotifyRegister。
感谢卢克的非常好的答案!
答案 2 :(得分:0)
可能是SD阅读器驱动程序中的错误。 WM_DEVICECHANGE中的描述为“DBT_DEVICEARRIVAL 0x8000已插入设备或介质,现已可用。”
因此,您应该收到媒体插入通知。
您尝试使用RegisterDeviceNotification了吗?默认情况下仅发送一些通知,并且媒体更改可能不是其中之一。
答案 3 :(得分:0)
也许这是设备驱动程序中的一个错误(我当然认为它是),但它们似乎都以相同的方式工作......不是。所以在这一点上,即使微软(可能是最大的开发人员)让你相信它应该以这种方式工作(不适用于我的Windows7微软驱动程序),我认为你不能让任何设备驱动程序devlopers改变他们的设备特性。将SD卡插入USB设备只是不会触发WM_DEVICECHANGE消息。
将SHChangeNotifyRegister用于媒体类型设备。它不需要寄存器devicenotification。您可以通过SHGetPathFromIDList获取驱动器号。使用SHCNE_MEDIAINSERTED和SHCNE_MEDIAREMOVED。
如果您正在寻找硬件设备而不是媒体设备,请使用设备ONDeviceNotify,或者您可以编写自己的设备驱动程序。