WM_DEVICECHANGE メッセージをリッスンして、特定の USB 大容量記憶装置が接続されているときと接続されていないときを検出するアプリケーションを作成しています。
また、( RegisterDeviceNotification API 呼び出しを使用して)WM_DEVICECHANGEメッセージをリッスンするようにアプリケーションを登録しました。USB 大容量記憶装置デバイスが接続または切断されたときに、とメッセージの両方を受け取ります。DBT_DEVTYP_DEVICEINTERFACEDBT_DEVICEARRIVALDBT_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 に通知させる方法はありますか?