RegisterDeviceNotificationA 函数 (winuser.h)
注册窗口将接收通知的设备或设备类型。
注意
如果你的代码面向Windows 8或更高版本的 Windows,则可以使用 CM_Register_Notification 而不是 RegisterDeviceNotification。 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
此参数的取值可为下列值之一:
值 | 含义 |
---|---|
|
hRecipient 参数是窗口句柄。 |
|
hRecipient 参数是服务状态句柄。 |
此外,还可以指定以下值。
值 | 含义 |
---|---|
|
通知接收方所有设备接口类的设备接口事件。 (忽略 dbcc_classguid 成员。) 仅当dbch_devicetype成员DBT_DEVTYP_DEVICEINTERFACE时,才能使用此值。 |
返回值
如果函数成功,则返回值为设备通知句柄。
如果函数失败,则返回值为 NULL。 要获得更多的错误信息,请调用 GetLastError。
注解
应用程序使用 BroadcastSystemMessage 函数发送事件通知。 具有顶级窗口的任何应用程序都可以通过处理 WM_DEVICECHANGE 消息来接收基本通知。 应用程序可以使用 RegisterDeviceNotification 函数进行注册以接收设备通知。
服务可以使用 RegisterDeviceNotification 函数进行注册以接收设备通知。 如果服务在 hRecipient 参数中指定窗口句柄,则会将通知发送到窗口过程。 如果 hRecipient 是服务状态句柄, SERVICE_CONTROL_DEVICEEVENT 通知将发送到服务控制处理程序。 有关服务控件处理程序的详细信息,请参阅 HandlerEx。
请确保尽快处理即插即用设备事件。 否则,系统可能会变得无响应。 如果事件处理程序要执行可能会阻止执行 ((例如 I/O) )的操作,则最好启动另一个线程以异步方式执行该操作。
当 RegisterDeviceNotification 返回的设备通知句柄不再需要时,必须通过调用 UnregisterDeviceNotification 函数将其关闭。
DBT_DEVICEARRIVAL和DBT_DEVICEREMOVECOMPLETE事件会自动广播到端口设备的所有顶级窗口。 因此,无需为端口调用 RegisterDeviceNotification,如果DBT_DEVTYP_PORT dbch_devicetype成员,函数将失败。 卷通知也会广播到顶级窗口,因此,如果DBT_DEVTYP_VOLUME dbch_devicetype,函数将失败。 OEM 定义的设备不由系统直接使用,因此如果DBT_DEVTYP_OEM dbch_devicetype,函数将失败。
示例
有关示例,请参阅 注册设备通知。
注意
winuser.h 标头将 RegisterDeviceNotification 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP |
最低受支持的服务器 | Windows Server 2003 |
目标平台 | Windows |
标头 | winuser.h (包括 Windows.h) |
Library | User32.lib |
DLL | User32.dll |
API 集 | 在 Windows 8) 中引入的 ext-ms-win-ntuser-misc-l1-1-0 ( |