MF C C ++ отличает два устройства от уведомлений WM_DEVICECHANGE - PullRequest
1 голос
/ 04 марта 2020

Я кодирую функцию для обнаружения добавления / удаления USB-устройств, используя C ++ VS2019 в windows. WM_DEVICECHANGE выдает уведомление, когда устройство удалено или подключено к P C, но выдает несколько уведомлений для одного устройства. Параметры, которые возвращаются через, также одинаковы для всех уведомлений.

Проблема в том, что когда два устройства подключены или удалены одно за другим, количество уведомлений увеличивается, но параметры остаются неизменными. Как отличить уведомления от разных устройств.

BEGIN_MESSAGE_MAP(CCheckDlg, CDialogEx)
   ON_MESSAGE(WM_DEVICECHANGE, &CCheckDlg::OnMyDeviceChange)
END_MESSAGE_MAP()

Функция:

    LRESULT CCheckDlg::OnMyDeviceChange(WPARAM wParam, LPARAM lParam)
    {
        //When USB device connected or removed,
        //The wParam is always equal to 7 and lParam is equal to 0.
    }

Или, если есть какой-либо другой способ обнаружения добавления / удаления устройства с помощью C ++, Вы можете предложить.

Спасибо.

1 Ответ

2 голосов
/ 04 марта 2020

wParam сообщения WM_DEVICECHANGE содержит конкретное событие, которое вызвало это сообщение. Значение 7 относится к событию DBT_DEVNODES_CHANGED.

В документации для DBT_DEVNODES_CHANGED поясняется:

Нет дополнительной информации о том, какое устройство имеет были добавлены или удалены из системы. Приложения, которым требуется дополнительная информация, должны зарегистрироваться для уведомления устройства с помощью функции RegisterDeviceNotification .

...