蓝牙和 WM_DEVICECHANGE 消息

蓝牙包含特定的 WM_DEVICECHANGE 消息,使开发人员能够在蓝牙设备发生状态变化时获取消息。 本主题介绍如何接收蓝牙特定的 WM_DEVICECHANGE 消息并列出蓝牙特定的消息。

接收特定于蓝牙 WM_DEVICECHANGE 消息

要接收 WM_DEVICECHANGE 消息,必须首先打开本地无线电的句柄。 为此,可使用以下方法之一:

打开蓝牙无线电句柄后,调用 RegisterDeviceNotification 函数,并使用 DBT_DEVTYP_HANDLE 作为 devicetype 在句柄上注册通知。 注册后将发送以下 GUID,DEV_BROADCAST_HANDLE::dbch_data 成员是关联的缓冲区。

特定于蓝牙的消息

下表列出了特定于蓝牙的 WM_DEVICECHANGE 消息。

GUID BUFFER 说明
GUID_BLUETOOTH_HCI_EVENT BTH_HCI_EVENT_INFO 当远程蓝牙设备在 ACL 级别连接或断开连接时,将发送此消息。
GUID_BLUETOOTH_L2CAP_EVENT BTH_L2CAP_EVENT_INFO 当本地无线电与远程蓝牙设备之间的 L2CAP 通道建立或终止时,将发送此消息。 对于多路复用的 L2CAP 通道(如 RFCOMM),只有在建立基础通道时才会发送此消息,而不是在建立或终止每个多路复用通道(如 RFCOMM 通道)时。
GUID_BLUETOOTH_PIN_REQUEST 不适用。 应用程序应忽略此消息。 如果应用程序必须接收 PIN 请求,则应使用 BluetoothRegisterForAuthentication 函数。
GUID_BLUETOOTH_RADIO_IN_RANGE BTH_RADIO_IN_RANGE 当远程蓝牙设备的以下任何属性发生变化时,就会发送此消息:设备已发现、设备类别、名称、连接状态或设备已记住状态。 当这些属性被设置或清除时,也会发送此消息。
GUID_BLUETOOTH_RADIO_OUT_OF_RANGE BLUETOOTH_ADDRESS 当最后一次查询完成后仍未找到先前发现的设备时,将发送此消息。 对于已记住的设备,将不会发送此消息。 BTH_ADDRESS 结构是未找到的设备地址。

 

BluetoothFindFirstRadio

BluetoothFindNextRadio

BluetoothFindRadioClose

RegisterDeviceNotification

SetupDiDestroyDeviceInfoList

SetupDiEnumDeviceInterfaces

SetupDiGetClassDevs

BLUETOOTH_ADDRESS

BTH_HCI_EVENT_INFO

BTH_L2CAP_EVENT_INFO

BTH_RADIO_IN_RANGE

DEV_BROADCAST_HANDLE

WM_DEVICECHANGE