【发布时间】: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;
【问题讨论】:
-
StackOverflow不是免费的代码编写服务。向我们展示您迄今为止的尝试?你有search attempts或code samples吗?
标签: c# winforms winapi bluetooth