获取蓝牙设备连接通知
Posted
技术标签:
【中文标题】获取蓝牙设备连接通知【英文标题】:Get bluetooth devices connection notification 【发布时间】:2019-07-23 04:49:18 【问题描述】:我正在制作一个 winform 应用程序,用于监控计算机上发生的事情,例如进程、wifi、屏幕截图……我正在处理蓝牙连接。
当蓝牙设备与计算机(或笔记本电脑)(例如手机)连接或断开连接时,我需要收到通知。此外,如果可能的话,我需要一些东西来识别设备,例如 ID 或只是它的名称。
有一点需要注意,我使用的是 C#,它是一个 winform 应用程序,如果解决方案使用 Windows 原生库(如 winapi、pInvoke)会很好。第三方库很好,但这是我最后的选择。
更新:我已经按照 Rita Han 的回答得到了一些结果。
下面是我在覆盖 WndProc 方法中的代码。它完全适用于 USB,但不适用于蓝牙设备。
当应用程序运行时,我在笔记本电脑和手机上都打开了蓝牙,但它们尚未配对 → 调用该功能并显示蓝牙来了,然后我连接两个设备 → 现在它们已连接但没有除上述通知外。
之后,当它们连接时,我尝试移除移动电话设备,但它们已断开连接,然后我再次连接它们,但又一次没有收到有关已扫描或连接新蓝牙连接的通知。
简而言之,当蓝牙无线电扫描新设备时我会收到通知,但在第一次连接时不会收到通知。之后,断开连接和重新连接也不会给我任何通知。
我错过了一些活动吗?
case USB.DBT_DEVICEARRIVAL:
devType = Marshal.ReadInt32(m.LParam, 4);
if (devType == USB.DBT_DEVTYP_VOLUME)
USB.DEV_BROADCAST_VOLUME vol;
vol = (USB.DEV_BROADCAST_VOLUME)
Marshal.PtrToStructure(m.LParam, typeof(USB.DEV_BROADCAST_VOLUME));
// Get the drive letter
c = USB.DriveMaskToLetter(vol.dbcv_unitmask);
listBox1.Items.Add("New USB has come with name " + c);
else if (devType == BluetoothDeviceNotification.DbtDevtypDeviceinterface)
BluetoothDeviceNotification.DevBroadcastDeviceinterface vol;
vol = (BluetoothDeviceNotification.DevBroadcastDeviceinterface)Marshal.PtrToStructure(m.LParam, typeof(BluetoothDeviceNotification.DevBroadcastDeviceinterface));
listBox1.Items.Add("Bluetooth came GUID " + vol.ClassGuid + "\t Name: " + vol.Name);
break;
break;
【问题讨论】:
***不是免费的代码编写服务。向我们展示您迄今为止的尝试?你有search attempts或code samples吗? 【参考方案1】:要使用 Windows 原生 API,您可以使用 RegisterDeviceNotification
函数。
请参阅“Registering for Device Notification”示例以了解入门。
Bluetooth interface GUID:
GUID BluetoothGUID = 0x0850302A, 0xB344, 0x4fda, 0x9BE9, 0x90, 0x57, 0x6B, 0x8D, 0x46, 0xF0 ;
Bluetooth and WM_DEVICECHANGE Messages.
【讨论】:
感谢您的回答请查看我上面的更新,了解我在关注答案时遇到的问题希望您能帮助我 @CườngNguyễnHùng 在 Windows 10 1903 上连接或移动设备时,我会收到WM_DEVICECHANGE
消息。您的 Windows 版本是什么?
这是window 10 Pro 1607
@CườngNguyễnHùng 我测试了 SensorTag 和手机,在连接和断开连接时都会触发 WM_DEVICECHANGE 事件。可以试试1607以上的版本吗?
这就是问题所在。我的 winform 应用程序将在多台笔记本电脑上运行,这意味着不同的 Window 版本。无论是哪个 Window 版本,我都需要获取事件。很高兴看到你的代码。以上是关于获取蓝牙设备连接通知的主要内容,如果未能解决你的问题,请参考以下文章