WM_DEVICECHANGE メッセージをリッスンして、特定の USB 大容量記憶装置が接続されているときと接続されていないときを検出するアプリケーションを作成しています。
また、( RegisterDeviceNotification API 呼び出しを使用して)WM_DEVICECHANGE
メッセージをリッスンするようにアプリケーションを登録しました。USB 大容量記憶装置デバイスが接続または切断されたときに、とメッセージの両方を受け取ります。DBT_DEVTYP_DEVICEINTERFACE
DBT_DEVICEARRIVAL
DBT_DEVICEREMOVECOMPLETE
この問題は、複数のボリュームを持つUSB デバイスを接続してから取り外すと発生します。
デバイスが接続されると、次のメッセージが表示されます。
WM_DEVICECHANGE
(DBT_DEVICEARRIVAL
タイプのDBT_DEVTYP_DEVICEINTERFACE
)WM_DEVICECHANGE
(DBT_DEVICEARRIVAL
タイプのDBT_DEVTYP_VOLUME
)WM_DEVICECHANGE
(DBT_DEVICEARRIVAL
タイプのDBT_DEVTYP_VOLUME
)
また、プラグを抜くと次のメッセージが表示されます。
WM_DEVICECHANGE
(DBT_DEVICEREMOVECOMPLETE
タイプのDBT_DEVTYP_VOLUME
)WM_DEVICECHANGE
(DBT_DEVICEREMOVECOMPLETE
タイプのDBT_DEVTYP_DEVICEINTERFACE
)
そのため、ボリュームが 2 つあるにもかかわらず、削除メッセージは 1 つだけです。どうして??
2 つの質問があります。
DBT_DEVTYP_DEVICEINTERFACE
メッセージとメッセージを関連付けるにはどうすればよいDBT_DEVTYP_VOLUME
ですか (本質的に、どのVOLUMEメッセージがどのDEVICEINTERFACEメッセージに対応しているかを知るにはどうすればよいですか? デバイスの両方を取得するため)。- 両方のボリュームの削除を Windows に通知させる方法はありますか?