Это правда, в большинстве случаев вы получаете множество сообщений.Мое решение этого было похоже на ваше, за исключением того, что вместо таймера я использовал поток.В этом случае мое время ожидания составляло 15 с (после DBT_DEVICEARRIVAL).
Фактически DBT_DEVICEARRIVAL - это именно то, что вы ищете, когда я смотрю на формулировку вашего вопроса.Устройство доступно в это время, даже если последуют дополнительные уведомления.При подключении USB-ключа я получаю следующее:
- DBT_DEVNODES_CHANGED
- DBT_DEVNODES_CHANGED
- DBT_DEVNODES_CHANGED
- DBT_DEVICEARRIVE_DB_DEVICE_REVE_DB_T_P_DEVICE_REVE_DBT_TEVPLE_DB_RETEдоступно)
- DBT_DEVNODES_CHANGED
- DBT_DEVNODES_CHANGED
- DBT_DEVNODES_CHANGED
Для ваших целей уведомления DBT_DEVNODES_CHANGED не имеют значения.Вы заинтересованы исключительно в DBT_DEVICEARRIVAL ($ 8000 на языке Delphi).
Кроме того, было бы действительно полезно, если бы вы обращались к сообщениям по их символическому имени, а не по их номеру.