Функция RegisterDeviceNotificationA (winuser.h)
Регистрирует устройство или тип устройства, для которого окно будет получать уведомления.
Примечание
Вы можете использовать CM_Register_Notification вместо RegisterDeviceNotification, если ваш код предназначен для Windows 8 или более новых версий Windows. Преимущество CM_Register_Notification заключается в том, что для работы не требуется дескриптор окна.
Синтаксис
HDEVNOTIFY RegisterDeviceNotificationA(
[in] HANDLE hRecipient,
[in] LPVOID NotificationFilter,
[in] DWORD Flags
);
Параметры
[in] hRecipient
Дескриптор окна или службы, которые будут получать события устройства для устройств, указанных в параметре NotificationFilter . Один и тот же дескриптор окна можно использовать в нескольких вызовах RegisterDeviceNotification.
Службы могут указывать дескриптор окна или дескриптор состояния службы.
[in] NotificationFilter
Указатель на блок данных, указывающий тип устройства, для которого должны отправляться уведомления. Этот блок всегда начинается со структуры DEV_BROADCAST_HDR . Данные, следующие за этим заголовком, зависят от значения элемента dbch_devicetype , которое может быть DBT_DEVTYP_DEVICEINTERFACE или DBT_DEVTYP_HANDLE. Дополнительные сведения см. в подразделе "Примечания".
[in] Flags
Этот параметр может принимать одно из указанных ниже значений.
Кроме того, можно указать следующее значение.
Возвращаемое значение
Если функция выполняется успешно, возвращаемое значение будет дескриптором уведомления устройства.
Если функция завершается сбоем, возвращается значение NULL. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Комментарии
Приложения отправляют уведомления о событиях с помощью функции BroadcastSystemMessage . Любое приложение с окном верхнего уровня может получать основные уведомления, обрабатывая WM_DEVICECHANGE сообщение. Приложения могут использовать функцию RegisterDeviceNotification для регистрации для получения уведомлений устройства.
Службы могут использовать функцию RegisterDeviceNotification для регистрации для получения уведомлений устройства. Если служба указывает дескриптор окна в параметре hRecipient , уведомления отправляются в процедуру окна. Если hRecipient является дескриптором состояния службы, SERVICE_CONTROL_DEVICEEVENT уведомления отправляются обработчику управления службой. Дополнительные сведения об обработчике элементов управления службой см. в разделе HandlerEx.
Не забудьте как можно быстрее обрабатывать события Plug and Play устройства. В противном случае система может перестать отвечать на запросы. Если обработчик событий выполняет операцию, которая может блокировать выполнение (например, ввод-вывод), лучше запустить другой поток для асинхронного выполнения операции.
Дескрипторы уведомлений устройства, возвращаемые registerDeviceNotification , должны быть закрыты путем вызова функции UnregisterDeviceNotification , если они больше не нужны.
События DBT_DEVICEARRIVAL и DBT_DEVICEREMOVECOMPLETE автоматически передаются во все окна верхнего уровня для устройств порта. Поэтому нет необходимости вызывать RegisterDeviceNotification для портов, и функция завершается ошибкой, если элемент dbch_devicetypeDBT_DEVTYP_PORT. Уведомления о томах также передаются в окна верхнего уровня, поэтому функция завершается сбоем , если dbch_devicetype DBT_DEVTYP_VOLUME. Устройства, определяемые изготовителем оборудования, не используются системой напрямую, поэтому функция завершается сбоем , если dbch_devicetype DBT_DEVTYP_OEM.
Примеры
Пример см. в разделе Регистрация для уведомления устройства.
Примечание
Заголовок winuser.h определяет RegisterDeviceNotification в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP |
Минимальная версия сервера | Windows Server 2003 |
Целевая платформа | Windows |
Header | winuser.h (включая Windows.h) |
Библиотека | User32.lib |
DLL | User32.dll |
Набор API | ext-ms-win-ntuser-misc-l1-1-0 (представлено в Windows 8) |